[{"data":1,"prerenderedAt":173032},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-04-qiang-hua-xue-xi\u002Fch2-ma-er-ke-fu-jue-ce-guo-cheng":3,"wiki-doc-nav":37},{"id":4,"title":5,"body":6,"description":16,"extension":30,"meta":31,"navigation":32,"path":33,"seo":34,"stem":35,"__hash__":36},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":8,"toc":27},"minimark",[9,13,17,24],[10,11,5],"h1",{"id":12},"_2马尔可夫决策过程",[14,15,16],"p",{},"这是强化学习的基本框架",[14,18,19],{},[20,21],"img",{"alt":22,"src":23},"","..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,25,26],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":22,"searchDepth":28,"depth":28,"links":29},2,[],"md",{},true,"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":5,"description":16},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",[38,5154,6262,7682,10671,12022,13511,14600,23363,23376,23975,23992,24116,24357,24422,24440,24453,24500,24624,24793,24992,25172,25377,25513,25608,25645,25658,25968,26709,27417,27438,28458,30089,30240,30253,30265,30566,50378,50393,50410,50443,53315,76663,92808,92829,92942,93063,93833,94496,94857,94895,95001,95101,95144,95170,95231,96885,96986,97011,97502,98002,99082,99365,100107,100609,100621,102637,104301,105804,107502,109419,111338,113360,116830,117262,117725,118474,121418,121766,121788,122144,125451,125463,125866,125889,126036,126203,126408,126709,127266,127923,129854,131452,132101,133595,135026,136261,137955,139707,142117,142233,143168,143379,144264,145499,145727,145740,146895,149307,151675,154996,157473,159117,160894,162907,165959,168139,170666,172860],{"id":39,"title":40,"body":41,"description":22,"extension":30,"meta":5149,"navigation":32,"path":5150,"seo":5151,"stem":5152,"__hash__":5153},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":42,"toc":5121},[43,46,51,54,58,71,75,80,83,86,89,92,95,130,134,137,140,143,146,199,203,222,224,238,241,249,252,1115,1122,1139,1143,1234,1238,1244,1333,1337,1375,1379,1443,1447,1451,1457,1468,1472,1477,1481,1486,1490,1495,1499,1503,1508,1778,1783,1921,1926,2183,2186,2194,2198,2203,2306,2309,2615,2624,2725,2728,2731,2734,2737,2997,3002,3142,3145,3324,3327,3455,3458,3610,3614,3619,3622,3633,3641,3644,3751,3755,3759,3764,3814,3819,3824,3848,3853,3906,3909,3914,4091,4096,4381,4386,4783,4787,4792,4849,4854,4862,4865,5005,5008,5117],[10,44,40],{"id":45},"_1基础入门",[47,48,50],"h2",{"id":49},"_11注释","1.1注释",[14,52,53],{},"\u002F\u002F或者\u002F* *\u002F",[47,55,57],{"id":56},"_12命名","1.2命名",[59,60,61,65,68],"ol",{},[62,63,64],"li",{},"字母数字下划线",[62,66,67],{},"开头必须是字母或_",[62,69,70],{},"不能使用关键词",[47,72,74],{"id":73},"_13数据类型","1.3数据类型",[76,77,79],"h3",{"id":78},"_131整形","1.3.1整形",[14,81,82],{},"short 短整形 2",[14,84,85],{},"int 整形 4",[14,87,88],{},"long 长整形 win4 linux32位4 linux64位8",[14,90,91],{},"long long 长长整形 8",[14,93,94],{},"利用sizeof可以求数据类型占用的内存空间大小",[96,97,101],"pre",{"className":98,"code":99,"language":100,"meta":22,"style":22},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[102,103,104,123],"code",{"__ignoreMap":22},[105,106,109,113,117,120],"span",{"class":107,"line":108},"line",1,[105,110,112],{"class":111},"szBVR","sizeof",[105,114,116],{"class":115},"sVt8B","(",[105,118,119],{"class":111},"int",[105,121,122],{"class":115},")\n",[105,124,125,127],{"class":107,"line":28},[105,126,112],{"class":111},[105,128,129],{"class":115},"(num)\n",[76,131,133],{"id":132},"_132浮点型","1.3.2浮点型",[14,135,136],{},"float 单精度 4节 7位有效数字",[14,138,139],{},"double 双精度 8节 15-16有效数字",[14,141,142],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,144,145],{},"注意点：",[96,147,149],{"className":98,"code":148,"language":100,"meta":22,"style":22},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[102,150,151,176],{"__ignoreMap":22},[105,152,153,156,159,162,166,169,172],{"class":107,"line":108},[105,154,155],{"class":111},"float",[105,157,158],{"class":115}," f1",[105,160,161],{"class":111},"=",[105,163,165],{"class":164},"sj4cs","3.14",[105,167,168],{"class":111},"f",[105,170,171],{"class":115},";",[105,173,175],{"class":174},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[105,177,178,180,183,185,188,191,194,196],{"class":107,"line":28},[105,179,155],{"class":111},[105,181,182],{"class":115}," f2",[105,184,161],{"class":111},[105,186,187],{"class":164},"3",[105,189,190],{"class":111},"e",[105,192,193],{"class":164},"2",[105,195,171],{"class":115},[105,197,198],{"class":174}," \u002F\u002F科学记数法\n",[76,200,202],{"id":201},"_133字符型","1.3.3字符型",[96,204,206],{"className":98,"code":205,"language":100,"meta":22,"style":22},"char ch='a'\n",[102,207,208],{"__ignoreMap":22},[105,209,210,213,216,218],{"class":107,"line":108},[105,211,212],{"class":111},"char",[105,214,215],{"class":115}," ch",[105,217,161],{"class":111},[105,219,221],{"class":220},"sZZnC","'a'\n",[14,223,145],{},[59,225,226,229,232,235],{},[62,227,228],{},"在显示字符型变量时，只能单引号，双引号x",[62,230,231],{},"单引号内只能一个字符，不能字符串",[62,233,234],{},"c和c++字符型变量只占用一个字符",[62,236,237],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,239,240],{},"ASCII码大致由以下两部分组成：",[59,242,243,246],{},[62,244,245],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[62,247,248],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,250,251],{},"ASCII码表格：",[253,254,255,299],"table",{},[256,257,258],"thead",{},[259,260,261,269,274,278,283,287,291,295],"tr",{},[262,263,264,268],"th",{},[265,266,267],"strong",{},"ASCII","值",[262,270,271],{},[265,272,273],{},"控制字符",[262,275,276,268],{},[265,277,267],{},[262,279,280],{},[265,281,282],{},"字符",[262,284,285,268],{},[265,286,267],{},[262,288,289],{},[265,290,282],{},[262,292,293,268],{},[265,294,267],{},[262,296,297],{},[265,298,282],{},[300,301,302,329,355,380,405,431,456,481,507,532,558,584,610,635,661,687,713,737,762,787,812,837,862,887,912,937,962,988,1013,1038,1063,1089],"tbody",{},[259,303,304,308,311,314,317,320,323,326],{},[305,306,307],"td",{},"0",[305,309,310],{},"NUT",[305,312,313],{},"32",[305,315,316],{},"(space)",[305,318,319],{},"64",[305,321,322],{},"@",[305,324,325],{},"96",[305,327,328],{},"、",[259,330,331,334,337,340,343,346,349,352],{},[305,332,333],{},"1",[305,335,336],{},"SOH",[305,338,339],{},"33",[305,341,342],{},"!",[305,344,345],{},"65",[305,347,348],{},"A",[305,350,351],{},"97",[305,353,354],{},"a",[259,356,357,359,362,365,368,371,374,377],{},[305,358,193],{},[305,360,361],{},"STX",[305,363,364],{},"34",[305,366,367],{},"\"",[305,369,370],{},"66",[305,372,373],{},"B",[305,375,376],{},"98",[305,378,379],{},"b",[259,381,382,384,387,390,393,396,399,402],{},[305,383,187],{},[305,385,386],{},"ETX",[305,388,389],{},"35",[305,391,392],{},"#",[305,394,395],{},"67",[305,397,398],{},"C",[305,400,401],{},"99",[305,403,404],{},"c",[259,406,407,410,413,416,419,422,425,428],{},[305,408,409],{},"4",[305,411,412],{},"EOT",[305,414,415],{},"36",[305,417,418],{},"$",[305,420,421],{},"68",[305,423,424],{},"D",[305,426,427],{},"100",[305,429,430],{},"d",[259,432,433,436,439,442,445,448,451,454],{},[305,434,435],{},"5",[305,437,438],{},"ENQ",[305,440,441],{},"37",[305,443,444],{},"%",[305,446,447],{},"69",[305,449,450],{},"E",[305,452,453],{},"101",[305,455,190],{},[259,457,458,461,464,467,470,473,476,479],{},[305,459,460],{},"6",[305,462,463],{},"ACK",[305,465,466],{},"38",[305,468,469],{},"&",[305,471,472],{},"70",[305,474,475],{},"F",[305,477,478],{},"102",[305,480,168],{},[259,482,483,486,489,492,495,498,501,504],{},[305,484,485],{},"7",[305,487,488],{},"BEL",[305,490,491],{},"39",[305,493,494],{},",",[305,496,497],{},"71",[305,499,500],{},"G",[305,502,503],{},"103",[305,505,506],{},"g",[259,508,509,512,515,518,520,523,526,529],{},[305,510,511],{},"8",[305,513,514],{},"BS",[305,516,517],{},"40",[305,519,116],{},[305,521,522],{},"72",[305,524,525],{},"H",[305,527,528],{},"104",[305,530,531],{},"h",[259,533,534,537,540,543,546,549,552,555],{},[305,535,536],{},"9",[305,538,539],{},"HT",[305,541,542],{},"41",[305,544,545],{},")",[305,547,548],{},"73",[305,550,551],{},"I",[305,553,554],{},"105",[305,556,557],{},"i",[259,559,560,563,566,569,572,575,578,581],{},[305,561,562],{},"10",[305,564,565],{},"LF",[305,567,568],{},"42",[305,570,571],{},"*",[305,573,574],{},"74",[305,576,577],{},"J",[305,579,580],{},"106",[305,582,583],{},"j",[259,585,586,589,592,595,598,601,604,607],{},[305,587,588],{},"11",[305,590,591],{},"VT",[305,593,594],{},"43",[305,596,597],{},"+",[305,599,600],{},"75",[305,602,603],{},"K",[305,605,606],{},"107",[305,608,609],{},"k",[259,611,612,615,618,621,623,626,629,632],{},[305,613,614],{},"12",[305,616,617],{},"FF",[305,619,620],{},"44",[305,622,494],{},[305,624,625],{},"76",[305,627,628],{},"L",[305,630,631],{},"108",[305,633,634],{},"l",[259,636,637,640,643,646,649,652,655,658],{},[305,638,639],{},"13",[305,641,642],{},"CR",[305,644,645],{},"45",[305,647,648],{},"-",[305,650,651],{},"77",[305,653,654],{},"M",[305,656,657],{},"109",[305,659,660],{},"m",[259,662,663,666,669,672,675,678,681,684],{},[305,664,665],{},"14",[305,667,668],{},"SO",[305,670,671],{},"46",[305,673,674],{},".",[305,676,677],{},"78",[305,679,680],{},"N",[305,682,683],{},"110",[305,685,686],{},"n",[259,688,689,692,695,698,701,704,707,710],{},[305,690,691],{},"15",[305,693,694],{},"SI",[305,696,697],{},"47",[305,699,700],{},"\u002F",[305,702,703],{},"79",[305,705,706],{},"O",[305,708,709],{},"111",[305,711,712],{},"o",[259,714,715,718,721,724,726,729,732,735],{},[305,716,717],{},"16",[305,719,720],{},"DLE",[305,722,723],{},"48",[305,725,307],{},[305,727,728],{},"80",[305,730,731],{},"P",[305,733,734],{},"112",[305,736,14],{},[259,738,739,742,745,748,750,753,756,759],{},[305,740,741],{},"17",[305,743,744],{},"DCI",[305,746,747],{},"49",[305,749,333],{},[305,751,752],{},"81",[305,754,755],{},"Q",[305,757,758],{},"113",[305,760,761],{},"q",[259,763,764,767,770,773,775,778,781,784],{},[305,765,766],{},"18",[305,768,769],{},"DC2",[305,771,772],{},"50",[305,774,193],{},[305,776,777],{},"82",[305,779,780],{},"R",[305,782,783],{},"114",[305,785,786],{},"r",[259,788,789,792,795,798,800,803,806,809],{},[305,790,791],{},"19",[305,793,794],{},"DC3",[305,796,797],{},"51",[305,799,187],{},[305,801,802],{},"83",[305,804,805],{},"S",[305,807,808],{},"115",[305,810,811],{},"s",[259,813,814,817,820,823,825,828,831,834],{},[305,815,816],{},"20",[305,818,819],{},"DC4",[305,821,822],{},"52",[305,824,409],{},[305,826,827],{},"84",[305,829,830],{},"T",[305,832,833],{},"116",[305,835,836],{},"t",[259,838,839,842,845,848,850,853,856,859],{},[305,840,841],{},"21",[305,843,844],{},"NAK",[305,846,847],{},"53",[305,849,435],{},[305,851,852],{},"85",[305,854,855],{},"U",[305,857,858],{},"117",[305,860,861],{},"u",[259,863,864,867,870,873,875,878,881,884],{},[305,865,866],{},"22",[305,868,869],{},"SYN",[305,871,872],{},"54",[305,874,460],{},[305,876,877],{},"86",[305,879,880],{},"V",[305,882,883],{},"118",[305,885,886],{},"v",[259,888,889,892,895,898,900,903,906,909],{},[305,890,891],{},"23",[305,893,894],{},"TB",[305,896,897],{},"55",[305,899,485],{},[305,901,902],{},"87",[305,904,905],{},"W",[305,907,908],{},"119",[305,910,911],{},"w",[259,913,914,917,920,923,925,928,931,934],{},[305,915,916],{},"24",[305,918,919],{},"CAN",[305,921,922],{},"56",[305,924,511],{},[305,926,927],{},"88",[305,929,930],{},"X",[305,932,933],{},"120",[305,935,936],{},"x",[259,938,939,942,945,948,950,953,956,959],{},[305,940,941],{},"25",[305,943,944],{},"EM",[305,946,947],{},"57",[305,949,536],{},[305,951,952],{},"89",[305,954,955],{},"Y",[305,957,958],{},"121",[305,960,961],{},"y",[259,963,964,967,970,973,976,979,982,985],{},[305,965,966],{},"26",[305,968,969],{},"SUB",[305,971,972],{},"58",[305,974,975],{},":",[305,977,978],{},"90",[305,980,981],{},"Z",[305,983,984],{},"122",[305,986,987],{},"z",[259,989,990,993,996,999,1001,1004,1007,1010],{},[305,991,992],{},"27",[305,994,995],{},"ESC",[305,997,998],{},"59",[305,1000,171],{},[305,1002,1003],{},"91",[305,1005,1006],{},"[",[305,1008,1009],{},"123",[305,1011,1012],{},"{",[259,1014,1015,1018,1021,1024,1027,1030,1032,1035],{},[305,1016,1017],{},"28",[305,1019,1020],{},"FS",[305,1022,1023],{},"60",[305,1025,1026],{},"\u003C",[305,1028,1029],{},"92",[305,1031,700],{},[305,1033,1034],{},"124",[305,1036,1037],{},"|",[259,1039,1040,1043,1046,1049,1051,1054,1057,1060],{},[305,1041,1042],{},"29",[305,1044,1045],{},"GS",[305,1047,1048],{},"61",[305,1050,161],{},[305,1052,1053],{},"93",[305,1055,1056],{},"]",[305,1058,1059],{},"125",[305,1061,1062],{},"}",[259,1064,1065,1068,1071,1074,1077,1080,1083,1086],{},[305,1066,1067],{},"30",[305,1069,1070],{},"RS",[305,1072,1073],{},"62",[305,1075,1076],{},">",[305,1078,1079],{},"94",[305,1081,1082],{},"^",[305,1084,1085],{},"126",[305,1087,1088],{},"`",[259,1090,1091,1094,1097,1100,1103,1106,1109,1112],{},[305,1092,1093],{},"31",[305,1095,1096],{},"US",[305,1098,1099],{},"63",[305,1101,1102],{},"?",[305,1104,1105],{},"95",[305,1107,1108],{},"_",[305,1110,1111],{},"127",[305,1113,1114],{},"DEL",[14,1116,1117,1118,1121],{},"ASCII 码大致由以下",[265,1119,1120],{},"两部分组","成：",[1123,1124,1125,1132],"ul",{},[62,1126,1127,1128,1131],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[265,1129,1130],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[62,1133,1134,1135,1138],{},"ASCII 打印字符：数字 ",[265,1136,1137],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[76,1140,1142],{"id":1141},"_134转义字符","1.3.4转义字符",[96,1144,1146],{"className":98,"code":1145,"language":100,"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",[102,1147,1148,1153,1169,1184,1190,1204,1210],{"__ignoreMap":22},[105,1149,1150],{"class":107,"line":108},[105,1151,1152],{"class":174},"\u002F\u002F换行符\n",[105,1154,1155,1158,1161,1164,1166],{"class":107,"line":28},[105,1156,1157],{"class":115},"cout ",[105,1159,1160],{"class":111},"\u003C\u003C",[105,1162,1163],{"class":220},"\"hello world\u002Fn\"",[105,1165,171],{"class":115},[105,1167,1168],{"class":174}," \u002F\u002F就等同于如下：\n",[105,1170,1172,1174,1176,1179,1181],{"class":107,"line":1171},3,[105,1173,1157],{"class":115},[105,1175,1160],{"class":111},[105,1177,1178],{"class":220},"\"hello world\"",[105,1180,1160],{"class":111},[105,1182,1183],{"class":115},"endl;\n",[105,1185,1187],{"class":107,"line":1186},4,[105,1188,1189],{"class":174},"\u002F\u002F反斜杠\n",[105,1191,1193,1195,1197,1200,1202],{"class":107,"line":1192},5,[105,1194,1157],{"class":115},[105,1196,1160],{"class":111},[105,1198,1199],{"class":220},"\"\u002F\u002F\"",[105,1201,1160],{"class":111},[105,1203,1183],{"class":115},[105,1205,1207],{"class":107,"line":1206},6,[105,1208,1209],{"class":174},"\u002F\u002F水平制表符\n",[105,1211,1213,1215,1217,1220,1223,1226,1228,1231],{"class":107,"line":1212},7,[105,1214,1157],{"class":115},[105,1216,1160],{"class":111},[105,1218,1219],{"class":220},"\"aaaa",[105,1221,1222],{"class":164},"\\t",[105,1224,1225],{"class":220},"helloworld\"",[105,1227,1160],{"class":111},[105,1229,1230],{"class":115},"endl;",[105,1232,1233],{"class":174}," \u002F\u002F输出窗口时有对齐效果\n",[76,1235,1237],{"id":1236},"_135字符串型","1.3.5字符串型",[14,1239,1240,1241,1243],{},"char 变量名",[105,1242],{},"=\"字符串值\"",[96,1245,1247],{"className":98,"code":1246,"language":100,"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",[102,1248,1249,1254,1259,1264,1269,1283,1296,1301,1307,1319],{"__ignoreMap":22},[105,1250,1251],{"class":107,"line":108},[105,1252,1253],{"class":174},"\u002F\u002Fc风格字符串\n",[105,1255,1256],{"class":107,"line":28},[105,1257,1258],{"class":174},"\u002F\u002F注意事项：\n",[105,1260,1261],{"class":107,"line":1171},[105,1262,1263],{"class":174},"\u002F\u002F1.char字符串名[]\n",[105,1265,1266],{"class":107,"line":1186},[105,1267,1268],{"class":174},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[105,1270,1271,1273,1276,1278,1280],{"class":107,"line":1192},[105,1272,212],{"class":111},[105,1274,1275],{"class":115}," str[]",[105,1277,161],{"class":111},[105,1279,1178],{"class":220},[105,1281,1282],{"class":115},";\n",[105,1284,1285,1287,1289,1292,1294],{"class":107,"line":1206},[105,1286,1157],{"class":115},[105,1288,1160],{"class":111},[105,1290,1291],{"class":115},"str",[105,1293,1160],{"class":111},[105,1295,1183],{"class":115},[105,1297,1298],{"class":107,"line":1212},[105,1299,1300],{"class":174},"\u002F\u002Fc++风格字符串\n",[105,1302,1304],{"class":107,"line":1303},8,[105,1305,1306],{"class":174},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[105,1308,1310,1313,1315,1317],{"class":107,"line":1309},9,[105,1311,1312],{"class":115},"string str2",[105,1314,161],{"class":111},[105,1316,1178],{"class":220},[105,1318,1282],{"class":115},[105,1320,1322,1324,1326,1329,1331],{"class":107,"line":1321},10,[105,1323,1157],{"class":115},[105,1325,1160],{"class":111},[105,1327,1328],{"class":115},"str2",[105,1330,1160],{"class":111},[105,1332,1183],{"class":115},[76,1334,1336],{"id":1335},"_136布尔类型bool","1.3.6布尔类型bool",[96,1338,1340],{"className":98,"code":1339,"language":100,"meta":22,"style":22},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[102,1341,1342,1357],{"__ignoreMap":22},[105,1343,1344,1347,1350,1352,1355],{"class":107,"line":108},[105,1345,1346],{"class":111},"bool",[105,1348,1349],{"class":115}," flag",[105,1351,161],{"class":111},[105,1353,1354],{"class":164},"true",[105,1356,1282],{"class":115},[105,1358,1359,1362,1365,1368,1370,1372],{"class":107,"line":28},[105,1360,1361],{"class":115},"cout",[105,1363,1364],{"class":111},"\u003C\u003Csizeof",[105,1366,1367],{"class":115},"(flag)",[105,1369,1160],{"class":111},[105,1371,1230],{"class":115},[105,1373,1374],{"class":174}," \u002F\u002F查看布尔占内存空间\n",[47,1376,1378],{"id":1377},"_14键盘输入cin","1.4键盘输入cin",[96,1380,1382],{"className":98,"code":1381,"language":100,"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",[102,1383,1384,1397,1414,1425],{"__ignoreMap":22},[105,1385,1386,1388,1391,1393,1395],{"class":107,"line":108},[105,1387,119],{"class":111},[105,1389,1390],{"class":115}," a",[105,1392,161],{"class":111},[105,1394,307],{"class":164},[105,1396,1282],{"class":115},[105,1398,1399,1401,1403,1406,1408,1410,1412],{"class":107,"line":28},[105,1400,1361],{"class":115},[105,1402,1160],{"class":111},[105,1404,1405],{"class":220},"\"请给整型变量a赋值\"",[105,1407,1160],{"class":111},[105,1409,354],{"class":115},[105,1411,1160],{"class":111},[105,1413,1183],{"class":115},[105,1415,1416,1419,1422],{"class":107,"line":1171},[105,1417,1418],{"class":115},"cin ",[105,1420,1421],{"class":111},">>",[105,1423,1424],{"class":115}," a;\n",[105,1426,1427,1429,1431,1434,1437,1439,1441],{"class":107,"line":1186},[105,1428,1157],{"class":115},[105,1430,1160],{"class":111},[105,1432,1433],{"class":220}," \"整型变量a=\"",[105,1435,1436],{"class":111}," \u003C\u003C",[105,1438,354],{"class":115},[105,1440,1160],{"class":111},[105,1442,1183],{"class":115},[47,1444,1446],{"id":1445},"_15运算符","1.5运算符",[76,1448,1450],{"id":1449},"_151算术运算符","1.5.1算术运算符",[14,1452,1453,1456],{},[20,1454],{"alt":22,"src":1455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[59,1458,1459,1462,1465],{},[62,1460,1461],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[62,1463,1464],{},"两个小数不可以做取模运算",[62,1466,1467],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[76,1469,1471],{"id":1470},"_152赋值运算符","1.5.2赋值运算符",[14,1473,1474],{},[20,1475],{"alt":22,"src":1476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[76,1478,1480],{"id":1479},"_153比较运算符","1.5.3比较运算符",[14,1482,1483],{},[20,1484],{"alt":22,"src":1485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[76,1487,1489],{"id":1488},"_154逻辑运算符","1.5.4逻辑运算符",[14,1491,1492],{},[20,1493],{"alt":22,"src":1494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[47,1496,1498],{"id":1497},"_16程序流程结构","1.6程序流程结构",[76,1500,1502],{"id":1501},"_161选择结构","1.6.1选择结构",[59,1504,1505],{},[62,1506,1507],{},"if语句\n单行、多行、多条件if语句",[96,1509,1511],{"className":98,"code":1510,"language":100,"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",[102,1512,1513,1518,1533,1538,1552,1557,1562,1571,1584,1588,1601,1606,1612,1617,1631,1636,1642,1663,1668,1682,1687,1716,1721,1738,1743,1748,1753,1767,1772],{"__ignoreMap":22},[105,1514,1515],{"class":107,"line":108},[105,1516,1517],{"class":174},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[105,1519,1520,1523,1526,1528,1531],{"class":107,"line":28},[105,1521,1522],{"class":111},"if",[105,1524,1525],{"class":115},"(score",[105,1527,1076],{"class":111},[105,1529,1530],{"class":164},"600",[105,1532,122],{"class":115},[105,1534,1535],{"class":107,"line":1171},[105,1536,1537],{"class":115},"{\n",[105,1539,1540,1543,1545,1548,1550],{"class":107,"line":1186},[105,1541,1542],{"class":115},"    cout",[105,1544,1160],{"class":111},[105,1546,1547],{"class":220},"'这是单行if语句'",[105,1549,1160],{"class":111},[105,1551,1183],{"class":115},[105,1553,1554],{"class":107,"line":1192},[105,1555,1556],{"class":115},"}\n",[105,1558,1559],{"class":107,"line":1206},[105,1560,1561],{"class":174},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[105,1563,1564,1566,1568],{"class":107,"line":1212},[105,1565,1418],{"class":115},[105,1567,1421],{"class":111},[105,1569,1570],{"class":115}," score\n",[105,1572,1573,1575,1577,1580,1582],{"class":107,"line":1303},[105,1574,1522],{"class":111},[105,1576,1525],{"class":115},[105,1578,1579],{"class":111},"\u003C=",[105,1581,1530],{"class":164},[105,1583,122],{"class":115},[105,1585,1586],{"class":107,"line":1309},[105,1587,1537],{"class":115},[105,1589,1590,1592,1594,1597,1599],{"class":107,"line":1321},[105,1591,1542],{"class":115},[105,1593,1421],{"class":111},[105,1595,1596],{"class":220},"\"小于等于600\"",[105,1598,1160],{"class":111},[105,1600,1183],{"class":115},[105,1602,1604],{"class":107,"line":1603},11,[105,1605,1556],{"class":115},[105,1607,1609],{"class":107,"line":1608},12,[105,1610,1611],{"class":111},"else\n",[105,1613,1615],{"class":107,"line":1614},13,[105,1616,1537],{"class":115},[105,1618,1620,1622,1624,1627,1629],{"class":107,"line":1619},14,[105,1621,1542],{"class":115},[105,1623,1421],{"class":111},[105,1625,1626],{"class":220},"\"大于600\"",[105,1628,1421],{"class":111},[105,1630,1183],{"class":115},[105,1632,1634],{"class":107,"line":1633},15,[105,1635,1556],{"class":115},[105,1637,1639],{"class":107,"line":1638},16,[105,1640,1641],{"class":174},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[105,1643,1645,1647,1650,1652,1654,1657,1659,1661],{"class":107,"line":1644},17,[105,1646,1522],{"class":111},[105,1648,1649],{"class":115}," (",[105,1651,307],{"class":164},[105,1653,1026],{"class":111},[105,1655,1656],{"class":115},"num",[105,1658,1026],{"class":111},[105,1660,427],{"class":164},[105,1662,122],{"class":115},[105,1664,1666],{"class":107,"line":1665},18,[105,1667,1537],{"class":115},[105,1669,1671,1673,1675,1678,1680],{"class":107,"line":1670},19,[105,1672,1542],{"class":115},[105,1674,1160],{"class":111},[105,1676,1677],{"class":220},"\"小于100\"",[105,1679,1160],{"class":111},[105,1681,1183],{"class":115},[105,1683,1685],{"class":107,"line":1684},20,[105,1686,1556],{"class":115},[105,1688,1690,1693,1696,1699,1702,1704,1707,1709,1711,1714],{"class":107,"line":1689},21,[105,1691,1692],{"class":111},"else",[105,1694,1695],{"class":111}," if",[105,1697,1698],{"class":115}," (nmu",[105,1700,1701],{"class":111},">=",[105,1703,427],{"class":164},[105,1705,1706],{"class":111},"&&",[105,1708,1656],{"class":115},[105,1710,1026],{"class":111},[105,1712,1713],{"class":164},"200",[105,1715,122],{"class":115},[105,1717,1719],{"class":107,"line":1718},22,[105,1720,1537],{"class":115},[105,1722,1724,1726,1728,1731,1733,1735],{"class":107,"line":1723},23,[105,1725,1542],{"class":115},[105,1727,1160],{"class":111},[105,1729,1730],{"class":220},"\"不小于100且小于200\"",[105,1732,1160],{"class":111},[105,1734,1230],{"class":115},[105,1736,1737],{"class":174}," \u002F\u002F可以无限else if,python中是elif：\n",[105,1739,1741],{"class":107,"line":1740},24,[105,1742,1556],{"class":115},[105,1744,1746],{"class":107,"line":1745},25,[105,1747,1611],{"class":111},[105,1749,1751],{"class":107,"line":1750},26,[105,1752,1537],{"class":115},[105,1754,1756,1758,1760,1763,1765],{"class":107,"line":1755},27,[105,1757,1542],{"class":115},[105,1759,1160],{"class":111},[105,1761,1762],{"class":220},"\"不小于200\"",[105,1764,1160],{"class":111},[105,1766,1183],{"class":115},[105,1768,1770],{"class":107,"line":1769},28,[105,1771,1556],{"class":115},[105,1773,1775],{"class":107,"line":1774},29,[105,1776,1777],{"class":174},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[59,1779,1780],{"start":28},[62,1781,1782],{},"三目运算符",[96,1784,1786],{"className":98,"code":1785,"language":100,"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",[102,1787,1788,1793,1798,1824,1846,1863,1868,1891,1906],{"__ignoreMap":22},[105,1789,1790],{"class":107,"line":108},[105,1791,1792],{"class":174},"\u002F\u002F创建三个变量a,b,c\n",[105,1794,1795],{"class":107,"line":28},[105,1796,1797],{"class":174},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[105,1799,1800,1802,1804,1806,1808,1811,1813,1815,1818,1820,1822],{"class":107,"line":1171},[105,1801,119],{"class":111},[105,1803,1390],{"class":115},[105,1805,161],{"class":111},[105,1807,816],{"class":164},[105,1809,1810],{"class":115},",b",[105,1812,161],{"class":111},[105,1814,562],{"class":164},[105,1816,1817],{"class":115},",c",[105,1819,161],{"class":111},[105,1821,307],{"class":164},[105,1823,1282],{"class":115},[105,1825,1826,1828,1830,1833,1835,1837,1839,1841,1843],{"class":107,"line":1186},[105,1827,404],{"class":115},[105,1829,161],{"class":111},[105,1831,1832],{"class":115},"(a",[105,1834,1076],{"class":111},[105,1836,379],{"class":115},[105,1838,1102],{"class":111},[105,1840,354],{"class":115},[105,1842,975],{"class":111},[105,1844,1845],{"class":115},"b)\n",[105,1847,1848,1850,1852,1855,1857,1859,1861],{"class":107,"line":1192},[105,1849,1361],{"class":115},[105,1851,1160],{"class":111},[105,1853,1854],{"class":220},"\"c=\"",[105,1856,1160],{"class":111},[105,1858,404],{"class":115},[105,1860,1160],{"class":111},[105,1862,1183],{"class":115},[105,1864,1865],{"class":107,"line":1206},[105,1866,1867],{"class":174},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[105,1869,1870,1872,1874,1876,1878,1880,1882,1885,1887,1889],{"class":107,"line":1212},[105,1871,1832],{"class":115},[105,1873,1076],{"class":111},[105,1875,379],{"class":115},[105,1877,1102],{"class":111},[105,1879,354],{"class":115},[105,1881,975],{"class":111},[105,1883,1884],{"class":115},"b)",[105,1886,161],{"class":111},[105,1888,427],{"class":164},[105,1890,1282],{"class":115},[105,1892,1893,1895,1897,1899,1901,1903],{"class":107,"line":1303},[105,1894,1361],{"class":115},[105,1896,1160],{"class":111},[105,1898,354],{"class":115},[105,1900,1160],{"class":111},[105,1902,1230],{"class":115},[105,1904,1905],{"class":174}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[105,1907,1908,1910,1912,1914,1916,1918],{"class":107,"line":1309},[105,1909,1361],{"class":115},[105,1911,1160],{"class":111},[105,1913,379],{"class":115},[105,1915,1160],{"class":111},[105,1917,1230],{"class":115},[105,1919,1920],{"class":174}," \u002F\u002F10   a>b,b还是原值\n",[59,1922,1923],{"start":1171},[62,1924,1925],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[96,1927,1929],{"className":98,"code":1928,"language":100,"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",[102,1930,1931,1936,1944,1958,1968,1972,1986,1999,2009,2017,2022,2047,2068,2090,2111,2133,2154,2174,2179],{"__ignoreMap":22},[105,1932,1933],{"class":107,"line":108},[105,1934,1935],{"class":174},"\u002F\u002F案例-电影打分\n",[105,1937,1938,1941],{"class":107,"line":28},[105,1939,1940],{"class":111},"#include",[105,1942,1943],{"class":220},"\u003Ciostream>\n",[105,1945,1946,1949,1952,1956],{"class":107,"line":1171},[105,1947,1948],{"class":111},"using",[105,1950,1951],{"class":111}," namespace",[105,1953,1955],{"class":1954},"sScJk"," std",[105,1957,1282],{"class":115},[105,1959,1960,1962,1965],{"class":107,"line":1186},[105,1961,119],{"class":111},[105,1963,1964],{"class":1954}," main",[105,1966,1967],{"class":115},"()\n",[105,1969,1970],{"class":107,"line":1192},[105,1971,1537],{"class":115},[105,1973,1974,1977,1980,1982,1984],{"class":107,"line":1206},[105,1975,1976],{"class":111},"    int",[105,1978,1979],{"class":115}," score",[105,1981,161],{"class":111},[105,1983,307],{"class":164},[105,1985,1282],{"class":115},[105,1987,1988,1990,1992,1995,1997],{"class":107,"line":1212},[105,1989,1542],{"class":115},[105,1991,1160],{"class":111},[105,1993,1994],{"class":220},"\"电影打分：\"",[105,1996,1160],{"class":111},[105,1998,1183],{"class":115},[105,2000,2001,2004,2006],{"class":107,"line":1303},[105,2002,2003],{"class":115},"    cin",[105,2005,1421],{"class":111},[105,2007,2008],{"class":115},"score;\n",[105,2010,2011,2014],{"class":107,"line":1309},[105,2012,2013],{"class":111},"    switch",[105,2015,2016],{"class":115},"(score)\n",[105,2018,2019],{"class":107,"line":1321},[105,2020,2021],{"class":115},"    {\n",[105,2023,2024,2027,2030,2033,2035,2038,2040,2042,2045],{"class":107,"line":1603},[105,2025,2026],{"class":111},"        case",[105,2028,2029],{"class":164}," 10",[105,2031,2032],{"class":115},":cout",[105,2034,1160],{"class":111},[105,2036,2037],{"class":220},"\"经典\"",[105,2039,1160],{"class":111},[105,2041,1230],{"class":115},[105,2043,2044],{"class":111},"break",[105,2046,1282],{"class":115},[105,2048,2049,2051,2054,2056,2058,2060,2062,2064,2066],{"class":107,"line":1608},[105,2050,2026],{"class":111},[105,2052,2053],{"class":164}," 9",[105,2055,2032],{"class":115},[105,2057,1160],{"class":111},[105,2059,2037],{"class":220},[105,2061,1160],{"class":111},[105,2063,1230],{"class":115},[105,2065,2044],{"class":111},[105,2067,1282],{"class":115},[105,2069,2070,2072,2075,2077,2079,2082,2084,2086,2088],{"class":107,"line":1614},[105,2071,2026],{"class":111},[105,2073,2074],{"class":164}," 8",[105,2076,2032],{"class":115},[105,2078,1160],{"class":111},[105,2080,2081],{"class":220},"\"非常好\"",[105,2083,1160],{"class":111},[105,2085,1230],{"class":115},[105,2087,2044],{"class":111},[105,2089,1282],{"class":115},[105,2091,2092,2094,2097,2099,2101,2103,2105,2107,2109],{"class":107,"line":1619},[105,2093,2026],{"class":111},[105,2095,2096],{"class":164}," 7",[105,2098,2032],{"class":115},[105,2100,1160],{"class":111},[105,2102,2081],{"class":220},[105,2104,1160],{"class":111},[105,2106,1230],{"class":115},[105,2108,2044],{"class":111},[105,2110,1282],{"class":115},[105,2112,2113,2115,2118,2120,2122,2125,2127,2129,2131],{"class":107,"line":1633},[105,2114,2026],{"class":111},[105,2116,2117],{"class":164}," 6",[105,2119,2032],{"class":115},[105,2121,1160],{"class":111},[105,2123,2124],{"class":220},"\"一般\"",[105,2126,1160],{"class":111},[105,2128,1230],{"class":115},[105,2130,2044],{"class":111},[105,2132,1282],{"class":115},[105,2134,2135,2137,2140,2142,2144,2146,2148,2150,2152],{"class":107,"line":1638},[105,2136,2026],{"class":111},[105,2138,2139],{"class":164}," 5",[105,2141,2032],{"class":115},[105,2143,1160],{"class":111},[105,2145,2124],{"class":220},[105,2147,1160],{"class":111},[105,2149,1230],{"class":115},[105,2151,2044],{"class":111},[105,2153,1282],{"class":115},[105,2155,2156,2159,2161,2163,2166,2168,2170,2172],{"class":107,"line":1644},[105,2157,2158],{"class":111},"        default",[105,2160,2032],{"class":115},[105,2162,1160],{"class":111},[105,2164,2165],{"class":220},"\"烂片\"",[105,2167,1160],{"class":111},[105,2169,1230],{"class":115},[105,2171,2044],{"class":111},[105,2173,1282],{"class":115},[105,2175,2176],{"class":107,"line":1665},[105,2177,2178],{"class":115},"    }\n",[105,2180,2181],{"class":107,"line":1670},[105,2182,1556],{"class":115},[14,2184,2185],{},"if和switch区别：",[1123,2187,2188,2191],{},[62,2189,2190],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[62,2192,2193],{},"switch优点：结构清晰，执行效率高",[76,2195,2197],{"id":2196},"_162循环结构","1.6.2循环结构",[59,2199,2200],{},[62,2201,2202],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[96,2204,2206],{"className":98,"code":2205,"language":100,"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",[102,2207,2208,2213,2221,2225,2238,2252,2256,2276,2286,2290,2302],{"__ignoreMap":22},[105,2209,2210],{"class":107,"line":108},[105,2211,2212],{"class":174},"\u002F\u002F打印0-9数字\n",[105,2214,2215,2217,2219],{"class":107,"line":28},[105,2216,119],{"class":111},[105,2218,1964],{"class":1954},[105,2220,1967],{"class":115},[105,2222,2223],{"class":107,"line":1171},[105,2224,1537],{"class":115},[105,2226,2227,2229,2232,2234,2236],{"class":107,"line":1186},[105,2228,1976],{"class":111},[105,2230,2231],{"class":115}," num",[105,2233,161],{"class":111},[105,2235,307],{"class":164},[105,2237,1282],{"class":115},[105,2239,2240,2243,2246,2248,2250],{"class":107,"line":1192},[105,2241,2242],{"class":111},"    while",[105,2244,2245],{"class":115},"(num",[105,2247,1026],{"class":111},[105,2249,562],{"class":164},[105,2251,122],{"class":115},[105,2253,2254],{"class":107,"line":1206},[105,2255,2021],{"class":115},[105,2257,2258,2261,2264,2266,2268,2270,2273],{"class":107,"line":1212},[105,2259,2260],{"class":1954},"       std",[105,2262,2263],{"class":115},"::cout",[105,2265,1160],{"class":111},[105,2267,1656],{"class":115},[105,2269,1160],{"class":111},[105,2271,2272],{"class":1954},"std",[105,2274,2275],{"class":115},"::endl;\n",[105,2277,2278,2281,2284],{"class":107,"line":1303},[105,2279,2280],{"class":115},"        num",[105,2282,2283],{"class":111},"++",[105,2285,1282],{"class":115},[105,2287,2288],{"class":107,"line":1309},[105,2289,2178],{"class":115},[105,2291,2292,2295,2297,2300],{"class":107,"line":1321},[105,2293,2294],{"class":1954},"    system",[105,2296,116],{"class":115},[105,2298,2299],{"class":220},"\"pause\"",[105,2301,122],{"class":115},[105,2303,2304],{"class":107,"line":1603},[105,2305,1556],{"class":115},[14,2307,2308],{},"注意：写好循环条件，避免死循环情况",[96,2310,2312],{"className":98,"code":2311,"language":100,"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",[102,2313,2314,2319,2326,2333,2343,2351,2355,2360,2387,2392,2397,2405,2432,2437,2442,2455,2465,2469,2479,2484,2497,2502,2516,2521,2536,2540,2553,2557,2562,2566,2580,2588,2593,2599,2605,2610],{"__ignoreMap":22},[105,2315,2316],{"class":107,"line":108},[105,2317,2318],{"class":174},"\u002F\u002F循环结构-猜数字\n",[105,2320,2321,2323],{"class":107,"line":28},[105,2322,1940],{"class":111},[105,2324,2325],{"class":220}," \u003Ciostream>\n",[105,2327,2328,2330],{"class":107,"line":1171},[105,2329,1940],{"class":111},[105,2331,2332],{"class":220}," \u003Cctime>\n",[105,2334,2335,2337,2339,2341],{"class":107,"line":1186},[105,2336,1948],{"class":111},[105,2338,1951],{"class":111},[105,2340,1955],{"class":1954},[105,2342,1282],{"class":115},[105,2344,2345,2347,2349],{"class":107,"line":1192},[105,2346,119],{"class":111},[105,2348,1964],{"class":1954},[105,2350,1967],{"class":115},[105,2352,2353],{"class":107,"line":1206},[105,2354,1537],{"class":115},[105,2356,2357],{"class":107,"line":1212},[105,2358,2359],{"class":174},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[105,2361,2362,2365,2368,2371,2374,2376,2379,2381,2384],{"class":107,"line":1303},[105,2363,2364],{"class":1954},"    srand",[105,2366,2367],{"class":115},"((",[105,2369,2370],{"class":111},"unsigned",[105,2372,2373],{"class":111}," int",[105,2375,545],{"class":115},[105,2377,2378],{"class":1954},"time",[105,2380,116],{"class":115},[105,2382,2383],{"class":164},"NULL",[105,2385,2386],{"class":115},"));\n",[105,2388,2389],{"class":107,"line":1309},[105,2390,2391],{"emptyLinePlaceholder":32},"\n",[105,2393,2394],{"class":107,"line":1321},[105,2395,2396],{"class":174},"    \u002F\u002F1.系统生成随机数\n",[105,2398,2399,2402],{"class":107,"line":1603},[105,2400,2401],{"class":174},"    \u002F\u002Frand()%100",[105,2403,2404],{"class":174}," \u002F\u002F生成0-99的随机数\n",[105,2406,2407,2409,2411,2413,2416,2419,2421,2423,2425,2427,2429],{"class":107,"line":1608},[105,2408,1976],{"class":111},[105,2410,2231],{"class":115},[105,2412,161],{"class":111},[105,2414,2415],{"class":1954},"rand",[105,2417,2418],{"class":115},"()",[105,2420,444],{"class":111},[105,2422,427],{"class":164},[105,2424,597],{"class":111},[105,2426,333],{"class":164},[105,2428,171],{"class":115},[105,2430,2431],{"class":174}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[105,2433,2434],{"class":107,"line":1614},[105,2435,2436],{"class":174},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[105,2438,2439],{"class":107,"line":1619},[105,2440,2441],{"class":174},"    \u002F\u002F2.玩家猜测\n",[105,2443,2444,2446,2449,2451,2453],{"class":107,"line":1633},[105,2445,1976],{"class":111},[105,2447,2448],{"class":115}," val",[105,2450,161],{"class":111},[105,2452,307],{"class":164},[105,2454,1282],{"class":115},[105,2456,2457,2459,2461,2463],{"class":107,"line":1638},[105,2458,2242],{"class":111},[105,2460,1649],{"class":115},[105,2462,333],{"class":164},[105,2464,122],{"class":115},[105,2466,2467],{"class":107,"line":1644},[105,2468,2021],{"class":115},[105,2470,2471,2474,2476],{"class":107,"line":1665},[105,2472,2473],{"class":115},"        cin",[105,2475,1421],{"class":111},[105,2477,2478],{"class":115},"val;\n",[105,2480,2481],{"class":107,"line":1670},[105,2482,2483],{"class":174},"        \u002F\u002F3.判断玩家猜测\n",[105,2485,2486,2489,2492,2494],{"class":107,"line":1684},[105,2487,2488],{"class":111},"        if",[105,2490,2491],{"class":115},"(val",[105,2493,1026],{"class":111},[105,2495,2496],{"class":115},"num) \n",[105,2498,2499],{"class":107,"line":1689},[105,2500,2501],{"class":115},"        {\n",[105,2503,2504,2507,2509,2512,2514],{"class":107,"line":1718},[105,2505,2506],{"class":115},"            cout",[105,2508,1160],{"class":111},[105,2510,2511],{"class":220},"\"猜小了！\"",[105,2513,1160],{"class":111},[105,2515,1183],{"class":115},[105,2517,2518],{"class":107,"line":1723},[105,2519,2520],{"class":115},"        }\n",[105,2522,2523,2526,2528,2531,2533],{"class":107,"line":1740},[105,2524,2525],{"class":111},"        else",[105,2527,1695],{"class":111},[105,2529,2530],{"class":115}," (val",[105,2532,1076],{"class":111},[105,2534,2535],{"class":115},"num)\n",[105,2537,2538],{"class":107,"line":1745},[105,2539,2501],{"class":115},[105,2541,2542,2544,2546,2549,2551],{"class":107,"line":1750},[105,2543,2506],{"class":115},[105,2545,1160],{"class":111},[105,2547,2548],{"class":220},"\"猜大了！\"",[105,2550,1160],{"class":111},[105,2552,1183],{"class":115},[105,2554,2555],{"class":107,"line":1755},[105,2556,2520],{"class":115},[105,2558,2559],{"class":107,"line":1769},[105,2560,2561],{"class":111},"        else\n",[105,2563,2564],{"class":107,"line":1774},[105,2565,2501],{"class":115},[105,2567,2569,2571,2573,2576,2578],{"class":107,"line":2568},30,[105,2570,2506],{"class":115},[105,2572,1160],{"class":111},[105,2574,2575],{"class":220},"\"猜对了！\"",[105,2577,1160],{"class":111},[105,2579,1183],{"class":115},[105,2581,2583,2586],{"class":107,"line":2582},31,[105,2584,2585],{"class":111},"            break",[105,2587,1282],{"class":115},[105,2589,2591],{"class":107,"line":2590},32,[105,2592,2520],{"class":115},[105,2594,2596],{"class":107,"line":2595},33,[105,2597,2598],{"class":174},"        \u002F\u002F猜对 退出游戏\n",[105,2600,2602],{"class":107,"line":2601},34,[105,2603,2604],{"class":174},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[105,2606,2608],{"class":107,"line":2607},35,[105,2609,2178],{"class":115},[105,2611,2613],{"class":107,"line":2612},36,[105,2614,1556],{"class":115},[59,2616,2617],{"start":28},[62,2618,2619,2620,2623],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[265,2621,2622],{},"do...while会先执行一次循环语句","，在判断循环语句",[96,2625,2627],{"className":98,"code":2626,"language":100,"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",[102,2628,2629,2634,2642,2646,2658,2666,2670,2687,2694,2698,2711,2721],{"__ignoreMap":22},[105,2630,2631],{"class":107,"line":108},[105,2632,2633],{"class":174},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[105,2635,2636,2638,2640],{"class":107,"line":28},[105,2637,119],{"class":111},[105,2639,1964],{"class":1954},[105,2641,1967],{"class":115},[105,2643,2644],{"class":107,"line":1171},[105,2645,1537],{"class":115},[105,2647,2648,2650,2652,2654,2656],{"class":107,"line":1186},[105,2649,1976],{"class":111},[105,2651,2231],{"class":115},[105,2653,161],{"class":111},[105,2655,307],{"class":164},[105,2657,1282],{"class":115},[105,2659,2660,2663],{"class":107,"line":1192},[105,2661,2662],{"class":111},"    do",[105,2664,2665],{"class":115}," \n",[105,2667,2668],{"class":107,"line":1206},[105,2669,2021],{"class":115},[105,2671,2672,2675,2677,2679,2681,2683,2685],{"class":107,"line":1212},[105,2673,2674],{"class":1954},"        std",[105,2676,2263],{"class":115},[105,2678,1160],{"class":111},[105,2680,1656],{"class":115},[105,2682,1160],{"class":111},[105,2684,2272],{"class":1954},[105,2686,2275],{"class":115},[105,2688,2689,2691],{"class":107,"line":1303},[105,2690,2280],{"class":115},[105,2692,2693],{"class":111},"++\n",[105,2695,2696],{"class":107,"line":1309},[105,2697,2178],{"class":115},[105,2699,2700,2702,2704,2706,2708],{"class":107,"line":1321},[105,2701,2242],{"class":111},[105,2703,2245],{"class":115},[105,2705,1026],{"class":111},[105,2707,562],{"class":164},[105,2709,2710],{"class":115},");\n",[105,2712,2713,2715,2717,2719],{"class":107,"line":1603},[105,2714,2294],{"class":1954},[105,2716,116],{"class":115},[105,2718,2299],{"class":220},[105,2720,2710],{"class":115},[105,2722,2723],{"class":107,"line":1608},[105,2724,1556],{"class":115},[14,2726,2727],{},"案例-水仙花数",[14,2729,2730],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2732,2733],{},"例如：1^3+5^3+3^3=153",[14,2735,2736],{},"请用do...while语句，求出所有3位数的水仙花数",[96,2738,2740],{"className":98,"code":2739,"language":100,"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",[102,2741,2742,2748,2758,2766,2770,2775,2787,2793,2797,2802,2818,2834,2850,2865,2884,2899,2947,2951,2963,2967,2975,2979,2993],{"__ignoreMap":22},[105,2743,2744,2746],{"class":107,"line":108},[105,2745,1940],{"class":111},[105,2747,2325],{"class":220},[105,2749,2750,2752,2754,2756],{"class":107,"line":28},[105,2751,1948],{"class":111},[105,2753,1951],{"class":111},[105,2755,1955],{"class":1954},[105,2757,1282],{"class":115},[105,2759,2760,2762,2764],{"class":107,"line":1171},[105,2761,119],{"class":111},[105,2763,1964],{"class":1954},[105,2765,1967],{"class":115},[105,2767,2768],{"class":107,"line":1186},[105,2769,1537],{"class":115},[105,2771,2772],{"class":107,"line":1192},[105,2773,2774],{"class":174},"    \u002F\u002F1.先打印所有三位数字\n",[105,2776,2777,2779,2781,2783,2785],{"class":107,"line":1206},[105,2778,1976],{"class":111},[105,2780,2231],{"class":115},[105,2782,161],{"class":111},[105,2784,427],{"class":164},[105,2786,1282],{"class":115},[105,2788,2789,2791],{"class":107,"line":1212},[105,2790,2662],{"class":111},[105,2792,2665],{"class":115},[105,2794,2795],{"class":107,"line":1303},[105,2796,2021],{"class":115},[105,2798,2799],{"class":107,"line":1309},[105,2800,2801],{"class":174},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[105,2803,2804,2807,2809,2811,2813,2815],{"class":107,"line":1321},[105,2805,2806],{"class":111},"        int",[105,2808,1390],{"class":115},[105,2810,161],{"class":111},[105,2812,307],{"class":164},[105,2814,171],{"class":115},[105,2816,2817],{"class":174}," \u002F\u002F个位\n",[105,2819,2820,2822,2825,2827,2829,2831],{"class":107,"line":1603},[105,2821,2806],{"class":111},[105,2823,2824],{"class":115}," b",[105,2826,161],{"class":111},[105,2828,307],{"class":164},[105,2830,171],{"class":115},[105,2832,2833],{"class":174}," \u002F\u002F十位\n",[105,2835,2836,2838,2841,2843,2845,2847],{"class":107,"line":1608},[105,2837,2806],{"class":111},[105,2839,2840],{"class":115}," c",[105,2842,161],{"class":111},[105,2844,307],{"class":164},[105,2846,171],{"class":115},[105,2848,2849],{"class":174}," \u002F\u002F百位\n",[105,2851,2852,2855,2857,2859,2861,2863],{"class":107,"line":1614},[105,2853,2854],{"class":115},"        a",[105,2856,161],{"class":111},[105,2858,1656],{"class":115},[105,2860,444],{"class":111},[105,2862,562],{"class":164},[105,2864,1282],{"class":115},[105,2866,2867,2870,2872,2874,2876,2878,2880,2882],{"class":107,"line":1619},[105,2868,2869],{"class":115},"        b",[105,2871,161],{"class":111},[105,2873,1656],{"class":115},[105,2875,700],{"class":111},[105,2877,562],{"class":164},[105,2879,444],{"class":111},[105,2881,562],{"class":164},[105,2883,1282],{"class":115},[105,2885,2886,2889,2891,2893,2895,2897],{"class":107,"line":1633},[105,2887,2888],{"class":115},"        c",[105,2890,161],{"class":111},[105,2892,1656],{"class":115},[105,2894,700],{"class":111},[105,2896,427],{"class":164},[105,2898,1282],{"class":115},[105,2900,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2938,2941,2944],{"class":107,"line":1638},[105,2902,2488],{"class":111},[105,2904,1832],{"class":115},[105,2906,571],{"class":111},[105,2908,354],{"class":115},[105,2910,571],{"class":111},[105,2912,354],{"class":115},[105,2914,597],{"class":111},[105,2916,379],{"class":115},[105,2918,571],{"class":111},[105,2920,379],{"class":115},[105,2922,571],{"class":111},[105,2924,379],{"class":115},[105,2926,597],{"class":111},[105,2928,404],{"class":115},[105,2930,571],{"class":111},[105,2932,404],{"class":115},[105,2934,571],{"class":111},[105,2936,2937],{"class":115},"c ",[105,2939,2940],{"class":111},"==",[105,2942,2943],{"class":115}," num)",[105,2945,2946],{"class":174}," \u002F\u002F如果是水仙花数，才打印\n",[105,2948,2949],{"class":107,"line":1644},[105,2950,2501],{"class":115},[105,2952,2953,2955,2957,2959,2961],{"class":107,"line":1665},[105,2954,2506],{"class":115},[105,2956,1160],{"class":111},[105,2958,1656],{"class":115},[105,2960,1160],{"class":111},[105,2962,1183],{"class":115},[105,2964,2965],{"class":107,"line":1670},[105,2966,2520],{"class":115},[105,2968,2969,2971,2973],{"class":107,"line":1684},[105,2970,2280],{"class":115},[105,2972,2283],{"class":111},[105,2974,1282],{"class":115},[105,2976,2977],{"class":107,"line":1689},[105,2978,2178],{"class":115},[105,2980,2981,2983,2986,2988,2991],{"class":107,"line":1718},[105,2982,2242],{"class":111},[105,2984,2985],{"class":115}," (num ",[105,2987,1026],{"class":111},[105,2989,2990],{"class":164}," 1000",[105,2992,2710],{"class":115},[105,2994,2995],{"class":107,"line":1723},[105,2996,1556],{"class":115},[59,2998,2999],{"start":1171},[62,3000,3001],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[96,3003,3005],{"className":98,"code":3004,"language":100,"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",[102,3006,3007,3012,3041,3045,3057,3061,3066,3077,3084,3088,3102,3106,3113,3117,3129,3138],{"__ignoreMap":22},[105,3008,3009],{"class":107,"line":108},[105,3010,3011],{"class":174},"\u002F\u002F从数字0-9打印\n",[105,3013,3014,3017,3019,3021,3024,3026,3028,3031,3033,3035,3037,3039],{"class":107,"line":28},[105,3015,3016],{"class":111},"for",[105,3018,116],{"class":115},[105,3020,119],{"class":111},[105,3022,3023],{"class":115}," i",[105,3025,161],{"class":111},[105,3027,307],{"class":164},[105,3029,3030],{"class":115},";i",[105,3032,1026],{"class":111},[105,3034,562],{"class":164},[105,3036,3030],{"class":115},[105,3038,2283],{"class":111},[105,3040,122],{"class":115},[105,3042,3043],{"class":107,"line":1171},[105,3044,1537],{"class":115},[105,3046,3047,3049,3051,3053,3055],{"class":107,"line":1186},[105,3048,1542],{"class":115},[105,3050,1160],{"class":111},[105,3052,557],{"class":115},[105,3054,1160],{"class":111},[105,3056,1183],{"class":115},[105,3058,3059],{"class":107,"line":1192},[105,3060,1556],{"class":115},[105,3062,3063],{"class":107,"line":1206},[105,3064,3065],{"class":174},"\u002F\u002F上式可以进行拆分\n",[105,3067,3068,3070,3072,3074],{"class":107,"line":1212},[105,3069,119],{"class":111},[105,3071,3023],{"class":115},[105,3073,161],{"class":111},[105,3075,3076],{"class":164},"0\n",[105,3078,3079,3081],{"class":107,"line":1303},[105,3080,3016],{"class":111},[105,3082,3083],{"class":115},"(;;;)\n",[105,3085,3086],{"class":107,"line":1309},[105,3087,1537],{"class":115},[105,3089,3090,3093,3096,3098,3100],{"class":107,"line":1321},[105,3091,3092],{"class":111},"    if",[105,3094,3095],{"class":115},"(i",[105,3097,1701],{"class":111},[105,3099,562],{"class":164},[105,3101,122],{"class":115},[105,3103,3104],{"class":107,"line":1603},[105,3105,2021],{"class":115},[105,3107,3108,3111],{"class":107,"line":1608},[105,3109,3110],{"class":111},"        break",[105,3112,1282],{"class":115},[105,3114,3115],{"class":107,"line":1614},[105,3116,2178],{"class":115},[105,3118,3119,3121,3123,3125,3127],{"class":107,"line":1619},[105,3120,1542],{"class":115},[105,3122,1160],{"class":111},[105,3124,557],{"class":115},[105,3126,1160],{"class":111},[105,3128,1183],{"class":115},[105,3130,3131,3134,3136],{"class":107,"line":1633},[105,3132,3133],{"class":115},"    i",[105,3135,2283],{"class":111},[105,3137,1282],{"class":115},[105,3139,3140],{"class":107,"line":1638},[105,3141,1556],{"class":115},[14,3143,3144],{},"小练习",[96,3146,3148],{"className":98,"code":3147,"language":100,"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",[102,3149,3150,3156,3166,3174,3178,3183,3188,3216,3220,3225,3230,3271,3275,3288,3292,3296,3300,3312,3316,3320],{"__ignoreMap":22},[105,3151,3152,3154],{"class":107,"line":108},[105,3153,1940],{"class":111},[105,3155,1943],{"class":220},[105,3157,3158,3160,3162,3164],{"class":107,"line":28},[105,3159,1948],{"class":111},[105,3161,1951],{"class":111},[105,3163,1955],{"class":1954},[105,3165,1282],{"class":115},[105,3167,3168,3170,3172],{"class":107,"line":1171},[105,3169,119],{"class":111},[105,3171,1964],{"class":1954},[105,3173,1967],{"class":115},[105,3175,3176],{"class":107,"line":1186},[105,3177,1537],{"class":115},[105,3179,3180],{"class":107,"line":1192},[105,3181,3182],{"class":174},"    \u002F\u002F敲桌子案例\n",[105,3184,3185],{"class":107,"line":1206},[105,3186,3187],{"class":174},"    \u002F\u002F1.先输出1-100的数字\n",[105,3189,3190,3193,3195,3197,3199,3201,3203,3206,3208,3210,3212,3214],{"class":107,"line":1212},[105,3191,3192],{"class":111},"    for",[105,3194,116],{"class":115},[105,3196,119],{"class":111},[105,3198,3023],{"class":115},[105,3200,161],{"class":111},[105,3202,333],{"class":164},[105,3204,3205],{"class":115},"; i",[105,3207,1579],{"class":111},[105,3209,427],{"class":164},[105,3211,3205],{"class":115},[105,3213,2283],{"class":111},[105,3215,122],{"class":115},[105,3217,3218],{"class":107,"line":1303},[105,3219,2021],{"class":115},[105,3221,3222],{"class":107,"line":1309},[105,3223,3224],{"class":174},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[105,3226,3227],{"class":107,"line":1321},[105,3228,3229],{"class":174},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[105,3231,3232,3234,3236,3238,3240,3242,3244,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267,3269],{"class":107,"line":1603},[105,3233,2488],{"class":111},[105,3235,3095],{"class":115},[105,3237,444],{"class":111},[105,3239,485],{"class":164},[105,3241,2940],{"class":111},[105,3243,307],{"class":164},[105,3245,3246],{"class":111}," ||",[105,3248,3023],{"class":115},[105,3250,444],{"class":111},[105,3252,562],{"class":164},[105,3254,2940],{"class":111},[105,3256,485],{"class":164},[105,3258,3246],{"class":111},[105,3260,3023],{"class":115},[105,3262,700],{"class":111},[105,3264,562],{"class":164},[105,3266,2940],{"class":111},[105,3268,485],{"class":164},[105,3270,122],{"class":115},[105,3272,3273],{"class":107,"line":1608},[105,3274,2501],{"class":115},[105,3276,3277,3279,3281,3284,3286],{"class":107,"line":1614},[105,3278,2506],{"class":115},[105,3280,1160],{"class":111},[105,3282,3283],{"class":220},"\"敲桌子\"",[105,3285,1160],{"class":111},[105,3287,1183],{"class":115},[105,3289,3290],{"class":107,"line":1619},[105,3291,2520],{"class":115},[105,3293,3294],{"class":107,"line":1633},[105,3295,2561],{"class":111},[105,3297,3298],{"class":107,"line":1638},[105,3299,2501],{"class":115},[105,3301,3302,3304,3306,3308,3310],{"class":107,"line":1644},[105,3303,2506],{"class":115},[105,3305,1160],{"class":111},[105,3307,557],{"class":115},[105,3309,1160],{"class":111},[105,3311,1183],{"class":115},[105,3313,3314],{"class":107,"line":1665},[105,3315,2520],{"class":115},[105,3317,3318],{"class":107,"line":1670},[105,3319,2178],{"class":115},[105,3321,3322],{"class":107,"line":1684},[105,3323,1556],{"class":115},[14,3325,3326],{},"嵌套实现星图",[96,3328,3330],{"className":98,"code":3329,"language":100,"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",[102,3331,3332,3338,3348,3356,3360,3386,3390,3419,3423,3434,3438,3447,3451],{"__ignoreMap":22},[105,3333,3334,3336],{"class":107,"line":108},[105,3335,1940],{"class":111},[105,3337,1943],{"class":220},[105,3339,3340,3342,3344,3346],{"class":107,"line":28},[105,3341,1948],{"class":111},[105,3343,1951],{"class":111},[105,3345,1955],{"class":1954},[105,3347,1282],{"class":115},[105,3349,3350,3352,3354],{"class":107,"line":1171},[105,3351,119],{"class":111},[105,3353,1964],{"class":1954},[105,3355,1967],{"class":115},[105,3357,3358],{"class":107,"line":1186},[105,3359,1537],{"class":115},[105,3361,3362,3364,3366,3368,3370,3372,3374,3376,3378,3380,3382,3384],{"class":107,"line":1192},[105,3363,3192],{"class":111},[105,3365,1649],{"class":115},[105,3367,119],{"class":111},[105,3369,3023],{"class":115},[105,3371,161],{"class":111},[105,3373,307],{"class":164},[105,3375,3030],{"class":115},[105,3377,1026],{"class":111},[105,3379,562],{"class":164},[105,3381,3030],{"class":115},[105,3383,2283],{"class":111},[105,3385,122],{"class":115},[105,3387,3388],{"class":107,"line":1206},[105,3389,2021],{"class":115},[105,3391,3392,3395,3397,3399,3402,3404,3406,3409,3411,3413,3415,3417],{"class":107,"line":1212},[105,3393,3394],{"class":111},"        for",[105,3396,1649],{"class":115},[105,3398,119],{"class":111},[105,3400,3401],{"class":115}," j",[105,3403,161],{"class":111},[105,3405,307],{"class":164},[105,3407,3408],{"class":115},";j",[105,3410,1026],{"class":111},[105,3412,562],{"class":164},[105,3414,3408],{"class":115},[105,3416,2283],{"class":111},[105,3418,122],{"class":115},[105,3420,3421],{"class":107,"line":1303},[105,3422,2501],{"class":115},[105,3424,3425,3427,3429,3432],{"class":107,"line":1309},[105,3426,2506],{"class":115},[105,3428,1160],{"class":111},[105,3430,3431],{"class":220},"\"*\"",[105,3433,1282],{"class":115},[105,3435,3436],{"class":107,"line":1321},[105,3437,2520],{"class":115},[105,3439,3440,3443,3445],{"class":107,"line":1603},[105,3441,3442],{"class":115},"        cout",[105,3444,1160],{"class":111},[105,3446,1183],{"class":115},[105,3448,3449],{"class":107,"line":1608},[105,3450,2178],{"class":115},[105,3452,3453],{"class":107,"line":1614},[105,3454,1556],{"class":115},[14,3456,3457],{},"乘法口诀表",[96,3459,3461],{"className":98,"code":3460,"language":100,"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",[102,3462,3463,3469,3479,3487,3491,3517,3521,3546,3550,3590,3594,3602,3606],{"__ignoreMap":22},[105,3464,3465,3467],{"class":107,"line":108},[105,3466,1940],{"class":111},[105,3468,2325],{"class":220},[105,3470,3471,3473,3475,3477],{"class":107,"line":28},[105,3472,1948],{"class":111},[105,3474,1951],{"class":111},[105,3476,1955],{"class":1954},[105,3478,1282],{"class":115},[105,3480,3481,3483,3485],{"class":107,"line":1171},[105,3482,119],{"class":111},[105,3484,1964],{"class":1954},[105,3486,1967],{"class":115},[105,3488,3489],{"class":107,"line":1186},[105,3490,1537],{"class":115},[105,3492,3493,3495,3497,3499,3501,3503,3505,3507,3509,3511,3513,3515],{"class":107,"line":1192},[105,3494,3192],{"class":111},[105,3496,116],{"class":115},[105,3498,119],{"class":111},[105,3500,3023],{"class":115},[105,3502,161],{"class":111},[105,3504,333],{"class":164},[105,3506,3030],{"class":115},[105,3508,1026],{"class":111},[105,3510,562],{"class":164},[105,3512,3030],{"class":115},[105,3514,2283],{"class":111},[105,3516,122],{"class":115},[105,3518,3519],{"class":107,"line":1206},[105,3520,2021],{"class":115},[105,3522,3523,3525,3527,3529,3531,3533,3535,3537,3539,3542,3544],{"class":107,"line":1212},[105,3524,3394],{"class":111},[105,3526,116],{"class":115},[105,3528,119],{"class":111},[105,3530,3401],{"class":115},[105,3532,161],{"class":111},[105,3534,333],{"class":164},[105,3536,3408],{"class":115},[105,3538,1579],{"class":111},[105,3540,3541],{"class":115},"i;j",[105,3543,2283],{"class":111},[105,3545,122],{"class":115},[105,3547,3548],{"class":107,"line":1303},[105,3549,2501],{"class":115},[105,3551,3552,3554,3556,3558,3560,3562,3564,3566,3568,3571,3573,3575,3577,3579,3581,3584,3586,3588],{"class":107,"line":1309},[105,3553,2506],{"class":115},[105,3555,1160],{"class":111},[105,3557,583],{"class":115},[105,3559,1160],{"class":111},[105,3561,3431],{"class":220},[105,3563,1160],{"class":111},[105,3565,557],{"class":115},[105,3567,1160],{"class":111},[105,3569,3570],{"class":220},"\"=\"",[105,3572,1160],{"class":111},[105,3574,557],{"class":115},[105,3576,571],{"class":111},[105,3578,583],{"class":115},[105,3580,1160],{"class":111},[105,3582,3583],{"class":220},"'",[105,3585,1222],{"class":164},[105,3587,3583],{"class":220},[105,3589,1282],{"class":115},[105,3591,3592],{"class":107,"line":1321},[105,3593,2520],{"class":115},[105,3595,3596,3598,3600],{"class":107,"line":1603},[105,3597,3442],{"class":115},[105,3599,1160],{"class":111},[105,3601,1183],{"class":115},[105,3603,3604],{"class":107,"line":1608},[105,3605,2178],{"class":115},[105,3607,3608],{"class":107,"line":1614},[105,3609,1556],{"class":115},[76,3611,3613],{"id":3612},"_163跳出语句","1.6.3跳出语句",[59,3615,3616],{},[62,3617,3618],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3620,3621],{},"break使用时机：",[1123,3623,3624,3627,3630],{},[62,3625,3626],{},"出现在switch条件语句中，作用是终止case并跳出switch",[62,3628,3629],{},"出现在循环结构中，作用是跳出当前的循环结构",[62,3631,3632],{},"出现在嵌套循环中，跳出最近的内层循环语句",[59,3634,3635,3638],{"start":28},[62,3636,3637],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[62,3639,3640],{},"goto语句\n语法：goto 标记;",[14,3642,3643],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[96,3645,3647],{"className":98,"code":3646,"language":100,"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",[102,3648,3649,3657,3661,3674,3684,3697,3710,3723,3731,3747],{"__ignoreMap":22},[105,3650,3651,3653,3655],{"class":107,"line":108},[105,3652,119],{"class":111},[105,3654,1964],{"class":1954},[105,3656,1967],{"class":115},[105,3658,3659],{"class":107,"line":28},[105,3660,1537],{"class":115},[105,3662,3663,3665,3667,3670,3672],{"class":107,"line":1171},[105,3664,1542],{"class":115},[105,3666,1160],{"class":111},[105,3668,3669],{"class":220},"\"1\"",[105,3671,1160],{"class":111},[105,3673,1183],{"class":115},[105,3675,3676,3679,3682],{"class":107,"line":1186},[105,3677,3678],{"class":111},"    goto",[105,3680,3681],{"class":1954}," FLAG",[105,3683,1282],{"class":115},[105,3685,3686,3688,3690,3693,3695],{"class":107,"line":1192},[105,3687,1542],{"class":115},[105,3689,1160],{"class":111},[105,3691,3692],{"class":220},"\"2\"",[105,3694,1160],{"class":111},[105,3696,1183],{"class":115},[105,3698,3699,3701,3703,3706,3708],{"class":107,"line":1206},[105,3700,1542],{"class":115},[105,3702,1160],{"class":111},[105,3704,3705],{"class":220},"\"3\"",[105,3707,1160],{"class":111},[105,3709,1183],{"class":115},[105,3711,3712,3714,3716,3719,3721],{"class":107,"line":1212},[105,3713,1542],{"class":115},[105,3715,1160],{"class":111},[105,3717,3718],{"class":220},"\"4\"",[105,3720,1160],{"class":111},[105,3722,1183],{"class":115},[105,3724,3725,3728],{"class":107,"line":1303},[105,3726,3727],{"class":1954},"    FLAG",[105,3729,3730],{"class":115},":\n",[105,3732,3733,3735,3737,3740,3742,3744],{"class":107,"line":1309},[105,3734,1542],{"class":115},[105,3736,1160],{"class":111},[105,3738,3739],{"class":220},"\"5\"",[105,3741,1160],{"class":111},[105,3743,1230],{"class":115},[105,3745,3746],{"class":174},"\u002F\u002F跳过了2,3,4,直接到5\n",[105,3748,3749],{"class":107,"line":1321},[105,3750,1556],{"class":115},[47,3752,3754],{"id":3753},"_17数组","1.7数组",[76,3756,3758],{"id":3757},"_171一维数组","1.7.1一维数组",[59,3760,3761],{},[62,3762,3763],{},"一维数组定义方式",[253,3765,3766,3776],{},[256,3767,3768],{},[259,3769,3770,3773],{},[262,3771,3772],{},"方式",[262,3774,3775],{},"注意事项",[300,3777,3778,3792,3802],{},[259,3779,3780,3786],{},[305,3781,3782,3783,171],{},"数据类型 数组名",[105,3784,3785],{},"数组长度",[305,3787,3788,3789,3791],{},"这种方式是先定义再arr",[105,3790,557],{},"赋值",[259,3793,3794,3799],{},[305,3795,3782,3796,3798],{},[105,3797,3785],{},"={值1,值2....};",[305,3800,3801],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[259,3803,3804,3808],{},[305,3805,3782,3806,3798],{},[105,3807],{},[305,3809,3810,3811,3813],{},"int arr",[105,3812],{},";这是不正确的，按照这样的方式定义必须有初始长度",[59,3815,3816],{"start":28},[62,3817,3818],{},"一维数组数组名\n用途：",[1123,3820,3821],{},[62,3822,3823],{},"1.可以统计整个数组在内存中的长度：",[96,3825,3827],{"className":98,"code":3826,"language":100,"meta":22,"style":22},"sizeof(arr);\nsizeof(arr[0]);\n",[102,3828,3829,3836],{"__ignoreMap":22},[105,3830,3831,3833],{"class":107,"line":108},[105,3832,112],{"class":111},[105,3834,3835],{"class":115},"(arr);\n",[105,3837,3838,3840,3843,3845],{"class":107,"line":28},[105,3839,112],{"class":111},[105,3841,3842],{"class":115},"(arr[",[105,3844,307],{"class":164},[105,3846,3847],{"class":115},"]);\n",[1123,3849,3850],{},[62,3851,3852],{},"2.可以获取数组在内存中的首地址:",[96,3854,3856],{"className":98,"code":3855,"language":100,"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",[102,3857,3858,3863,3876,3881],{"__ignoreMap":22},[105,3859,3860],{"class":107,"line":108},[105,3861,3862],{"class":174},"\u002F\u002F查看16进制的首地址\n",[105,3864,3865,3867,3869,3872,3874],{"class":107,"line":28},[105,3866,1361],{"class":115},[105,3868,1160],{"class":111},[105,3870,3871],{"class":115},"arr",[105,3873,1160],{"class":111},[105,3875,1183],{"class":115},[105,3877,3878],{"class":107,"line":1171},[105,3879,3880],{"class":174},"\u002F\u002F看10进制数\n",[105,3882,3883,3885,3887,3889,3891,3893,3895,3898,3900,3902,3904],{"class":107,"line":1186},[105,3884,1361],{"class":115},[105,3886,1160],{"class":111},[105,3888,116],{"class":115},[105,3890,119],{"class":111},[105,3892,545],{"class":115},[105,3894,469],{"class":111},[105,3896,3897],{"class":115},"arr[",[105,3899,307],{"class":164},[105,3901,1056],{"class":115},[105,3903,1160],{"class":111},[105,3905,1183],{"class":115},[14,3907,3908],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1123,3910,3911],{},[62,3912,3913],{},"1️⃣五只小猪称体重",[96,3915,3917],{"className":98,"code":3916,"language":100,"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",[102,3918,3919,3925,3935,3943,3947,3987,4000,4026,4030,4042,4046,4056,4060,4064,4077,4087],{"__ignoreMap":22},[105,3920,3921,3923],{"class":107,"line":108},[105,3922,1940],{"class":111},[105,3924,1943],{"class":220},[105,3926,3927,3929,3931,3933],{"class":107,"line":28},[105,3928,1948],{"class":111},[105,3930,1951],{"class":111},[105,3932,1955],{"class":1954},[105,3934,1282],{"class":115},[105,3936,3937,3939,3941],{"class":107,"line":1171},[105,3938,119],{"class":111},[105,3940,1964],{"class":1954},[105,3942,1967],{"class":115},[105,3944,3945],{"class":107,"line":1186},[105,3946,1537],{"class":115},[105,3948,3949,3951,3954,3956,3958,3960,3962,3965,3967,3970,3972,3974,3976,3979,3981,3984],{"class":107,"line":1192},[105,3950,1976],{"class":111},[105,3952,3953],{"class":115}," arr[",[105,3955,435],{"class":164},[105,3957,1056],{"class":115},[105,3959,161],{"class":111},[105,3961,1012],{"class":115},[105,3963,3964],{"class":164},"300",[105,3966,494],{"class":115},[105,3968,3969],{"class":164},"350",[105,3971,494],{"class":115},[105,3973,1713],{"class":164},[105,3975,494],{"class":115},[105,3977,3978],{"class":164},"400",[105,3980,494],{"class":115},[105,3982,3983],{"class":164},"250",[105,3985,3986],{"class":115},"};\n",[105,3988,3989,3991,3994,3996,3998],{"class":107,"line":1206},[105,3990,1976],{"class":111},[105,3992,3993],{"class":115}," tmp",[105,3995,161],{"class":111},[105,3997,307],{"class":164},[105,3999,1282],{"class":115},[105,4001,4002,4004,4006,4008,4010,4012,4014,4016,4018,4020,4022,4024],{"class":107,"line":1212},[105,4003,3192],{"class":111},[105,4005,1649],{"class":115},[105,4007,119],{"class":111},[105,4009,3023],{"class":115},[105,4011,161],{"class":111},[105,4013,307],{"class":164},[105,4015,3030],{"class":115},[105,4017,1026],{"class":111},[105,4019,435],{"class":164},[105,4021,3030],{"class":115},[105,4023,2283],{"class":111},[105,4025,122],{"class":115},[105,4027,4028],{"class":107,"line":1303},[105,4029,2021],{"class":115},[105,4031,4032,4034,4037,4039],{"class":107,"line":1309},[105,4033,2488],{"class":111},[105,4035,4036],{"class":115},"(tmp",[105,4038,1026],{"class":111},[105,4040,4041],{"class":115},"arr[i])\n",[105,4043,4044],{"class":107,"line":1321},[105,4045,2501],{"class":115},[105,4047,4048,4051,4053],{"class":107,"line":1603},[105,4049,4050],{"class":115},"            tmp",[105,4052,161],{"class":111},[105,4054,4055],{"class":115},"arr[i];\n",[105,4057,4058],{"class":107,"line":1608},[105,4059,2520],{"class":115},[105,4061,4062],{"class":107,"line":1614},[105,4063,2178],{"class":115},[105,4065,4066,4068,4070,4073,4075],{"class":107,"line":1619},[105,4067,1542],{"class":115},[105,4069,1160],{"class":111},[105,4071,4072],{"class":115},"tmp",[105,4074,1160],{"class":111},[105,4076,1183],{"class":115},[105,4078,4079,4082,4085],{"class":107,"line":1633},[105,4080,4081],{"class":111},"    return",[105,4083,4084],{"class":164}," 0",[105,4086,1282],{"class":115},[105,4088,4089],{"class":107,"line":1638},[105,4090,1556],{"class":115},[1123,4092,4093],{},[62,4094,4095],{},"2️⃣数组元素逆置",[96,4097,4099],{"className":98,"code":4098,"language":100,"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",[102,4100,4101,4106,4112,4122,4130,4134,4169,4185,4217,4230,4235,4240,4252,4262,4272,4277,4286,4296,4301,4306,4333,4337,4353,4357,4368,4377],{"__ignoreMap":22},[105,4102,4103],{"class":107,"line":108},[105,4104,4105],{"class":174},"\u002F\u002F元素逆置\n",[105,4107,4108,4110],{"class":107,"line":28},[105,4109,1940],{"class":111},[105,4111,1943],{"class":220},[105,4113,4114,4116,4118,4120],{"class":107,"line":1171},[105,4115,1948],{"class":111},[105,4117,1951],{"class":111},[105,4119,1955],{"class":1954},[105,4121,1282],{"class":115},[105,4123,4124,4126,4128],{"class":107,"line":1186},[105,4125,119],{"class":111},[105,4127,1964],{"class":1954},[105,4129,1967],{"class":115},[105,4131,4132],{"class":107,"line":1192},[105,4133,1537],{"class":115},[105,4135,4136,4139,4141,4143,4145,4147,4149,4151,4153,4155,4157,4159,4161,4163,4165,4167],{"class":107,"line":1206},[105,4137,4138],{"class":111},"   int",[105,4140,3953],{"class":115},[105,4142,435],{"class":164},[105,4144,1056],{"class":115},[105,4146,161],{"class":111},[105,4148,1012],{"class":115},[105,4150,333],{"class":164},[105,4152,494],{"class":115},[105,4154,193],{"class":164},[105,4156,494],{"class":115},[105,4158,187],{"class":164},[105,4160,494],{"class":115},[105,4162,409],{"class":164},[105,4164,494],{"class":115},[105,4166,435],{"class":164},[105,4168,3986],{"class":115},[105,4170,4171,4173,4176,4178,4180,4182],{"class":107,"line":1212},[105,4172,4138],{"class":111},[105,4174,4175],{"class":115}," start",[105,4177,161],{"class":111},[105,4179,307],{"class":164},[105,4181,171],{"class":115},[105,4183,4184],{"class":174},"\u002F\u002F起始下标\n",[105,4186,4187,4189,4192,4195,4198,4201,4203,4205,4208,4210,4212,4214],{"class":107,"line":1303},[105,4188,4138],{"class":111},[105,4190,4191],{"class":115}," end",[105,4193,4194],{"class":111},"=sizeof",[105,4196,4197],{"class":115},"(arr)",[105,4199,4200],{"class":111},"\u002Fsizeof",[105,4202,3842],{"class":115},[105,4204,307],{"class":164},[105,4206,4207],{"class":115},"])",[105,4209,648],{"class":111},[105,4211,333],{"class":164},[105,4213,171],{"class":115},[105,4215,4216],{"class":174},"\u002F\u002F结束下标\n",[105,4218,4219,4222,4225,4227],{"class":107,"line":1309},[105,4220,4221],{"class":111},"   while",[105,4223,4224],{"class":115}," (start",[105,4226,1026],{"class":111},[105,4228,4229],{"class":115},"end)\n",[105,4231,4232],{"class":107,"line":1321},[105,4233,4234],{"class":115},"   {\n",[105,4236,4237],{"class":107,"line":1603},[105,4238,4239],{"class":174},"    \u002F\u002F实现元素互换代码\n",[105,4241,4242,4244,4247,4249],{"class":107,"line":1608},[105,4243,1976],{"class":111},[105,4245,4246],{"class":115}," temp",[105,4248,161],{"class":111},[105,4250,4251],{"class":115},"arr[start];\n",[105,4253,4254,4257,4259],{"class":107,"line":1614},[105,4255,4256],{"class":115},"    arr[start]",[105,4258,161],{"class":111},[105,4260,4261],{"class":115},"arr[end];\n",[105,4263,4264,4267,4269],{"class":107,"line":1619},[105,4265,4266],{"class":115},"    arr[end]",[105,4268,161],{"class":111},[105,4270,4271],{"class":115},"temp;\n",[105,4273,4274],{"class":107,"line":1633},[105,4275,4276],{"class":174},"    \u002F\u002F下标更新\n",[105,4278,4279,4282,4284],{"class":107,"line":1638},[105,4280,4281],{"class":115},"    start",[105,4283,2283],{"class":111},[105,4285,1282],{"class":115},[105,4287,4288,4291,4294],{"class":107,"line":1644},[105,4289,4290],{"class":115},"    end",[105,4292,4293],{"class":111},"--",[105,4295,1282],{"class":115},[105,4297,4298],{"class":107,"line":1665},[105,4299,4300],{"class":115},"   }\n",[105,4302,4303],{"class":107,"line":1670},[105,4304,4305],{"class":174},"   \u002F\u002F输出逆置后的数组\n",[105,4307,4308,4311,4313,4315,4317,4319,4321,4323,4325,4327,4329,4331],{"class":107,"line":1684},[105,4309,4310],{"class":111},"   for",[105,4312,1649],{"class":115},[105,4314,119],{"class":111},[105,4316,3023],{"class":115},[105,4318,161],{"class":111},[105,4320,307],{"class":164},[105,4322,3030],{"class":115},[105,4324,1026],{"class":111},[105,4326,435],{"class":164},[105,4328,3030],{"class":115},[105,4330,2283],{"class":111},[105,4332,122],{"class":115},[105,4334,4335],{"class":107,"line":1689},[105,4336,4234],{"class":115},[105,4338,4339,4341,4343,4346,4348,4351],{"class":107,"line":1718},[105,4340,1542],{"class":115},[105,4342,1160],{"class":111},[105,4344,4345],{"class":115},"arr[i]",[105,4347,1160],{"class":111},[105,4349,4350],{"class":220},"\" \"",[105,4352,1282],{"class":115},[105,4354,4355],{"class":107,"line":1723},[105,4356,4300],{"class":115},[105,4358,4359,4362,4364,4366],{"class":107,"line":1740},[105,4360,4361],{"class":1954},"   system",[105,4363,116],{"class":115},[105,4365,2299],{"class":220},[105,4367,2710],{"class":115},[105,4369,4370,4373,4375],{"class":107,"line":1745},[105,4371,4372],{"class":111},"   return",[105,4374,4084],{"class":164},[105,4376,1282],{"class":115},[105,4378,4379],{"class":107,"line":1750},[105,4380,1556],{"class":115},[1123,4382,4383],{},[62,4384,4385],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[96,4387,4389],{"className":98,"code":4388,"language":100,"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",[102,4390,4391,4396,4402,4412,4420,4424,4476,4489,4515,4519,4533,4537,4542,4547,4577,4581,4586,4620,4624,4629,4649,4654,4666,4682,4697,4702,4706,4710,4723,4749,4753,4767,4771,4779],{"__ignoreMap":22},[105,4392,4393],{"class":107,"line":108},[105,4394,4395],{"class":174},"\u002F\u002F冒泡排序,升序\n",[105,4397,4398,4400],{"class":107,"line":28},[105,4399,1940],{"class":111},[105,4401,1943],{"class":220},[105,4403,4404,4406,4408,4410],{"class":107,"line":1171},[105,4405,1948],{"class":111},[105,4407,1951],{"class":111},[105,4409,1955],{"class":1954},[105,4411,1282],{"class":115},[105,4413,4414,4416,4418],{"class":107,"line":1186},[105,4415,119],{"class":111},[105,4417,1964],{"class":1954},[105,4419,1967],{"class":115},[105,4421,4422],{"class":107,"line":1192},[105,4423,1537],{"class":115},[105,4425,4426,4428,4430,4432,4435,4437,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462,4464,4466,4468,4470,4472,4474],{"class":107,"line":1206},[105,4427,1976],{"class":111},[105,4429,3953],{"class":115},[105,4431,536],{"class":164},[105,4433,4434],{"class":115},"] ",[105,4436,161],{"class":111},[105,4438,4439],{"class":115}," {",[105,4441,409],{"class":164},[105,4443,494],{"class":115},[105,4445,193],{"class":164},[105,4447,494],{"class":115},[105,4449,511],{"class":164},[105,4451,494],{"class":115},[105,4453,307],{"class":164},[105,4455,494],{"class":115},[105,4457,435],{"class":164},[105,4459,494],{"class":115},[105,4461,485],{"class":164},[105,4463,494],{"class":115},[105,4465,333],{"class":164},[105,4467,494],{"class":115},[105,4469,187],{"class":164},[105,4471,494],{"class":115},[105,4473,536],{"class":164},[105,4475,3986],{"class":115},[105,4477,4478,4480,4482,4485,4487],{"class":107,"line":1212},[105,4479,1542],{"class":115},[105,4481,1160],{"class":111},[105,4483,4484],{"class":220},"\"排序前：\"",[105,4486,1160],{"class":111},[105,4488,1183],{"class":115},[105,4490,4491,4493,4495,4497,4499,4501,4503,4505,4507,4509,4511,4513],{"class":107,"line":1303},[105,4492,3192],{"class":111},[105,4494,1649],{"class":115},[105,4496,119],{"class":111},[105,4498,3023],{"class":115},[105,4500,161],{"class":111},[105,4502,307],{"class":164},[105,4504,3030],{"class":115},[105,4506,1026],{"class":111},[105,4508,536],{"class":164},[105,4510,3030],{"class":115},[105,4512,2283],{"class":111},[105,4514,122],{"class":115},[105,4516,4517],{"class":107,"line":1309},[105,4518,2021],{"class":115},[105,4520,4521,4523,4525,4527,4529,4531],{"class":107,"line":1321},[105,4522,3442],{"class":115},[105,4524,1160],{"class":111},[105,4526,4345],{"class":115},[105,4528,1160],{"class":111},[105,4530,4350],{"class":220},[105,4532,1282],{"class":115},[105,4534,4535],{"class":107,"line":1603},[105,4536,2178],{"class":115},[105,4538,4539],{"class":107,"line":1608},[105,4540,4541],{"class":174},"    \u002F\u002F开始冒泡排序\n",[105,4543,4544],{"class":107,"line":1614},[105,4545,4546],{"class":174},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[105,4548,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573,4575],{"class":107,"line":1619},[105,4550,3192],{"class":111},[105,4552,1649],{"class":115},[105,4554,119],{"class":111},[105,4556,3023],{"class":115},[105,4558,161],{"class":111},[105,4560,307],{"class":164},[105,4562,3030],{"class":115},[105,4564,1026],{"class":111},[105,4566,536],{"class":164},[105,4568,648],{"class":111},[105,4570,333],{"class":164},[105,4572,3030],{"class":115},[105,4574,2283],{"class":111},[105,4576,122],{"class":115},[105,4578,4579],{"class":107,"line":1633},[105,4580,2021],{"class":115},[105,4582,4583],{"class":107,"line":1638},[105,4584,4585],{"class":174},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[105,4587,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614,4616,4618],{"class":107,"line":1644},[105,4589,3394],{"class":111},[105,4591,1649],{"class":115},[105,4593,119],{"class":111},[105,4595,3401],{"class":115},[105,4597,161],{"class":111},[105,4599,307],{"class":164},[105,4601,3408],{"class":115},[105,4603,1026],{"class":111},[105,4605,536],{"class":164},[105,4607,648],{"class":111},[105,4609,557],{"class":115},[105,4611,648],{"class":111},[105,4613,333],{"class":164},[105,4615,3408],{"class":115},[105,4617,2283],{"class":111},[105,4619,122],{"class":115},[105,4621,4622],{"class":107,"line":1665},[105,4623,2501],{"class":115},[105,4625,4626],{"class":107,"line":1670},[105,4627,4628],{"class":174},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[105,4630,4631,4634,4637,4639,4642,4644,4646],{"class":107,"line":1684},[105,4632,4633],{"class":111},"            if",[105,4635,4636],{"class":115},"(arr[j]",[105,4638,1076],{"class":111},[105,4640,4641],{"class":115},"arr[j",[105,4643,597],{"class":111},[105,4645,333],{"class":164},[105,4647,4648],{"class":115},"])\n",[105,4650,4651],{"class":107,"line":1689},[105,4652,4653],{"class":115},"            {\n",[105,4655,4656,4659,4661,4663],{"class":107,"line":1718},[105,4657,4658],{"class":111},"                int",[105,4660,4246],{"class":115},[105,4662,161],{"class":111},[105,4664,4665],{"class":115},"arr[j];\n",[105,4667,4668,4671,4673,4675,4677,4679],{"class":107,"line":1723},[105,4669,4670],{"class":115},"                arr[j]",[105,4672,161],{"class":111},[105,4674,4641],{"class":115},[105,4676,597],{"class":111},[105,4678,333],{"class":164},[105,4680,4681],{"class":115},"];\n",[105,4683,4684,4687,4689,4691,4693,4695],{"class":107,"line":1740},[105,4685,4686],{"class":115},"                arr[j",[105,4688,597],{"class":111},[105,4690,333],{"class":164},[105,4692,1056],{"class":115},[105,4694,161],{"class":111},[105,4696,4271],{"class":115},[105,4698,4699],{"class":107,"line":1745},[105,4700,4701],{"class":115},"            }\n",[105,4703,4704],{"class":107,"line":1750},[105,4705,2520],{"class":115},[105,4707,4708],{"class":107,"line":1755},[105,4709,2178],{"class":115},[105,4711,4712,4714,4716,4719,4721],{"class":107,"line":1769},[105,4713,1542],{"class":115},[105,4715,1160],{"class":111},[105,4717,4718],{"class":220},"\"排序后：\"",[105,4720,1160],{"class":111},[105,4722,1183],{"class":115},[105,4724,4725,4727,4729,4731,4733,4735,4737,4739,4741,4743,4745,4747],{"class":107,"line":1774},[105,4726,3192],{"class":111},[105,4728,1649],{"class":115},[105,4730,119],{"class":111},[105,4732,3023],{"class":115},[105,4734,161],{"class":111},[105,4736,307],{"class":164},[105,4738,3030],{"class":115},[105,4740,1026],{"class":111},[105,4742,536],{"class":164},[105,4744,3030],{"class":115},[105,4746,2283],{"class":111},[105,4748,122],{"class":115},[105,4750,4751],{"class":107,"line":2568},[105,4752,2021],{"class":115},[105,4754,4755,4757,4759,4761,4763,4765],{"class":107,"line":2582},[105,4756,3442],{"class":115},[105,4758,1160],{"class":111},[105,4760,4345],{"class":115},[105,4762,1160],{"class":111},[105,4764,4350],{"class":220},[105,4766,1282],{"class":115},[105,4768,4769],{"class":107,"line":2590},[105,4770,2178],{"class":115},[105,4772,4773,4775,4777],{"class":107,"line":2595},[105,4774,4081],{"class":111},[105,4776,4084],{"class":164},[105,4778,1282],{"class":115},[105,4780,4781],{"class":107,"line":2601},[105,4782,1556],{"class":115},[76,4784,4786],{"id":4785},"_172二维数组","1.7.2二维数组",[59,4788,4789],{},[62,4790,4791],{},"二维数组的四种定义方式",[253,4793,4794,4803],{},[256,4795,4796],{},[259,4797,4798,4801],{},[262,4799,4800],{},"序号",[262,4802,3772],{},[300,4804,4805,4815,4824,4833,4842],{},[259,4806,4807,4809],{},[305,4808,333],{},[305,4810,4811,4812,171],{},"数据类型 数组名[行数]",[105,4813,4814],{},"列数",[259,4816,4817,4819],{},[305,4818,193],{},[305,4820,4811,4821,4823],{},[105,4822,4814],{},"={ {数据1,数据2}，{数据3，数据4}... }",[259,4825,4826,4828],{},[305,4827,187],{},[305,4829,4811,4830,4832],{},[105,4831,4814],{},"={数据1,数据2,数据3...}",[259,4834,4835,4837],{},[305,4836,409],{},[305,4838,4839,4840,4832],{},"数据类型 数组名[]",[105,4841,4814],{},[259,4843,4844,4847],{},[305,4845,4846],{},"注意：不能只省略列数",[305,4848],{},[59,4850,4851],{"start":28},[62,4852,4853],{},"二维数组数组名",[1123,4855,4856,4859],{},[62,4857,4858],{},"1.查看二维数组所占内存空间",[62,4860,4861],{},"2.获取二维数组首地址",[14,4863,4864],{},"已知二维数组，求二维数组的行数与列数",[96,4866,4868],{"className":98,"code":4867,"language":100,"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",[102,4869,4870,4878,4882,4900,4904,4922,4938,4943,4968,5001],{"__ignoreMap":22},[105,4871,4872,4874,4876],{"class":107,"line":108},[105,4873,119],{"class":111},[105,4875,1964],{"class":1954},[105,4877,1967],{"class":115},[105,4879,4880],{"class":107,"line":28},[105,4881,1537],{"class":115},[105,4883,4884,4886,4888,4890,4893,4895,4897],{"class":107,"line":1171},[105,4885,1976],{"class":111},[105,4887,3953],{"class":115},[105,4889,193],{"class":164},[105,4891,4892],{"class":115},"][",[105,4894,187],{"class":164},[105,4896,1056],{"class":115},[105,4898,4899],{"class":111},"=\n",[105,4901,4902],{"class":107,"line":1186},[105,4903,2021],{"class":115},[105,4905,4906,4909,4911,4913,4915,4917,4919],{"class":107,"line":1192},[105,4907,4908],{"class":115},"        {",[105,4910,333],{"class":164},[105,4912,494],{"class":115},[105,4914,193],{"class":164},[105,4916,494],{"class":115},[105,4918,187],{"class":164},[105,4920,4921],{"class":115},"},\n",[105,4923,4924,4926,4928,4930,4932,4934,4936],{"class":107,"line":1206},[105,4925,4908],{"class":115},[105,4927,409],{"class":164},[105,4929,494],{"class":115},[105,4931,435],{"class":164},[105,4933,494],{"class":115},[105,4935,460],{"class":164},[105,4937,1556],{"class":115},[105,4939,4940],{"class":107,"line":1212},[105,4941,4942],{"class":115},"    };\n",[105,4944,4945,4947,4949,4952,4954,4956,4958,4960,4962,4964,4966],{"class":107,"line":1303},[105,4946,1542],{"class":115},[105,4948,1160],{"class":111},[105,4950,4951],{"class":220},"\"二维数组的行数\"",[105,4953,1364],{"class":111},[105,4955,4197],{"class":115},[105,4957,4200],{"class":111},[105,4959,3842],{"class":115},[105,4961,307],{"class":164},[105,4963,4207],{"class":115},[105,4965,1160],{"class":111},[105,4967,1183],{"class":115},[105,4969,4970,4972,4974,4977,4979,4981,4983,4985,4987,4989,4991,4993,4995,4997,4999],{"class":107,"line":1309},[105,4971,1542],{"class":115},[105,4973,1160],{"class":111},[105,4975,4976],{"class":220},"\"二维数组的列数\"",[105,4978,1364],{"class":111},[105,4980,3842],{"class":115},[105,4982,307],{"class":164},[105,4984,4207],{"class":115},[105,4986,4200],{"class":111},[105,4988,3842],{"class":115},[105,4990,307],{"class":164},[105,4992,4892],{"class":115},[105,4994,307],{"class":164},[105,4996,4207],{"class":115},[105,4998,1160],{"class":111},[105,5000,1183],{"class":115},[105,5002,5003],{"class":107,"line":1321},[105,5004,1556],{"class":115},[14,5006,5007],{},"查看二维数组首地址",[96,5009,5011],{"className":98,"code":5010,"language":100,"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",[102,5012,5013,5030,5056,5081],{"__ignoreMap":22},[105,5014,5015,5017,5019,5022,5024,5026,5028],{"class":107,"line":108},[105,5016,1361],{"class":115},[105,5018,1160],{"class":111},[105,5020,5021],{"class":220},"\"二维数组首地址：\"",[105,5023,1160],{"class":111},[105,5025,3871],{"class":115},[105,5027,1160],{"class":111},[105,5029,1183],{"class":115},[105,5031,5032,5034,5036,5039,5041,5043,5045,5048,5050,5052,5054],{"class":107,"line":28},[105,5033,1361],{"class":115},[105,5035,1160],{"class":111},[105,5037,5038],{"class":220},"\"二维数组第一行的首地址：\"",[105,5040,1160],{"class":111},[105,5042,116],{"class":115},[105,5044,119],{"class":111},[105,5046,5047],{"class":115},")arr[",[105,5049,307],{"class":164},[105,5051,1056],{"class":115},[105,5053,1160],{"class":111},[105,5055,1183],{"class":115},[105,5057,5058,5060,5062,5065,5067,5069,5071,5073,5075,5077,5079],{"class":107,"line":1171},[105,5059,1361],{"class":115},[105,5061,1160],{"class":111},[105,5063,5064],{"class":220},"\"二维数组第二行的首地址：\"",[105,5066,1160],{"class":111},[105,5068,116],{"class":115},[105,5070,119],{"class":111},[105,5072,5047],{"class":115},[105,5074,333],{"class":164},[105,5076,1056],{"class":115},[105,5078,1160],{"class":111},[105,5080,1183],{"class":115},[105,5082,5083,5085,5087,5090,5092,5094,5096,5098,5100,5102,5104,5106,5108,5110,5112,5114],{"class":107,"line":1186},[105,5084,1361],{"class":115},[105,5086,1160],{"class":111},[105,5088,5089],{"class":220},"\"二维数组第一个元素的首地址:\"",[105,5091,1160],{"class":111},[105,5093,116],{"class":115},[105,5095,119],{"class":111},[105,5097,545],{"class":115},[105,5099,469],{"class":111},[105,5101,3897],{"class":115},[105,5103,307],{"class":164},[105,5105,4892],{"class":115},[105,5107,307],{"class":164},[105,5109,1056],{"class":115},[105,5111,1160],{"class":111},[105,5113,1230],{"class":115},[105,5115,5116],{"class":174},"\u002F\u002F对于数，要加取址符\n",[5118,5119,5120],"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":28,"depth":28,"links":5122},[5123,5124,5125,5133,5134,5140,5145],{"id":49,"depth":28,"text":50},{"id":56,"depth":28,"text":57},{"id":73,"depth":28,"text":74,"children":5126},[5127,5128,5129,5130,5131,5132],{"id":78,"depth":1171,"text":79},{"id":132,"depth":1171,"text":133},{"id":201,"depth":1171,"text":202},{"id":1141,"depth":1171,"text":1142},{"id":1236,"depth":1171,"text":1237},{"id":1335,"depth":1171,"text":1336},{"id":1377,"depth":28,"text":1378},{"id":1445,"depth":28,"text":1446,"children":5135},[5136,5137,5138,5139],{"id":1449,"depth":1171,"text":1450},{"id":1470,"depth":1171,"text":1471},{"id":1479,"depth":1171,"text":1480},{"id":1488,"depth":1171,"text":1489},{"id":1497,"depth":28,"text":1498,"children":5141},[5142,5143,5144],{"id":1501,"depth":1171,"text":1502},{"id":2196,"depth":1171,"text":2197},{"id":3612,"depth":1171,"text":3613},{"id":3753,"depth":28,"text":3754,"children":5146},[5147,5148],{"id":3757,"depth":1171,"text":3758},{"id":4785,"depth":1171,"text":4786},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":40,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5155,"title":5156,"body":5157,"description":22,"extension":30,"meta":6257,"navigation":32,"path":6258,"seo":6259,"stem":6260,"__hash__":6261},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5158,"toc":6249},[5159,5162,5166,5174,5182,5185,5251,5255,5258,5334,5338,5341,5344,5347,5560,5564,5569,5633,5638,5705,5710,5801,5804,5909,5913,5916,5922,6066,6070,6073,6087,6090,6135,6138,6246],[10,5160,5156],{"id":5161},"_2函数",[47,5163,5165],{"id":5164},"_21函数概述","2.1函数概述",[59,5167,5168,5171],{},[62,5169,5170],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[62,5172,5173],{},"语法：",[96,5175,5180],{"className":5176,"code":5178,"language":5179,"meta":22},[5177],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[102,5181,5178],{"__ignoreMap":22},[14,5183,5184],{},"小案例",[96,5186,5188],{"className":98,"code":5187,"language":100,"meta":22,"style":22},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[102,5189,5190,5195,5219,5223,5240,5247],{"__ignoreMap":22},[105,5191,5192],{"class":107,"line":108},[105,5193,5194],{"class":174},"\u002F\u002Fnum1,num2形参\n",[105,5196,5197,5199,5202,5204,5206,5210,5212,5214,5217],{"class":107,"line":28},[105,5198,119],{"class":111},[105,5200,5201],{"class":1954}," add",[105,5203,116],{"class":115},[105,5205,119],{"class":111},[105,5207,5209],{"class":5208},"s4XuR"," num1",[105,5211,494],{"class":115},[105,5213,119],{"class":111},[105,5215,5216],{"class":5208}," num2",[105,5218,122],{"class":115},[105,5220,5221],{"class":107,"line":1171},[105,5222,1537],{"class":115},[105,5224,5225,5227,5230,5232,5235,5237],{"class":107,"line":1186},[105,5226,1976],{"class":111},[105,5228,5229],{"class":115}," sum",[105,5231,161],{"class":111},[105,5233,5234],{"class":115},"num1",[105,5236,597],{"class":111},[105,5238,5239],{"class":115},"num2;\n",[105,5241,5242,5244],{"class":107,"line":1192},[105,5243,4081],{"class":111},[105,5245,5246],{"class":115}," sum;\n",[105,5248,5249],{"class":107,"line":1206},[105,5250,1556],{"class":115},[47,5252,5254],{"id":5253},"_22函数调用","2.2函数调用",[14,5256,5257],{},"调用刚刚写的求和函数",[96,5259,5261],{"className":98,"code":5260,"language":100,"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",[102,5262,5263,5271,5275,5280,5292,5304,5313,5318,5330],{"__ignoreMap":22},[105,5264,5265,5267,5269],{"class":107,"line":108},[105,5266,119],{"class":111},[105,5268,1964],{"class":1954},[105,5270,1967],{"class":115},[105,5272,5273],{"class":107,"line":28},[105,5274,1537],{"class":115},[105,5276,5277],{"class":107,"line":1171},[105,5278,5279],{"class":174},"    \u002F\u002Fa,b实参\n",[105,5281,5282,5284,5286,5288,5290],{"class":107,"line":1186},[105,5283,1976],{"class":111},[105,5285,1390],{"class":115},[105,5287,161],{"class":111},[105,5289,307],{"class":164},[105,5291,1282],{"class":115},[105,5293,5294,5296,5298,5300,5302],{"class":107,"line":1192},[105,5295,1976],{"class":111},[105,5297,2824],{"class":115},[105,5299,161],{"class":111},[105,5301,307],{"class":164},[105,5303,1282],{"class":115},[105,5305,5306,5308,5310],{"class":107,"line":1206},[105,5307,2003],{"class":115},[105,5309,1421],{"class":111},[105,5311,5312],{"class":115},"a,b;\n",[105,5314,5315],{"class":107,"line":1212},[105,5316,5317],{"class":174},"    \u002F\u002F调用函数时，实参值传给了形参\n",[105,5319,5320,5322,5324,5327],{"class":107,"line":1303},[105,5321,1542],{"class":115},[105,5323,1160],{"class":111},[105,5325,5326],{"class":1954},"add",[105,5328,5329],{"class":115},"(a,b);\n",[105,5331,5332],{"class":107,"line":1309},[105,5333,1556],{"class":115},[47,5335,5337],{"id":5336},"_23值传递","2.3值传递",[14,5339,5340],{},"值传递就是函数调用时实参将数值传给形参",[14,5342,5343],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5345,5346],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[96,5348,5350],{"className":98,"code":5349,"language":100,"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",[102,5351,5352,5374,5378,5391,5408,5426,5437,5446,5455,5468,5484,5500,5509,5513,5521,5525,5537,5549,5556],{"__ignoreMap":22},[105,5353,5354,5357,5360,5362,5364,5366,5368,5370,5372],{"class":107,"line":108},[105,5355,5356],{"class":111},"void",[105,5358,5359],{"class":1954}," swap",[105,5361,116],{"class":115},[105,5363,119],{"class":111},[105,5365,5209],{"class":5208},[105,5367,494],{"class":115},[105,5369,119],{"class":111},[105,5371,5216],{"class":5208},[105,5373,122],{"class":115},[105,5375,5376],{"class":107,"line":28},[105,5377,1537],{"class":115},[105,5379,5380,5382,5384,5387,5389],{"class":107,"line":1171},[105,5381,1542],{"class":115},[105,5383,1160],{"class":111},[105,5385,5386],{"class":220},"\"交换前：\"",[105,5388,1160],{"class":111},[105,5390,1183],{"class":115},[105,5392,5393,5395,5397,5400,5402,5404,5406],{"class":107,"line":1186},[105,5394,1542],{"class":115},[105,5396,1160],{"class":111},[105,5398,5399],{"class":220},"\"num1=\"",[105,5401,1160],{"class":111},[105,5403,5234],{"class":115},[105,5405,1160],{"class":111},[105,5407,1183],{"class":115},[105,5409,5410,5412,5414,5417,5419,5422,5424],{"class":107,"line":1192},[105,5411,1542],{"class":115},[105,5413,1160],{"class":111},[105,5415,5416],{"class":220},"\"num2=\"",[105,5418,1160],{"class":111},[105,5420,5421],{"class":115},"num2",[105,5423,1160],{"class":111},[105,5425,1183],{"class":115},[105,5427,5428,5430,5432,5434],{"class":107,"line":1206},[105,5429,1976],{"class":111},[105,5431,4246],{"class":115},[105,5433,161],{"class":111},[105,5435,5436],{"class":115},"num1;\n",[105,5438,5439,5442,5444],{"class":107,"line":1212},[105,5440,5441],{"class":115},"    num1",[105,5443,161],{"class":111},[105,5445,5239],{"class":115},[105,5447,5448,5451,5453],{"class":107,"line":1303},[105,5449,5450],{"class":115},"    num2",[105,5452,161],{"class":111},[105,5454,4271],{"class":115},[105,5456,5457,5459,5461,5464,5466],{"class":107,"line":1309},[105,5458,1542],{"class":115},[105,5460,1160],{"class":111},[105,5462,5463],{"class":220},"\"交换后：\"",[105,5465,1160],{"class":111},[105,5467,1183],{"class":115},[105,5469,5470,5472,5474,5476,5478,5480,5482],{"class":107,"line":1321},[105,5471,1542],{"class":115},[105,5473,1160],{"class":111},[105,5475,5399],{"class":220},[105,5477,1160],{"class":111},[105,5479,5234],{"class":115},[105,5481,1160],{"class":111},[105,5483,1183],{"class":115},[105,5485,5486,5488,5490,5492,5494,5496,5498],{"class":107,"line":1603},[105,5487,1542],{"class":115},[105,5489,1160],{"class":111},[105,5491,5416],{"class":220},[105,5493,1160],{"class":111},[105,5495,5421],{"class":115},[105,5497,1160],{"class":111},[105,5499,1183],{"class":115},[105,5501,5502,5504,5506],{"class":107,"line":1608},[105,5503,4081],{"class":111},[105,5505,171],{"class":115},[105,5507,5508],{"class":174},"\u002F\u002F或者不写\n",[105,5510,5511],{"class":107,"line":1614},[105,5512,1556],{"class":115},[105,5514,5515,5517,5519],{"class":107,"line":1619},[105,5516,119],{"class":111},[105,5518,1964],{"class":1954},[105,5520,1967],{"class":115},[105,5522,5523],{"class":107,"line":1633},[105,5524,1537],{"class":115},[105,5526,5527,5529,5531,5533,5535],{"class":107,"line":1638},[105,5528,1976],{"class":111},[105,5530,1390],{"class":115},[105,5532,161],{"class":111},[105,5534,562],{"class":164},[105,5536,1282],{"class":115},[105,5538,5539,5541,5543,5545,5547],{"class":107,"line":1644},[105,5540,1976],{"class":111},[105,5542,2824],{"class":115},[105,5544,161],{"class":111},[105,5546,816],{"class":164},[105,5548,1282],{"class":115},[105,5550,5551,5554],{"class":107,"line":1665},[105,5552,5553],{"class":1954},"    swap",[105,5555,5329],{"class":115},[105,5557,5558],{"class":107,"line":1670},[105,5559,1556],{"class":115},[47,5561,5563],{"id":5562},"_24函数的常见形式","2.4函数的常见形式",[59,5565,5566],{},[62,5567,5568],{},"无参无返",[96,5570,5572],{"className":98,"code":5571,"language":100,"meta":22,"style":22},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[102,5573,5574,5583,5587,5600,5604,5612,5616,5621,5629],{"__ignoreMap":22},[105,5575,5576,5578,5581],{"class":107,"line":108},[105,5577,5356],{"class":111},[105,5579,5580],{"class":1954}," test01",[105,5582,1967],{"class":115},[105,5584,5585],{"class":107,"line":28},[105,5586,1537],{"class":115},[105,5588,5589,5591,5593,5596,5598],{"class":107,"line":1171},[105,5590,1542],{"class":115},[105,5592,1160],{"class":111},[105,5594,5595],{"class":220},"\"你好\"",[105,5597,1160],{"class":111},[105,5599,1183],{"class":115},[105,5601,5602],{"class":107,"line":1186},[105,5603,1556],{"class":115},[105,5605,5606,5608,5610],{"class":107,"line":1192},[105,5607,119],{"class":111},[105,5609,1964],{"class":1954},[105,5611,1967],{"class":115},[105,5613,5614],{"class":107,"line":1206},[105,5615,1537],{"class":115},[105,5617,5618],{"class":107,"line":1212},[105,5619,5620],{"class":174},"    \u002F\u002F函数调用\n",[105,5622,5623,5626],{"class":107,"line":1303},[105,5624,5625],{"class":1954},"    test01",[105,5627,5628],{"class":115},"();\n",[105,5630,5631],{"class":107,"line":1309},[105,5632,1556],{"class":115},[59,5634,5635],{"start":28},[62,5636,5637],{},"有参无返",[96,5639,5641],{"className":98,"code":5640,"language":100,"meta":22,"style":22},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[102,5642,5643,5658,5662,5674,5678,5686,5690,5701],{"__ignoreMap":22},[105,5644,5645,5647,5650,5652,5654,5656],{"class":107,"line":108},[105,5646,5356],{"class":111},[105,5648,5649],{"class":1954}," test02",[105,5651,116],{"class":115},[105,5653,119],{"class":111},[105,5655,1390],{"class":5208},[105,5657,122],{"class":115},[105,5659,5660],{"class":107,"line":28},[105,5661,1537],{"class":115},[105,5663,5664,5666,5668,5670,5672],{"class":107,"line":1171},[105,5665,1542],{"class":115},[105,5667,1160],{"class":111},[105,5669,5595],{"class":220},[105,5671,1160],{"class":111},[105,5673,1183],{"class":115},[105,5675,5676],{"class":107,"line":1186},[105,5677,1556],{"class":115},[105,5679,5680,5682,5684],{"class":107,"line":1192},[105,5681,119],{"class":111},[105,5683,1964],{"class":1954},[105,5685,1967],{"class":115},[105,5687,5688],{"class":107,"line":1206},[105,5689,1537],{"class":115},[105,5691,5692,5695,5697,5699],{"class":107,"line":1212},[105,5693,5694],{"class":1954},"    test02",[105,5696,116],{"class":115},[105,5698,427],{"class":164},[105,5700,2710],{"class":115},[105,5702,5703],{"class":107,"line":1303},[105,5704,1556],{"class":115},[59,5706,5707],{"start":1171},[62,5708,5709],{},"无参有返",[96,5711,5713],{"className":98,"code":5712,"language":100,"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",[102,5714,5715,5724,5728,5740,5749,5753,5761,5765,5778,5797],{"__ignoreMap":22},[105,5716,5717,5719,5722],{"class":107,"line":108},[105,5718,119],{"class":111},[105,5720,5721],{"class":1954}," test03",[105,5723,1967],{"class":115},[105,5725,5726],{"class":107,"line":28},[105,5727,1537],{"class":115},[105,5729,5730,5732,5734,5736,5738],{"class":107,"line":1171},[105,5731,1542],{"class":115},[105,5733,1160],{"class":111},[105,5735,5595],{"class":220},[105,5737,1160],{"class":111},[105,5739,1183],{"class":115},[105,5741,5742,5744,5747],{"class":107,"line":1186},[105,5743,4081],{"class":111},[105,5745,5746],{"class":164}," 100",[105,5748,1282],{"class":115},[105,5750,5751],{"class":107,"line":1192},[105,5752,1556],{"class":115},[105,5754,5755,5757,5759],{"class":107,"line":1206},[105,5756,119],{"class":111},[105,5758,1964],{"class":1954},[105,5760,1967],{"class":115},[105,5762,5763],{"class":107,"line":1212},[105,5764,1537],{"class":115},[105,5766,5767,5769,5771,5773,5776],{"class":107,"line":1303},[105,5768,1976],{"class":111},[105,5770,5209],{"class":115},[105,5772,161],{"class":111},[105,5774,5775],{"class":1954},"test03",[105,5777,5628],{"class":115},[105,5779,5780,5782,5784,5786,5788,5790,5792,5794],{"class":107,"line":1309},[105,5781,1542],{"class":115},[105,5783,1160],{"class":111},[105,5785,5399],{"class":220},[105,5787,1160],{"class":111},[105,5789,5234],{"class":115},[105,5791,1160],{"class":111},[105,5793,1230],{"class":115},[105,5795,5796],{"class":174}," \u002F\u002F100\n",[105,5798,5799],{"class":107,"line":1321},[105,5800,1556],{"class":115},[14,5802,5803],{},"4.有参有返",[96,5805,5807],{"className":98,"code":5806,"language":100,"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",[102,5808,5809,5824,5828,5841,5847,5851,5860,5864,5876,5890,5905],{"__ignoreMap":22},[105,5810,5811,5813,5816,5818,5820,5822],{"class":107,"line":108},[105,5812,119],{"class":111},[105,5814,5815],{"class":1954}," test04",[105,5817,116],{"class":115},[105,5819,119],{"class":111},[105,5821,1390],{"class":5208},[105,5823,122],{"class":115},[105,5825,5826],{"class":107,"line":28},[105,5827,1537],{"class":115},[105,5829,5830,5832,5834,5837,5839],{"class":107,"line":1171},[105,5831,1542],{"class":115},[105,5833,1160],{"class":111},[105,5835,5836],{"class":220},"\"hello\"",[105,5838,1160],{"class":111},[105,5840,1183],{"class":115},[105,5842,5843,5845],{"class":107,"line":1186},[105,5844,4081],{"class":111},[105,5846,1424],{"class":115},[105,5848,5849],{"class":107,"line":1192},[105,5850,1556],{"class":115},[105,5852,5853,5855,5858],{"class":107,"line":1206},[105,5854,119],{"class":111},[105,5856,5857],{"class":1954}," mian",[105,5859,1967],{"class":115},[105,5861,5862],{"class":107,"line":1212},[105,5863,1537],{"class":115},[105,5865,5866,5868,5870,5872,5874],{"class":107,"line":1303},[105,5867,1976],{"class":111},[105,5869,2824],{"class":115},[105,5871,161],{"class":111},[105,5873,333],{"class":164},[105,5875,1282],{"class":115},[105,5877,5878,5880,5882,5884,5887],{"class":107,"line":1309},[105,5879,1976],{"class":111},[105,5881,2840],{"class":115},[105,5883,161],{"class":111},[105,5885,5886],{"class":1954},"test04",[105,5888,5889],{"class":115},"(b);\n",[105,5891,5892,5894,5896,5898,5900,5902],{"class":107,"line":1321},[105,5893,1542],{"class":115},[105,5895,1160],{"class":111},[105,5897,404],{"class":115},[105,5899,1160],{"class":111},[105,5901,1230],{"class":115},[105,5903,5904],{"class":174}," \u002F\u002F1\n",[105,5906,5907],{"class":107,"line":1603},[105,5908,1556],{"class":115},[47,5910,5912],{"id":5911},"_25函数的声明","2.5函数的声明",[14,5914,5915],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,5917,5918,5919],{},"函数的",[265,5920,5921],{},"声明可以多次，但是函数的定义只能有一次",[96,5923,5925],{"className":98,"code":5924,"language":100,"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",[102,5926,5927,5932,5937,5962,5971,5975,5987,5999,6015,6019,6039,6043,6062],{"__ignoreMap":22},[105,5928,5929],{"class":107,"line":108},[105,5930,5931],{"class":174},"\u002F\u002F函数声明\n",[105,5933,5934],{"class":107,"line":28},[105,5935,5936],{"class":174},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[105,5938,5939,5941,5944,5946,5948,5950,5952,5954,5956,5959],{"class":107,"line":1171},[105,5940,119],{"class":111},[105,5942,5943],{"class":1954}," max",[105,5945,116],{"class":115},[105,5947,119],{"class":111},[105,5949,1390],{"class":5208},[105,5951,494],{"class":115},[105,5953,119],{"class":111},[105,5955,2824],{"class":5208},[105,5957,5958],{"class":115},");",[105,5960,5961],{"class":174},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[105,5963,5964,5966,5968],{"class":107,"line":1186},[105,5965,119],{"class":111},[105,5967,1964],{"class":1954},[105,5969,5970],{"class":115},"() \n",[105,5972,5973],{"class":107,"line":1192},[105,5974,1537],{"class":115},[105,5976,5977,5979,5981,5983,5985],{"class":107,"line":1206},[105,5978,1976],{"class":111},[105,5980,1390],{"class":115},[105,5982,161],{"class":111},[105,5984,562],{"class":164},[105,5986,1282],{"class":115},[105,5988,5989,5991,5993,5995,5997],{"class":107,"line":1212},[105,5990,1976],{"class":111},[105,5992,2824],{"class":115},[105,5994,161],{"class":111},[105,5996,816],{"class":164},[105,5998,1282],{"class":115},[105,6000,6001,6003,6005,6008,6011,6013],{"class":107,"line":1303},[105,6002,1542],{"class":115},[105,6004,1160],{"class":111},[105,6006,6007],{"class":1954},"max",[105,6009,6010],{"class":115},"(a,b)",[105,6012,1160],{"class":111},[105,6014,1183],{"class":115},[105,6016,6017],{"class":107,"line":1309},[105,6018,1556],{"class":115},[105,6020,6021,6023,6025,6027,6029,6031,6033,6035,6037],{"class":107,"line":1321},[105,6022,119],{"class":111},[105,6024,5943],{"class":1954},[105,6026,116],{"class":115},[105,6028,119],{"class":111},[105,6030,1390],{"class":5208},[105,6032,494],{"class":115},[105,6034,119],{"class":111},[105,6036,2824],{"class":5208},[105,6038,122],{"class":115},[105,6040,6041],{"class":107,"line":1603},[105,6042,1537],{"class":115},[105,6044,6045,6047,6049,6051,6053,6055,6057,6059],{"class":107,"line":1608},[105,6046,4081],{"class":111},[105,6048,1390],{"class":115},[105,6050,1076],{"class":111},[105,6052,379],{"class":115},[105,6054,1102],{"class":111},[105,6056,354],{"class":115},[105,6058,975],{"class":111},[105,6060,6061],{"class":115},"b;\n",[105,6063,6064],{"class":107,"line":1614},[105,6065,1556],{"class":115},[47,6067,6069],{"id":6068},"_26函数的分文件编写","2.6函数的分文件编写",[14,6071,6072],{},"4个步骤：",[1123,6074,6075,6078,6081,6084],{},[62,6076,6077],{},"1.创建后缀名为.h的头文件",[62,6079,6080],{},"2.创建后缀名为.cpp的源文件",[62,6082,6083],{},"3.在头文件中写函数的定义",[62,6085,6086],{},"4.在源文件中写函数的定义\n示例：",[14,6088,6089],{},"头文件：swap.h",[96,6091,6093],{"className":98,"code":6092,"language":100,"meta":22,"style":22},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[102,6094,6095,6101,6111,6115],{"__ignoreMap":22},[105,6096,6097,6099],{"class":107,"line":108},[105,6098,1940],{"class":111},[105,6100,1943],{"class":220},[105,6102,6103,6105,6107,6109],{"class":107,"line":28},[105,6104,1948],{"class":111},[105,6106,1951],{"class":111},[105,6108,1955],{"class":1954},[105,6110,1282],{"class":115},[105,6112,6113],{"class":107,"line":1171},[105,6114,5931],{"class":174},[105,6116,6117,6119,6121,6123,6125,6127,6129,6131,6133],{"class":107,"line":1186},[105,6118,5356],{"class":111},[105,6120,5359],{"class":1954},[105,6122,116],{"class":115},[105,6124,119],{"class":111},[105,6126,1390],{"class":5208},[105,6128,494],{"class":115},[105,6130,119],{"class":111},[105,6132,2824],{"class":5208},[105,6134,2710],{"class":115},[14,6136,6137],{},"源文件：swap.cpp",[96,6139,6141],{"className":98,"code":6140,"language":100,"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",[102,6142,6143,6150,6155,6175,6179,6190,6199,6208,6225,6242],{"__ignoreMap":22},[105,6144,6145,6147],{"class":107,"line":108},[105,6146,1940],{"class":111},[105,6148,6149],{"class":220}," \"swap.h\"\n",[105,6151,6152],{"class":107,"line":28},[105,6153,6154],{"class":174},"\u002F\u002F函数的定义\n",[105,6156,6157,6159,6161,6163,6165,6167,6169,6171,6173],{"class":107,"line":1171},[105,6158,5356],{"class":111},[105,6160,5359],{"class":1954},[105,6162,116],{"class":115},[105,6164,119],{"class":111},[105,6166,1390],{"class":5208},[105,6168,494],{"class":115},[105,6170,119],{"class":111},[105,6172,2824],{"class":5208},[105,6174,122],{"class":115},[105,6176,6177],{"class":107,"line":1186},[105,6178,1537],{"class":115},[105,6180,6181,6183,6185,6187],{"class":107,"line":1192},[105,6182,1976],{"class":111},[105,6184,4246],{"class":115},[105,6186,161],{"class":111},[105,6188,6189],{"class":115},"a;\n",[105,6191,6192,6195,6197],{"class":107,"line":1206},[105,6193,6194],{"class":115},"    a",[105,6196,161],{"class":111},[105,6198,6061],{"class":115},[105,6200,6201,6204,6206],{"class":107,"line":1212},[105,6202,6203],{"class":115},"    b",[105,6205,161],{"class":111},[105,6207,4271],{"class":115},[105,6209,6210,6212,6214,6217,6219,6221,6223],{"class":107,"line":1303},[105,6211,1542],{"class":115},[105,6213,1160],{"class":111},[105,6215,6216],{"class":220},"\"a=\"",[105,6218,1160],{"class":111},[105,6220,354],{"class":115},[105,6222,1160],{"class":111},[105,6224,1183],{"class":115},[105,6226,6227,6229,6231,6234,6236,6238,6240],{"class":107,"line":1309},[105,6228,1542],{"class":115},[105,6230,1160],{"class":111},[105,6232,6233],{"class":220},"\"b=\"",[105,6235,1160],{"class":111},[105,6237,379],{"class":115},[105,6239,1160],{"class":111},[105,6241,1183],{"class":115},[105,6243,6244],{"class":107,"line":1321},[105,6245,1556],{"class":115},[5118,6247,6248],{},"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":28,"depth":28,"links":6250},[6251,6252,6253,6254,6255,6256],{"id":5164,"depth":28,"text":5165},{"id":5253,"depth":28,"text":5254},{"id":5336,"depth":28,"text":5337},{"id":5562,"depth":28,"text":5563},{"id":5911,"depth":28,"text":5912},{"id":6068,"depth":28,"text":6069},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5156,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6263,"title":6264,"body":6265,"description":6272,"extension":30,"meta":7677,"navigation":32,"path":7678,"seo":7679,"stem":7680,"__hash__":7681},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6266,"toc":7667},[6267,6270,6273,6277,6439,6443,6446,6449,6452,6455,6595,6599,6602,6605,6608,6673,6677,6682,6749,6752,6756,6759,6770,6775,6795,6798,6803,6822,6825,6829,6848,6851,6855,7090,7094,7097,7100,7103,7265,7268,7272,7275,7281,7664],[10,6268,6264],{"id":6269},"_3指针",[14,6271,6272],{},"通过指针保存一个地址，指针就是个地址",[47,6274,6276],{"id":6275},"_31定义指针","3.1定义指针",[96,6278,6280],{"className":98,"code":6279,"language":100,"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",[102,6281,6282,6290,6294,6299,6311,6316,6324,6334,6352,6372,6376,6381,6386,6391,6405,6421,6435],{"__ignoreMap":22},[105,6283,6284,6286,6288],{"class":107,"line":108},[105,6285,119],{"class":111},[105,6287,1964],{"class":1954},[105,6289,1967],{"class":115},[105,6291,6292],{"class":107,"line":28},[105,6293,1537],{"class":115},[105,6295,6296],{"class":107,"line":1171},[105,6297,6298],{"class":174},"    \u002F\u002F1.定义指针\n",[105,6300,6301,6303,6305,6307,6309],{"class":107,"line":1186},[105,6302,1976],{"class":111},[105,6304,1390],{"class":115},[105,6306,161],{"class":111},[105,6308,562],{"class":164},[105,6310,1282],{"class":115},[105,6312,6313],{"class":107,"line":1192},[105,6314,6315],{"class":174},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[105,6317,6318,6321],{"class":107,"line":1206},[105,6319,6320],{"class":111},"    int*",[105,6322,6323],{"class":115},"p;\n",[105,6325,6326,6329,6332],{"class":107,"line":1212},[105,6327,6328],{"class":115},"    p",[105,6330,6331],{"class":111},"=&",[105,6333,6189],{"class":115},[105,6335,6336,6338,6340,6343,6346,6348,6350],{"class":107,"line":1303},[105,6337,1542],{"class":115},[105,6339,1160],{"class":111},[105,6341,6342],{"class":220},"\"a的地址为：\"",[105,6344,6345],{"class":111},"\u003C\u003C&",[105,6347,354],{"class":115},[105,6349,1160],{"class":111},[105,6351,1183],{"class":115},[105,6353,6354,6356,6358,6361,6363,6365,6367,6369],{"class":107,"line":1309},[105,6355,1542],{"class":115},[105,6357,1160],{"class":111},[105,6359,6360],{"class":220},"\"指针p为：\"",[105,6362,1160],{"class":111},[105,6364,14],{"class":115},[105,6366,1160],{"class":111},[105,6368,1230],{"class":115},[105,6370,6371],{"class":174},"\u002F\u002F指针p表示的就是a的地址\n",[105,6373,6374],{"class":107,"line":1321},[105,6375,2391],{"emptyLinePlaceholder":32},[105,6377,6378],{"class":107,"line":1603},[105,6379,6380],{"class":174},"    \u002F\u002F2.使用指针\n",[105,6382,6383],{"class":107,"line":1608},[105,6384,6385],{"class":174},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[105,6387,6388],{"class":107,"line":1614},[105,6389,6390],{"class":174},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[105,6392,6393,6396,6398,6400,6403],{"class":107,"line":1619},[105,6394,6395],{"class":111},"    *",[105,6397,14],{"class":115},[105,6399,161],{"class":111},[105,6401,6402],{"class":164},"1000",[105,6404,1282],{"class":115},[105,6406,6407,6409,6412,6414,6416,6418],{"class":107,"line":1633},[105,6408,1542],{"class":115},[105,6410,6411],{"class":111},"\u003C\u003C*",[105,6413,14],{"class":115},[105,6415,1160],{"class":111},[105,6417,1230],{"class":115},[105,6419,6420],{"class":174},"\u002F\u002F1000\n",[105,6422,6423,6425,6427,6429,6431,6433],{"class":107,"line":1638},[105,6424,1542],{"class":115},[105,6426,1160],{"class":111},[105,6428,354],{"class":115},[105,6430,1160],{"class":111},[105,6432,1230],{"class":115},[105,6434,6420],{"class":174},[105,6436,6437],{"class":107,"line":1644},[105,6438,1556],{"class":115},[47,6440,6442],{"id":6441},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6444,6445],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6447,6448],{},"在32位操作系统下：占用4个字节空间",[14,6450,6451],{},"在64位操作系统下：占用8个字节空间",[14,6453,6454],{},"上方是不管啥数据类型的",[96,6456,6458],{"className":98,"code":6457,"language":100,"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",[102,6459,6460,6468,6472,6477,6489,6494,6499,6504,6517,6539,6565,6591],{"__ignoreMap":22},[105,6461,6462,6464,6466],{"class":107,"line":108},[105,6463,119],{"class":111},[105,6465,1964],{"class":1954},[105,6467,1967],{"class":115},[105,6469,6470],{"class":107,"line":28},[105,6471,1537],{"class":115},[105,6473,6474],{"class":107,"line":1171},[105,6475,6476],{"class":174},"    \u002F\u002F指针所占内存空间\n",[105,6478,6479,6481,6483,6485,6487],{"class":107,"line":1186},[105,6480,1976],{"class":111},[105,6482,1390],{"class":115},[105,6484,161],{"class":111},[105,6486,562],{"class":164},[105,6488,1282],{"class":115},[105,6490,6491],{"class":107,"line":1192},[105,6492,6493],{"class":174},"    \u002F\u002Fint *p;\n",[105,6495,6496],{"class":107,"line":1206},[105,6497,6498],{"class":174},"    \u002F\u002Fp=&a;\n",[105,6500,6501],{"class":107,"line":1212},[105,6502,6503],{"class":174},"    \u002F\u002F上述可以写为以下：\n",[105,6505,6506,6508,6511,6513,6515],{"class":107,"line":1303},[105,6507,1976],{"class":111},[105,6509,6510],{"class":111}," *",[105,6512,14],{"class":115},[105,6514,6331],{"class":111},[105,6516,6189],{"class":115},[105,6518,6519,6522,6524,6527,6529,6532,6534,6536],{"class":107,"line":1309},[105,6520,6521],{"class":115},"    cout ",[105,6523,1160],{"class":111},[105,6525,6526],{"class":220},"\"sizeof(int *)\"",[105,6528,1364],{"class":111},[105,6530,6531],{"class":115},"(p)",[105,6533,1160],{"class":111},[105,6535,1230],{"class":115},[105,6537,6538],{"class":174},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[105,6540,6541,6543,6545,6547,6549,6551,6553,6555,6557,6559,6562],{"class":107,"line":1321},[105,6542,6521],{"class":115},[105,6544,1160],{"class":111},[105,6546,6526],{"class":220},[105,6548,1364],{"class":111},[105,6550,116],{"class":115},[105,6552,119],{"class":111},[105,6554,6510],{"class":111},[105,6556,545],{"class":115},[105,6558,1160],{"class":111},[105,6560,6561],{"class":115},"endl",[105,6563,6564],{"class":174},"  \u002F\u002F4字节(32位的话)\n",[105,6566,6567,6569,6571,6574,6576,6578,6580,6582,6584,6586,6588],{"class":107,"line":1603},[105,6568,6521],{"class":115},[105,6570,1160],{"class":111},[105,6572,6573],{"class":220},"\"sizeof(char *)\"",[105,6575,1364],{"class":111},[105,6577,116],{"class":115},[105,6579,212],{"class":111},[105,6581,6510],{"class":111},[105,6583,545],{"class":115},[105,6585,1160],{"class":111},[105,6587,1230],{"class":115},[105,6589,6590],{"class":174}," \u002F\u002F4字节(32位的话)\n",[105,6592,6593],{"class":107,"line":1608},[105,6594,1556],{"class":115},[47,6596,6598],{"id":6597},"_33空指针","3.3空指针",[14,6600,6601],{},"空指针：指针变量指向内存中编号为0的空间",[14,6603,6604],{},"用途：初始化指针变量",[14,6606,6607],{},"注意：空指针指向的内存是不可以访问的",[96,6609,6611],{"className":98,"code":6610,"language":100,"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",[102,6612,6613,6621,6625,6630,6644,6649,6664,6669],{"__ignoreMap":22},[105,6614,6615,6617,6619],{"class":107,"line":108},[105,6616,119],{"class":111},[105,6618,1964],{"class":1954},[105,6620,1967],{"class":115},[105,6622,6623],{"class":107,"line":28},[105,6624,1537],{"class":115},[105,6626,6627],{"class":107,"line":1171},[105,6628,6629],{"class":174},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[105,6631,6632,6634,6636,6638,6640,6642],{"class":107,"line":1186},[105,6633,1976],{"class":111},[105,6635,6510],{"class":111},[105,6637,14],{"class":115},[105,6639,161],{"class":111},[105,6641,2383],{"class":164},[105,6643,1282],{"class":115},[105,6645,6646],{"class":107,"line":1192},[105,6647,6648],{"class":174},"    \u002F\u002F2.空指针不能进行访问\n",[105,6650,6651,6653,6655,6657,6659,6661],{"class":107,"line":1206},[105,6652,6395],{"class":111},[105,6654,14],{"class":115},[105,6656,161],{"class":111},[105,6658,427],{"class":164},[105,6660,171],{"class":115},[105,6662,6663],{"class":174},"\u002F\u002F直接报错，压根不能访问\n",[105,6665,6666],{"class":107,"line":1212},[105,6667,6668],{"class":174},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[105,6670,6671],{"class":107,"line":1303},[105,6672,1556],{"class":115},[47,6674,6676],{"id":6675},"_34野指针","3.4野指针",[14,6678,6679],{},[265,6680,6681],{},"指针变量指向非法的内存空间",[96,6683,6685],{"className":98,"code":6684,"language":100,"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",[102,6686,6687,6695,6699,6728,6733,6745],{"__ignoreMap":22},[105,6688,6689,6691,6693],{"class":107,"line":108},[105,6690,119],{"class":111},[105,6692,1964],{"class":1954},[105,6694,1967],{"class":115},[105,6696,6697],{"class":107,"line":28},[105,6698,1537],{"class":115},[105,6700,6701,6703,6705,6707,6709,6711,6713,6715,6717,6720,6723,6725],{"class":107,"line":1171},[105,6702,1976],{"class":111},[105,6704,6510],{"class":111},[105,6706,14],{"class":115},[105,6708,161],{"class":111},[105,6710,116],{"class":115},[105,6712,119],{"class":111},[105,6714,6510],{"class":111},[105,6716,545],{"class":115},[105,6718,6719],{"class":111},"0x",[105,6721,6722],{"class":164},"1100",[105,6724,171],{"class":115},[105,6726,6727],{"class":174}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[105,6729,6730],{"class":107,"line":1186},[105,6731,6732],{"class":174},"    \u002F\u002F访问野指针报错\n",[105,6734,6735,6737,6739,6741,6743],{"class":107,"line":1192},[105,6736,1542],{"class":115},[105,6738,6411],{"class":111},[105,6740,14],{"class":115},[105,6742,1160],{"class":111},[105,6744,1183],{"class":115},[105,6746,6747],{"class":107,"line":1206},[105,6748,1556],{"class":115},[14,6750,6751],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[47,6753,6755],{"id":6754},"_35const修饰指针","3.5const修饰指针",[14,6757,6758],{},"三种情况：",[1123,6760,6761,6764,6767],{},[62,6762,6763],{},"const修饰指针 常量指针",[62,6765,6766],{},"const修饰常量 指针常量",[62,6768,6769],{},"const即修饰指针，又修饰常量",[59,6771,6772],{},[62,6773,6774],{},"常量指针",[96,6776,6778],{"className":98,"code":6777,"language":100,"meta":22,"style":22},"const int *p=&a;\n",[102,6779,6780],{"__ignoreMap":22},[105,6781,6782,6785,6787,6789,6791,6793],{"class":107,"line":108},[105,6783,6784],{"class":111},"const",[105,6786,2373],{"class":111},[105,6788,6510],{"class":111},[105,6790,14],{"class":115},[105,6792,6331],{"class":111},[105,6794,6189],{"class":115},[14,6796,6797],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[59,6799,6800],{"start":28},[62,6801,6802],{},"指针常量",[96,6804,6806],{"className":98,"code":6805,"language":100,"meta":22,"style":22},"int *const p=&a;\n",[102,6807,6808],{"__ignoreMap":22},[105,6809,6810,6812,6815,6818,6820],{"class":107,"line":108},[105,6811,119],{"class":111},[105,6813,6814],{"class":111}," *const",[105,6816,6817],{"class":115}," p",[105,6819,6331],{"class":111},[105,6821,6189],{"class":115},[14,6823,6824],{},"指针的指向不可以改，指针指向的值可以改",[59,6826,6827],{"start":1171},[62,6828,6769],{},[96,6830,6832],{"className":98,"code":6831,"language":100,"meta":22,"style":22},"const int *const p=&a;\n",[102,6833,6834],{"__ignoreMap":22},[105,6835,6836,6838,6840,6842,6844,6846],{"class":107,"line":108},[105,6837,6784],{"class":111},[105,6839,2373],{"class":111},[105,6841,6814],{"class":111},[105,6843,6817],{"class":115},[105,6845,6331],{"class":111},[105,6847,6189],{"class":115},[14,6849,6850],{},"指针的指向和指针指向的值都不可以改变",[47,6852,6854],{"id":6853},"_36指针和数组","3.6指针和数组",[96,6856,6858],{"className":98,"code":6857,"language":100,"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",[102,6859,6860,6868,6872,6877,6931,6952,6968,6984,6995,7012,7017,7031,7057,7061,7073,7082,7086],{"__ignoreMap":22},[105,6861,6862,6864,6866],{"class":107,"line":108},[105,6863,119],{"class":111},[105,6865,1964],{"class":1954},[105,6867,1967],{"class":115},[105,6869,6870],{"class":107,"line":28},[105,6871,1537],{"class":115},[105,6873,6874],{"class":107,"line":1171},[105,6875,6876],{"class":174},"    \u002F\u002F利用指针访问数组中的元素\n",[105,6878,6879,6881,6883,6885,6887,6889,6891,6893,6895,6897,6899,6901,6903,6905,6907,6909,6911,6913,6915,6917,6919,6921,6923,6925,6927,6929],{"class":107,"line":1186},[105,6880,1976],{"class":111},[105,6882,3953],{"class":115},[105,6884,562],{"class":164},[105,6886,1056],{"class":115},[105,6888,161],{"class":111},[105,6890,1012],{"class":115},[105,6892,333],{"class":164},[105,6894,494],{"class":115},[105,6896,193],{"class":164},[105,6898,494],{"class":115},[105,6900,187],{"class":164},[105,6902,494],{"class":115},[105,6904,409],{"class":164},[105,6906,494],{"class":115},[105,6908,435],{"class":164},[105,6910,494],{"class":115},[105,6912,460],{"class":164},[105,6914,494],{"class":115},[105,6916,485],{"class":164},[105,6918,494],{"class":115},[105,6920,511],{"class":164},[105,6922,494],{"class":115},[105,6924,536],{"class":164},[105,6926,494],{"class":115},[105,6928,562],{"class":164},[105,6930,3986],{"class":115},[105,6932,6933,6935,6937,6940,6942,6944,6946,6948,6950],{"class":107,"line":1192},[105,6934,1542],{"class":115},[105,6936,1160],{"class":111},[105,6938,6939],{"class":220},"\"数组的第一个元素为：\"",[105,6941,1160],{"class":111},[105,6943,3897],{"class":115},[105,6945,307],{"class":164},[105,6947,1056],{"class":115},[105,6949,1160],{"class":111},[105,6951,1183],{"class":115},[105,6953,6954,6956,6958,6960,6962,6965],{"class":107,"line":1206},[105,6955,1976],{"class":111},[105,6957,6510],{"class":111},[105,6959,14],{"class":115},[105,6961,161],{"class":111},[105,6963,6964],{"class":115},"arr;",[105,6966,6967],{"class":174},"\u002F\u002F注意数才要加取地址符号&\n",[105,6969,6970,6972,6974,6976,6978,6980,6982],{"class":107,"line":1212},[105,6971,1542],{"class":115},[105,6973,1160],{"class":111},[105,6975,6939],{"class":220},[105,6977,6411],{"class":111},[105,6979,14],{"class":115},[105,6981,1160],{"class":111},[105,6983,1183],{"class":115},[105,6985,6986,6988,6990,6992],{"class":107,"line":1303},[105,6987,6328],{"class":115},[105,6989,2283],{"class":111},[105,6991,171],{"class":115},[105,6993,6994],{"class":174}," \u002F\u002F让指针向后偏移4个字节\n",[105,6996,6997,6999,7001,7004,7006,7008,7010],{"class":107,"line":1309},[105,6998,1542],{"class":115},[105,7000,1160],{"class":111},[105,7002,7003],{"class":220},"\"数组的第二个元素为：\"",[105,7005,6411],{"class":111},[105,7007,14],{"class":115},[105,7009,1160],{"class":111},[105,7011,1183],{"class":115},[105,7013,7014],{"class":107,"line":1321},[105,7015,7016],{"class":174},"    \u002F\u002F利用指针遍历数组\n",[105,7018,7019,7021,7023,7026,7028],{"class":107,"line":1603},[105,7020,1976],{"class":111},[105,7022,6510],{"class":111},[105,7024,7025],{"class":115},"p2",[105,7027,161],{"class":111},[105,7029,7030],{"class":115},"arr;\n",[105,7032,7033,7035,7037,7039,7041,7043,7045,7047,7049,7051,7053,7055],{"class":107,"line":1608},[105,7034,3192],{"class":111},[105,7036,1649],{"class":115},[105,7038,119],{"class":111},[105,7040,3023],{"class":115},[105,7042,161],{"class":111},[105,7044,307],{"class":164},[105,7046,3030],{"class":115},[105,7048,1026],{"class":111},[105,7050,562],{"class":164},[105,7052,3030],{"class":115},[105,7054,2283],{"class":111},[105,7056,122],{"class":115},[105,7058,7059],{"class":107,"line":1614},[105,7060,2021],{"class":115},[105,7062,7063,7065,7067,7069,7071],{"class":107,"line":1619},[105,7064,3442],{"class":115},[105,7066,6411],{"class":111},[105,7068,7025],{"class":115},[105,7070,1160],{"class":111},[105,7072,1183],{"class":115},[105,7074,7075,7078,7080],{"class":107,"line":1633},[105,7076,7077],{"class":115},"        p2",[105,7079,2283],{"class":111},[105,7081,1282],{"class":115},[105,7083,7084],{"class":107,"line":1638},[105,7085,2178],{"class":115},[105,7087,7088],{"class":107,"line":1644},[105,7089,1556],{"class":115},[47,7091,7093],{"id":7092},"_37指针和函数","3.7指针和函数",[14,7095,7096],{},"利用指针做函数参数，可以修改实参的值",[14,7098,7099],{},"值传递：只改变形参，不改变实参",[14,7101,7102],{},"地址传递：",[96,7104,7106],{"className":98,"code":7105,"language":100,"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",[102,7107,7108,7133,7137,7149,7160,7170,7174,7182,7186,7198,7210,7215,7231,7246,7261],{"__ignoreMap":22},[105,7109,7110,7112,7114,7116,7118,7120,7123,7125,7127,7129,7131],{"class":107,"line":108},[105,7111,5356],{"class":111},[105,7113,5359],{"class":1954},[105,7115,116],{"class":115},[105,7117,119],{"class":111},[105,7119,6510],{"class":111},[105,7121,7122],{"class":5208},"p1",[105,7124,494],{"class":115},[105,7126,119],{"class":111},[105,7128,6510],{"class":111},[105,7130,7025],{"class":5208},[105,7132,122],{"class":115},[105,7134,7135],{"class":107,"line":28},[105,7136,1537],{"class":115},[105,7138,7139,7141,7143,7146],{"class":107,"line":1171},[105,7140,1976],{"class":111},[105,7142,4246],{"class":115},[105,7144,7145],{"class":111},"=*",[105,7147,7148],{"class":115},"p1;\n",[105,7150,7151,7153,7155,7157],{"class":107,"line":1186},[105,7152,6395],{"class":111},[105,7154,7122],{"class":115},[105,7156,7145],{"class":111},[105,7158,7159],{"class":115},"p2;\n",[105,7161,7162,7164,7166,7168],{"class":107,"line":1192},[105,7163,6395],{"class":111},[105,7165,7025],{"class":115},[105,7167,161],{"class":111},[105,7169,4271],{"class":115},[105,7171,7172],{"class":107,"line":1206},[105,7173,1556],{"class":115},[105,7175,7176,7178,7180],{"class":107,"line":1212},[105,7177,119],{"class":111},[105,7179,1964],{"class":1954},[105,7181,1967],{"class":115},[105,7183,7184],{"class":107,"line":1303},[105,7185,1537],{"class":115},[105,7187,7188,7190,7192,7194,7196],{"class":107,"line":1309},[105,7189,1976],{"class":111},[105,7191,1390],{"class":115},[105,7193,161],{"class":111},[105,7195,562],{"class":164},[105,7197,1282],{"class":115},[105,7199,7200,7202,7204,7206,7208],{"class":107,"line":1321},[105,7201,1976],{"class":111},[105,7203,2824],{"class":115},[105,7205,161],{"class":111},[105,7207,816],{"class":164},[105,7209,1282],{"class":115},[105,7211,7212],{"class":107,"line":1603},[105,7213,7214],{"class":174},"    \u002F\u002F地址传递\n",[105,7216,7217,7219,7221,7223,7226,7228],{"class":107,"line":1608},[105,7218,5553],{"class":1954},[105,7220,116],{"class":115},[105,7222,469],{"class":111},[105,7224,7225],{"class":115},"a,",[105,7227,469],{"class":111},[105,7229,7230],{"class":115},"b);\n",[105,7232,7233,7235,7237,7239,7241,7243],{"class":107,"line":1614},[105,7234,1542],{"class":115},[105,7236,1160],{"class":111},[105,7238,354],{"class":115},[105,7240,1160],{"class":111},[105,7242,1230],{"class":115},[105,7244,7245],{"class":174},"\u002F\u002F20\n",[105,7247,7248,7250,7252,7254,7256,7258],{"class":107,"line":1619},[105,7249,1542],{"class":115},[105,7251,1160],{"class":111},[105,7253,379],{"class":115},[105,7255,1160],{"class":111},[105,7257,1230],{"class":115},[105,7259,7260],{"class":174},"\u002F\u002F10\n",[105,7262,7263],{"class":107,"line":1633},[105,7264,1556],{"class":115},[14,7266,7267],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[47,7269,7271],{"id":7270},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7273,7274],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7276,7277,7278,7280],{},"例如数组：int arr",[105,7279,562],{},"={4,3,6,9,1,2,10,8,7,5}",[96,7282,7284],{"className":98,"code":7283,"language":100,"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",[102,7285,7286,7292,7302,7326,7330,7361,7365,7399,7403,7421,7425,7436,7451,7466,7470,7474,7478,7482,7486,7494,7498,7503,7557,7569,7581,7586,7594,7598,7603,7628,7632,7647,7656,7660],{"__ignoreMap":22},[105,7287,7288,7290],{"class":107,"line":108},[105,7289,1940],{"class":111},[105,7291,1943],{"class":220},[105,7293,7294,7296,7298,7300],{"class":107,"line":28},[105,7295,1948],{"class":111},[105,7297,1951],{"class":111},[105,7299,1955],{"class":1954},[105,7301,1282],{"class":115},[105,7303,7304,7306,7309,7311,7313,7315,7317,7319,7321,7324],{"class":107,"line":1171},[105,7305,5356],{"class":111},[105,7307,7308],{"class":1954}," bubbleSort",[105,7310,116],{"class":115},[105,7312,119],{"class":111},[105,7314,6510],{"class":111},[105,7316,14],{"class":5208},[105,7318,494],{"class":115},[105,7320,119],{"class":111},[105,7322,7323],{"class":5208}," len",[105,7325,122],{"class":115},[105,7327,7328],{"class":107,"line":1186},[105,7329,1537],{"class":115},[105,7331,7332,7334,7336,7338,7340,7342,7344,7346,7348,7351,7353,7355,7357,7359],{"class":107,"line":1192},[105,7333,3192],{"class":111},[105,7335,116],{"class":115},[105,7337,119],{"class":111},[105,7339,3023],{"class":115},[105,7341,161],{"class":111},[105,7343,307],{"class":164},[105,7345,3030],{"class":115},[105,7347,1026],{"class":111},[105,7349,7350],{"class":115},"len",[105,7352,648],{"class":111},[105,7354,333],{"class":164},[105,7356,3030],{"class":115},[105,7358,2283],{"class":111},[105,7360,122],{"class":115},[105,7362,7363],{"class":107,"line":1206},[105,7364,2021],{"class":115},[105,7366,7367,7369,7371,7373,7375,7377,7379,7381,7383,7385,7387,7389,7391,7393,7395,7397],{"class":107,"line":1212},[105,7368,3394],{"class":111},[105,7370,116],{"class":115},[105,7372,119],{"class":111},[105,7374,3401],{"class":115},[105,7376,161],{"class":111},[105,7378,307],{"class":164},[105,7380,3408],{"class":115},[105,7382,1026],{"class":111},[105,7384,7350],{"class":115},[105,7386,648],{"class":111},[105,7388,557],{"class":115},[105,7390,648],{"class":111},[105,7392,333],{"class":164},[105,7394,3408],{"class":115},[105,7396,2283],{"class":111},[105,7398,122],{"class":115},[105,7400,7401],{"class":107,"line":1303},[105,7402,2501],{"class":115},[105,7404,7405,7407,7410,7412,7415,7417,7419],{"class":107,"line":1309},[105,7406,4633],{"class":111},[105,7408,7409],{"class":115},"(p[j]",[105,7411,1076],{"class":111},[105,7413,7414],{"class":115},"p[j",[105,7416,597],{"class":111},[105,7418,333],{"class":164},[105,7420,4648],{"class":115},[105,7422,7423],{"class":107,"line":1321},[105,7424,4653],{"class":115},[105,7426,7427,7429,7431,7433],{"class":107,"line":1603},[105,7428,4658],{"class":111},[105,7430,4246],{"class":115},[105,7432,161],{"class":111},[105,7434,7435],{"class":115},"p[j];\n",[105,7437,7438,7441,7443,7445,7447,7449],{"class":107,"line":1608},[105,7439,7440],{"class":115},"                p[j]",[105,7442,161],{"class":111},[105,7444,7414],{"class":115},[105,7446,597],{"class":111},[105,7448,333],{"class":164},[105,7450,4681],{"class":115},[105,7452,7453,7456,7458,7460,7462,7464],{"class":107,"line":1614},[105,7454,7455],{"class":115},"                p[j",[105,7457,597],{"class":111},[105,7459,333],{"class":164},[105,7461,1056],{"class":115},[105,7463,161],{"class":111},[105,7465,4271],{"class":115},[105,7467,7468],{"class":107,"line":1619},[105,7469,4701],{"class":115},[105,7471,7472],{"class":107,"line":1633},[105,7473,2520],{"class":115},[105,7475,7476],{"class":107,"line":1638},[105,7477,2178],{"class":115},[105,7479,7480],{"class":107,"line":1644},[105,7481,1556],{"class":115},[105,7483,7484],{"class":107,"line":1665},[105,7485,2391],{"emptyLinePlaceholder":32},[105,7487,7488,7490,7492],{"class":107,"line":1670},[105,7489,119],{"class":111},[105,7491,1964],{"class":1954},[105,7493,1967],{"class":115},[105,7495,7496],{"class":107,"line":1684},[105,7497,1537],{"class":115},[105,7499,7500],{"class":107,"line":1689},[105,7501,7502],{"class":174},"    \u002F\u002F 1.创建数组\n",[105,7504,7505,7507,7509,7511,7513,7515,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543,7545,7547,7549,7551,7553,7555],{"class":107,"line":1718},[105,7506,1976],{"class":111},[105,7508,3953],{"class":115},[105,7510,562],{"class":164},[105,7512,1056],{"class":115},[105,7514,161],{"class":111},[105,7516,1012],{"class":115},[105,7518,409],{"class":164},[105,7520,494],{"class":115},[105,7522,187],{"class":164},[105,7524,494],{"class":115},[105,7526,460],{"class":164},[105,7528,494],{"class":115},[105,7530,536],{"class":164},[105,7532,494],{"class":115},[105,7534,333],{"class":164},[105,7536,494],{"class":115},[105,7538,193],{"class":164},[105,7540,494],{"class":115},[105,7542,562],{"class":164},[105,7544,494],{"class":115},[105,7546,511],{"class":164},[105,7548,494],{"class":115},[105,7550,485],{"class":164},[105,7552,494],{"class":115},[105,7554,435],{"class":164},[105,7556,3986],{"class":115},[105,7558,7559,7561,7563,7565,7567],{"class":107,"line":1723},[105,7560,1976],{"class":111},[105,7562,7323],{"class":115},[105,7564,161],{"class":111},[105,7566,562],{"class":164},[105,7568,1282],{"class":115},[105,7570,7571,7573,7575,7577,7579],{"class":107,"line":1740},[105,7572,1976],{"class":111},[105,7574,6510],{"class":111},[105,7576,14],{"class":115},[105,7578,161],{"class":111},[105,7580,7030],{"class":115},[105,7582,7583],{"class":107,"line":1745},[105,7584,7585],{"class":174},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[105,7587,7588,7591],{"class":107,"line":1750},[105,7589,7590],{"class":1954},"    bubbleSort",[105,7592,7593],{"class":115},"(p,len);\n",[105,7595,7596],{"class":107,"line":1755},[105,7597,2391],{"emptyLinePlaceholder":32},[105,7599,7600],{"class":107,"line":1769},[105,7601,7602],{"class":174},"    \u002F\u002F 3.打印排序后的数组\n",[105,7604,7605,7607,7609,7611,7613,7615,7617,7619,7621,7624,7626],{"class":107,"line":1774},[105,7606,3192],{"class":111},[105,7608,1649],{"class":115},[105,7610,119],{"class":111},[105,7612,3023],{"class":115},[105,7614,161],{"class":111},[105,7616,307],{"class":164},[105,7618,3205],{"class":115},[105,7620,1026],{"class":111},[105,7622,7623],{"class":115},"len; i",[105,7625,2283],{"class":111},[105,7627,122],{"class":115},[105,7629,7630],{"class":107,"line":2568},[105,7631,2021],{"class":115},[105,7633,7634,7636,7638,7640,7642,7645],{"class":107,"line":2582},[105,7635,3442],{"class":115},[105,7637,6411],{"class":111},[105,7639,14],{"class":115},[105,7641,1160],{"class":111},[105,7643,7644],{"class":220},"\"\"",[105,7646,1282],{"class":115},[105,7648,7649,7652,7654],{"class":107,"line":2590},[105,7650,7651],{"class":115},"        p",[105,7653,2283],{"class":111},[105,7655,1282],{"class":115},[105,7657,7658],{"class":107,"line":2595},[105,7659,2178],{"class":115},[105,7661,7662],{"class":107,"line":2601},[105,7663,1556],{"class":115},[5118,7665,7666],{},"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":28,"depth":28,"links":7668},[7669,7670,7671,7672,7673,7674,7675,7676],{"id":6275,"depth":28,"text":6276},{"id":6441,"depth":28,"text":6442},{"id":6597,"depth":28,"text":6598},{"id":6675,"depth":28,"text":6676},{"id":6754,"depth":28,"text":6755},{"id":6853,"depth":28,"text":6854},{"id":7092,"depth":28,"text":7093},{"id":7270,"depth":28,"text":7271},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6264,"description":6272},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7683,"title":7684,"body":7685,"description":7692,"extension":30,"meta":10666,"navigation":32,"path":10667,"seo":10668,"stem":10669,"__hash__":10670},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7686,"toc":10657},[7687,7690,7693,7697,7700,7703,7714,8052,8055,8059,8062,8069,8324,8328,8331,8334,8489,8493,8496,8499,8705,8709,8712,9015,9018,9026,9030,9033,9184,9186,9197,9254,9258,9263,9920,9928,9931,10025,10028,10648,10654],[10,7688,7684],{"id":7689},"_4结构体",[14,7691,7692],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[47,7694,7696],{"id":7695},"_41结构体定义与使用","4.1结构体定义与使用",[14,7698,7699],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7701,7702],{},"通过结构体创建变量的方式：",[1123,7704,7705,7708,7711],{},[62,7706,7707],{},"struct 结构体名 变量名",[62,7709,7710],{},"struct 结构体名 变量名={成员1值，成员2值...}",[62,7712,7713],{},"定义结构体时顺便创建变量",[96,7715,7717],{"className":98,"code":7716,"language":100,"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",[102,7718,7719,7725,7735,7742,7747,7755,7759,7764,7768,7773,7778,7783,7790,7795,7802,7806,7813,7817,7821,7825,7829,7833,7837,7843,7847,7853,7861,7869,7873,7878,7883,7894,7899,7911,7922,7933,7938,7962,7967,7973,8000,8005,8011,8023,8035,8047],{"__ignoreMap":22},[105,7720,7721,7723],{"class":107,"line":108},[105,7722,1940],{"class":111},[105,7724,1943],{"class":220},[105,7726,7727,7729,7731,7733],{"class":107,"line":28},[105,7728,1948],{"class":111},[105,7730,1951],{"class":111},[105,7732,1955],{"class":1954},[105,7734,1282],{"class":115},[105,7736,7737,7739],{"class":107,"line":1171},[105,7738,1940],{"class":111},[105,7740,7741],{"class":220},"\u003Cstring>\n",[105,7743,7744],{"class":107,"line":1186},[105,7745,7746],{"class":174},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[105,7748,7749,7752],{"class":107,"line":1192},[105,7750,7751],{"class":111},"struct",[105,7753,7754],{"class":1954}," Student\n",[105,7756,7757],{"class":107,"line":1206},[105,7758,1537],{"class":115},[105,7760,7761],{"class":107,"line":1212},[105,7762,7763],{"class":174},"    \u002F\u002F成员列表\n",[105,7765,7766],{"class":107,"line":1303},[105,7767,2391],{"emptyLinePlaceholder":32},[105,7769,7770],{"class":107,"line":1309},[105,7771,7772],{"class":174},"    \u002F\u002F姓名\n",[105,7774,7775],{"class":107,"line":1321},[105,7776,7777],{"class":115},"    string name;\n",[105,7779,7780],{"class":107,"line":1603},[105,7781,7782],{"class":174},"    \u002F\u002F年龄\n",[105,7784,7785,7787],{"class":107,"line":1608},[105,7786,1976],{"class":111},[105,7788,7789],{"class":115}," age;\n",[105,7791,7792],{"class":107,"line":1614},[105,7793,7794],{"class":174},"    \u002F\u002F分数\n",[105,7796,7797,7799],{"class":107,"line":1619},[105,7798,1976],{"class":111},[105,7800,7801],{"class":115}," score;\n",[105,7803,7804],{"class":107,"line":1633},[105,7805,3986],{"class":115},[105,7807,7808,7810],{"class":107,"line":1638},[105,7809,7751],{"class":111},[105,7811,7812],{"class":1954}," School\n",[105,7814,7815],{"class":107,"line":1644},[105,7816,1537],{"class":115},[105,7818,7819],{"class":107,"line":1665},[105,7820,7763],{"class":174},[105,7822,7823],{"class":107,"line":1670},[105,7824,2391],{"emptyLinePlaceholder":32},[105,7826,7827],{"class":107,"line":1684},[105,7828,7772],{"class":174},[105,7830,7831],{"class":107,"line":1689},[105,7832,7777],{"class":115},[105,7834,7835],{"class":107,"line":1718},[105,7836,7782],{"class":174},[105,7838,7839,7841],{"class":107,"line":1723},[105,7840,1976],{"class":111},[105,7842,7789],{"class":115},[105,7844,7845],{"class":107,"line":1740},[105,7846,7794],{"class":174},[105,7848,7849,7851],{"class":107,"line":1745},[105,7850,1976],{"class":111},[105,7852,7801],{"class":115},[105,7854,7855,7858],{"class":107,"line":1750},[105,7856,7857],{"class":115},"} s3;",[105,7859,7860],{"class":174}," \u002F\u002F创建结构体时就创建了变量\n",[105,7862,7863,7865,7867],{"class":107,"line":1755},[105,7864,119],{"class":111},[105,7866,1964],{"class":1954},[105,7868,1967],{"class":115},[105,7870,7871],{"class":107,"line":1769},[105,7872,1537],{"class":115},[105,7874,7875],{"class":107,"line":1774},[105,7876,7877],{"class":174},"    \u002F\u002F2.通过学生类型创建具体学生\n",[105,7879,7880],{"class":107,"line":2568},[105,7881,7882],{"class":174},"    \u002F\u002F2.1 struct Student s1;\n",[105,7884,7885,7888,7891],{"class":107,"line":2582},[105,7886,7887],{"class":111},"    struct",[105,7889,7890],{"class":1954}," Student",[105,7892,7893],{"class":115}," s1;\n",[105,7895,7896],{"class":107,"line":2590},[105,7897,7898],{"class":174},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[105,7900,7901,7904,7906,7909],{"class":107,"line":2595},[105,7902,7903],{"class":115},"    s1.name",[105,7905,161],{"class":111},[105,7907,7908],{"class":220},"\"张三\"",[105,7910,1282],{"class":115},[105,7912,7913,7916,7918,7920],{"class":107,"line":2601},[105,7914,7915],{"class":115},"    s1.age",[105,7917,161],{"class":111},[105,7919,766],{"class":164},[105,7921,1282],{"class":115},[105,7923,7924,7927,7929,7931],{"class":107,"line":2607},[105,7925,7926],{"class":115},"    s1.score",[105,7928,161],{"class":111},[105,7930,370],{"class":164},[105,7932,1282],{"class":115},[105,7934,7935],{"class":107,"line":2612},[105,7936,7937],{"class":174},"    \u002F\u002F输出结果\n",[105,7939,7941,7943,7945,7948,7950,7953,7955,7958,7960],{"class":107,"line":7940},37,[105,7942,1542],{"class":115},[105,7944,1160],{"class":111},[105,7946,7947],{"class":115},"s1.name",[105,7949,1160],{"class":111},[105,7951,7952],{"class":115},"s1.age",[105,7954,1160],{"class":111},[105,7956,7957],{"class":115},"s1.score",[105,7959,1160],{"class":111},[105,7961,1183],{"class":115},[105,7963,7965],{"class":107,"line":7964},38,[105,7966,2391],{"emptyLinePlaceholder":32},[105,7968,7970],{"class":107,"line":7969},39,[105,7971,7972],{"class":174},"    \u002F\u002F2.2 struct Student s2={...}\n",[105,7974,7976,7978,7980,7983,7985,7987,7990,7992,7994,7996,7998],{"class":107,"line":7975},40,[105,7977,7887],{"class":111},[105,7979,7890],{"class":1954},[105,7981,7982],{"class":115}," s2",[105,7984,161],{"class":111},[105,7986,1012],{"class":115},[105,7988,7989],{"class":220},"\"王五\"",[105,7991,494],{"class":115},[105,7993,766],{"class":164},[105,7995,494],{"class":115},[105,7997,370],{"class":164},[105,7999,3986],{"class":115},[105,8001,8003],{"class":107,"line":8002},41,[105,8004,2391],{"emptyLinePlaceholder":32},[105,8006,8008],{"class":107,"line":8007},42,[105,8009,8010],{"class":174},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[105,8012,8014,8017,8019,8021],{"class":107,"line":8013},43,[105,8015,8016],{"class":115},"    s3.name",[105,8018,161],{"class":111},[105,8020,3669],{"class":220},[105,8022,1282],{"class":115},[105,8024,8026,8029,8031,8033],{"class":107,"line":8025},44,[105,8027,8028],{"class":115},"    s3.age",[105,8030,161],{"class":111},[105,8032,766],{"class":164},[105,8034,1282],{"class":115},[105,8036,8038,8041,8043,8045],{"class":107,"line":8037},45,[105,8039,8040],{"class":115},"    s3.score",[105,8042,161],{"class":111},[105,8044,816],{"class":164},[105,8046,1282],{"class":115},[105,8048,8050],{"class":107,"line":8049},46,[105,8051,1556],{"class":115},[14,8053,8054],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[47,8056,8058],{"id":8057},"_42结构体数组","4.2结构体数组",[14,8060,8061],{},"将自定义的结构体放入到数组中方便维护",[14,8063,8064,8065,8068],{},"语法：struct 结构体名 数组名",[105,8066,8067],{},"元素个数","={ {}，{},...{} };",[96,8070,8072],{"className":98,"code":8071,"language":100,"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",[102,8073,8074,8080,8090,8096,8101,8107,8111,8115,8121,8127,8131,8135,8143,8147,8152,8167,8171,8187,8203,8207,8212,8228,8243,8258,8263,8289,8293,8316,8320],{"__ignoreMap":22},[105,8075,8076,8078],{"class":107,"line":108},[105,8077,1940],{"class":111},[105,8079,1943],{"class":220},[105,8081,8082,8084,8086,8088],{"class":107,"line":28},[105,8083,1948],{"class":111},[105,8085,1951],{"class":111},[105,8087,1955],{"class":1954},[105,8089,1282],{"class":115},[105,8091,8092,8094],{"class":107,"line":1171},[105,8093,1940],{"class":111},[105,8095,7741],{"class":220},[105,8097,8098],{"class":107,"line":1186},[105,8099,8100],{"class":174},"\u002F\u002F1.定义结构体\n",[105,8102,8103,8105],{"class":107,"line":1192},[105,8104,7751],{"class":111},[105,8106,7754],{"class":1954},[105,8108,8109],{"class":107,"line":1206},[105,8110,1537],{"class":115},[105,8112,8113],{"class":107,"line":1212},[105,8114,7777],{"class":115},[105,8116,8117,8119],{"class":107,"line":1303},[105,8118,1976],{"class":111},[105,8120,7789],{"class":115},[105,8122,8123,8125],{"class":107,"line":1309},[105,8124,1976],{"class":111},[105,8126,7801],{"class":115},[105,8128,8129],{"class":107,"line":1321},[105,8130,2391],{"emptyLinePlaceholder":32},[105,8132,8133],{"class":107,"line":1603},[105,8134,3986],{"class":115},[105,8136,8137,8139,8141],{"class":107,"line":1608},[105,8138,119],{"class":111},[105,8140,1964],{"class":1954},[105,8142,1967],{"class":115},[105,8144,8145],{"class":107,"line":1614},[105,8146,1537],{"class":115},[105,8148,8149],{"class":107,"line":1619},[105,8150,8151],{"class":174},"    \u002F\u002F2.创建结构体数组\n",[105,8153,8154,8156,8158,8161,8163,8165],{"class":107,"line":1633},[105,8155,7887],{"class":111},[105,8157,7890],{"class":1954},[105,8159,8160],{"class":115}," stuArray[",[105,8162,193],{"class":164},[105,8164,1056],{"class":115},[105,8166,4899],{"class":111},[105,8168,8169],{"class":107,"line":1638},[105,8170,2021],{"class":115},[105,8172,8173,8175,8177,8179,8181,8183,8185],{"class":107,"line":1644},[105,8174,4908],{"class":115},[105,8176,7908],{"class":220},[105,8178,494],{"class":115},[105,8180,766],{"class":164},[105,8182,494],{"class":115},[105,8184,427],{"class":164},[105,8186,4921],{"class":115},[105,8188,8189,8191,8193,8195,8197,8199,8201],{"class":107,"line":1665},[105,8190,4908],{"class":115},[105,8192,3669],{"class":220},[105,8194,494],{"class":115},[105,8196,691],{"class":164},[105,8198,494],{"class":115},[105,8200,691],{"class":164},[105,8202,1556],{"class":115},[105,8204,8205],{"class":107,"line":1670},[105,8206,2178],{"class":115},[105,8208,8209],{"class":107,"line":1684},[105,8210,8211],{"class":174},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[105,8213,8214,8217,8219,8222,8224,8226],{"class":107,"line":1689},[105,8215,8216],{"class":115},"    stuArray[",[105,8218,333],{"class":164},[105,8220,8221],{"class":115},"].name",[105,8223,161],{"class":111},[105,8225,3692],{"class":220},[105,8227,1282],{"class":115},[105,8229,8230,8232,8234,8237,8239,8241],{"class":107,"line":1718},[105,8231,8216],{"class":115},[105,8233,333],{"class":164},[105,8235,8236],{"class":115},"].age",[105,8238,161],{"class":111},[105,8240,193],{"class":164},[105,8242,1282],{"class":115},[105,8244,8245,8247,8249,8252,8254,8256],{"class":107,"line":1723},[105,8246,8216],{"class":115},[105,8248,333],{"class":164},[105,8250,8251],{"class":115},"].score",[105,8253,161],{"class":111},[105,8255,193],{"class":164},[105,8257,1282],{"class":115},[105,8259,8260],{"class":107,"line":1740},[105,8261,8262],{"class":174},"    \u002F\u002F4.遍历结构体数组\n",[105,8264,8265,8267,8269,8271,8273,8275,8277,8279,8281,8283,8285,8287],{"class":107,"line":1745},[105,8266,3192],{"class":111},[105,8268,1649],{"class":115},[105,8270,119],{"class":111},[105,8272,3023],{"class":115},[105,8274,161],{"class":111},[105,8276,307],{"class":164},[105,8278,3030],{"class":115},[105,8280,1026],{"class":111},[105,8282,193],{"class":164},[105,8284,3030],{"class":115},[105,8286,2283],{"class":111},[105,8288,122],{"class":115},[105,8290,8291],{"class":107,"line":1750},[105,8292,2021],{"class":115},[105,8294,8295,8297,8299,8302,8304,8307,8309,8312,8314],{"class":107,"line":1755},[105,8296,3442],{"class":115},[105,8298,1160],{"class":111},[105,8300,8301],{"class":115},"stuArray[i].name",[105,8303,1160],{"class":111},[105,8305,8306],{"class":115},"stuArray[i].age",[105,8308,1160],{"class":111},[105,8310,8311],{"class":115},"stuArray[i].score",[105,8313,1160],{"class":111},[105,8315,1183],{"class":115},[105,8317,8318],{"class":107,"line":1769},[105,8319,2178],{"class":115},[105,8321,8322],{"class":107,"line":1774},[105,8323,1556],{"class":115},[47,8325,8327],{"id":8326},"_43结构体指针","4.3结构体指针",[14,8329,8330],{},"作用：通过指针访问结构体中的成员",[14,8332,8333],{},"利用操作符->可以通过结构体指针访问结构体属性",[96,8335,8337],{"className":98,"code":8336,"language":100,"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",[102,8338,8339,8345,8355,8361,8365,8371,8375,8379,8385,8391,8395,8403,8407,8412,8437,8442,8457,8462,8485],{"__ignoreMap":22},[105,8340,8341,8343],{"class":107,"line":108},[105,8342,1940],{"class":111},[105,8344,1943],{"class":220},[105,8346,8347,8349,8351,8353],{"class":107,"line":28},[105,8348,1948],{"class":111},[105,8350,1951],{"class":111},[105,8352,1955],{"class":1954},[105,8354,1282],{"class":115},[105,8356,8357,8359],{"class":107,"line":1171},[105,8358,1940],{"class":111},[105,8360,7741],{"class":220},[105,8362,8363],{"class":107,"line":1186},[105,8364,8100],{"class":174},[105,8366,8367,8369],{"class":107,"line":1192},[105,8368,7751],{"class":111},[105,8370,7754],{"class":1954},[105,8372,8373],{"class":107,"line":1206},[105,8374,1537],{"class":115},[105,8376,8377],{"class":107,"line":1212},[105,8378,7777],{"class":115},[105,8380,8381,8383],{"class":107,"line":1303},[105,8382,1976],{"class":111},[105,8384,7789],{"class":115},[105,8386,8387,8389],{"class":107,"line":1309},[105,8388,1976],{"class":111},[105,8390,7801],{"class":115},[105,8392,8393],{"class":107,"line":1321},[105,8394,3986],{"class":115},[105,8396,8397,8399,8401],{"class":107,"line":1603},[105,8398,119],{"class":111},[105,8400,1964],{"class":1954},[105,8402,1967],{"class":115},[105,8404,8405],{"class":107,"line":1608},[105,8406,1537],{"class":115},[105,8408,8409],{"class":107,"line":1614},[105,8410,8411],{"class":174},"    \u002F\u002F创建学生结构体变量\n",[105,8413,8414,8416,8418,8421,8423,8425,8427,8429,8431,8433,8435],{"class":107,"line":1619},[105,8415,7887],{"class":111},[105,8417,7890],{"class":1954},[105,8419,8420],{"class":115}," s",[105,8422,161],{"class":111},[105,8424,1012],{"class":115},[105,8426,7908],{"class":220},[105,8428,494],{"class":115},[105,8430,766],{"class":164},[105,8432,494],{"class":115},[105,8434,1713],{"class":164},[105,8436,3986],{"class":115},[105,8438,8439],{"class":107,"line":1633},[105,8440,8441],{"class":174},"    \u002F\u002F通过指针指向结构体变量\n",[105,8443,8444,8446,8448,8450,8452,8454],{"class":107,"line":1638},[105,8445,7887],{"class":111},[105,8447,7890],{"class":1954},[105,8449,6510],{"class":111},[105,8451,14],{"class":115},[105,8453,6331],{"class":111},[105,8455,8456],{"class":115},"s\n",[105,8458,8459],{"class":107,"line":1644},[105,8460,8461],{"class":174},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[105,8463,8464,8466,8468,8471,8473,8476,8478,8481,8483],{"class":107,"line":1665},[105,8465,1542],{"class":115},[105,8467,1160],{"class":111},[105,8469,8470],{"class":115},"p->name",[105,8472,1160],{"class":111},[105,8474,8475],{"class":115},"p->age",[105,8477,1160],{"class":111},[105,8479,8480],{"class":115},"p->score",[105,8482,1160],{"class":111},[105,8484,1183],{"class":115},[105,8486,8487],{"class":107,"line":1670},[105,8488,1556],{"class":115},[47,8490,8492],{"id":8491},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8494,8495],{},"作用：结构体中的成员可以是另一个结构体",[14,8497,8498],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[96,8500,8502],{"className":98,"code":8501,"language":100,"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",[102,8503,8504,8510,8520,8526,8531,8539,8543,8547,8553,8559,8563,8568,8575,8579,8586,8590,8596,8601,8605,8613,8617,8622,8627,8632,8643,8655,8666,8679,8690,8701],{"__ignoreMap":22},[105,8505,8506,8508],{"class":107,"line":108},[105,8507,1940],{"class":111},[105,8509,1943],{"class":220},[105,8511,8512,8514,8516,8518],{"class":107,"line":28},[105,8513,1948],{"class":111},[105,8515,1951],{"class":111},[105,8517,1955],{"class":1954},[105,8519,1282],{"class":115},[105,8521,8522,8524],{"class":107,"line":1171},[105,8523,1940],{"class":111},[105,8525,7741],{"class":220},[105,8527,8528],{"class":107,"line":1186},[105,8529,8530],{"class":174},"\u002F\u002F定义学生结构体\n",[105,8532,8533,8535,8537],{"class":107,"line":1192},[105,8534,7751],{"class":111},[105,8536,7890],{"class":1954},[105,8538,2665],{"class":115},[105,8540,8541],{"class":107,"line":1206},[105,8542,1537],{"class":115},[105,8544,8545],{"class":107,"line":1212},[105,8546,7777],{"class":115},[105,8548,8549,8551],{"class":107,"line":1303},[105,8550,1976],{"class":111},[105,8552,7789],{"class":115},[105,8554,8555,8557],{"class":107,"line":1309},[105,8556,1976],{"class":111},[105,8558,7801],{"class":115},[105,8560,8561],{"class":107,"line":1321},[105,8562,1556],{"class":115},[105,8564,8565],{"class":107,"line":1603},[105,8566,8567],{"class":174},"\u002F\u002F定义老师结构体\n",[105,8569,8570,8572],{"class":107,"line":1608},[105,8571,7751],{"class":111},[105,8573,8574],{"class":1954}," Teacher\n",[105,8576,8577],{"class":107,"line":1614},[105,8578,1537],{"class":115},[105,8580,8581,8583],{"class":107,"line":1619},[105,8582,1976],{"class":111},[105,8584,8585],{"class":115}," id;\n",[105,8587,8588],{"class":107,"line":1633},[105,8589,7777],{"class":115},[105,8591,8592,8594],{"class":107,"line":1638},[105,8593,1976],{"class":111},[105,8595,7789],{"class":115},[105,8597,8598],{"class":107,"line":1644},[105,8599,8600],{"class":115},"    Student stu;\n",[105,8602,8603],{"class":107,"line":1665},[105,8604,1556],{"class":115},[105,8606,8607,8609,8611],{"class":107,"line":1670},[105,8608,119],{"class":111},[105,8610,1964],{"class":1954},[105,8612,5970],{"class":115},[105,8614,8615],{"class":107,"line":1684},[105,8616,1537],{"class":115},[105,8618,8619],{"class":107,"line":1689},[105,8620,8621],{"class":174},"    \u002F\u002F结构体嵌套结构体\n",[105,8623,8624],{"class":107,"line":1718},[105,8625,8626],{"class":174},"    \u002F\u002F创建老师\n",[105,8628,8629],{"class":107,"line":1723},[105,8630,8631],{"class":115},"    Teacher t;\n",[105,8633,8634,8637,8639,8641],{"class":107,"line":1740},[105,8635,8636],{"class":115},"    t.id",[105,8638,161],{"class":111},[105,8640,427],{"class":164},[105,8642,1282],{"class":115},[105,8644,8645,8648,8650,8653],{"class":107,"line":1745},[105,8646,8647],{"class":115},"    t.name",[105,8649,161],{"class":111},[105,8651,8652],{"class":220},"\"老王\"",[105,8654,1282],{"class":115},[105,8656,8657,8660,8662,8664],{"class":107,"line":1750},[105,8658,8659],{"class":115},"    t.age",[105,8661,161],{"class":111},[105,8663,766],{"class":164},[105,8665,1282],{"class":115},[105,8667,8668,8671,8673,8676],{"class":107,"line":1755},[105,8669,8670],{"class":115},"    t.stu.name",[105,8672,161],{"class":111},[105,8674,8675],{"class":220},"\"小王\"",[105,8677,8678],{"class":115},"；\n",[105,8680,8681,8684,8686,8688],{"class":107,"line":1769},[105,8682,8683],{"class":115},"    t.stu.age",[105,8685,161],{"class":111},[105,8687,816],{"class":164},[105,8689,1282],{"class":115},[105,8691,8692,8695,8697,8699],{"class":107,"line":1774},[105,8693,8694],{"class":115},"    t.stu.score",[105,8696,161],{"class":111},[105,8698,460],{"class":164},[105,8700,1282],{"class":115},[105,8702,8703],{"class":107,"line":2568},[105,8704,1556],{"class":115},[47,8706,8708],{"id":8707},"_45结构体做函数参数","4.5结构体做函数参数",[14,8710,8711],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[96,8713,8715],{"className":98,"code":8714,"language":100,"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",[102,8716,8717,8723,8733,8739,8745,8749,8753,8759,8765,8769,8774,8779,8796,8800,8833,8837,8842,8861,8865,8896,8900,8908,8912,8921,8933,8945,8957,8970,8978,8991,9003,9011],{"__ignoreMap":22},[105,8718,8719,8721],{"class":107,"line":108},[105,8720,1940],{"class":111},[105,8722,1943],{"class":220},[105,8724,8725,8727,8729,8731],{"class":107,"line":28},[105,8726,1948],{"class":111},[105,8728,1951],{"class":111},[105,8730,1955],{"class":1954},[105,8732,1282],{"class":115},[105,8734,8735,8737],{"class":107,"line":1171},[105,8736,1940],{"class":111},[105,8738,7741],{"class":220},[105,8740,8741,8743],{"class":107,"line":1186},[105,8742,7751],{"class":111},[105,8744,7754],{"class":1954},[105,8746,8747],{"class":107,"line":1192},[105,8748,1537],{"class":115},[105,8750,8751],{"class":107,"line":1206},[105,8752,7777],{"class":115},[105,8754,8755,8757],{"class":107,"line":1212},[105,8756,1976],{"class":111},[105,8758,7789],{"class":115},[105,8760,8761,8763],{"class":107,"line":1303},[105,8762,1976],{"class":111},[105,8764,7801],{"class":115},[105,8766,8767],{"class":107,"line":1309},[105,8768,3986],{"class":115},[105,8770,8771],{"class":107,"line":1321},[105,8772,8773],{"class":174},"\u002F\u002F打印学生信息的函数\n",[105,8775,8776],{"class":107,"line":1603},[105,8777,8778],{"class":174},"\u002F\u002F值传递\n",[105,8780,8781,8783,8786,8788,8790,8792,8794],{"class":107,"line":1608},[105,8782,5356],{"class":111},[105,8784,8785],{"class":1954}," printStudent1",[105,8787,116],{"class":115},[105,8789,7751],{"class":111},[105,8791,7890],{"class":1954},[105,8793,8420],{"class":5208},[105,8795,122],{"class":115},[105,8797,8798],{"class":107,"line":1614},[105,8799,1537],{"class":115},[105,8801,8802,8804,8806,8809,8811,8814,8816,8819,8821,8823,8825,8828,8830],{"class":107,"line":1619},[105,8803,6521],{"class":115},[105,8805,1160],{"class":111},[105,8807,8808],{"class":115}," s.name ",[105,8810,1160],{"class":111},[105,8812,8813],{"class":220}," \" \"",[105,8815,1436],{"class":111},[105,8817,8818],{"class":115}," s.age ",[105,8820,1160],{"class":111},[105,8822,8813],{"class":220},[105,8824,1436],{"class":111},[105,8826,8827],{"class":115}," s.score ",[105,8829,1160],{"class":111},[105,8831,8832],{"class":115}," endl;\n",[105,8834,8835],{"class":107,"line":1633},[105,8836,1556],{"class":115},[105,8838,8839],{"class":107,"line":1638},[105,8840,8841],{"class":174},"\u002F\u002F地址传递\n",[105,8843,8844,8846,8849,8851,8853,8855,8857,8859],{"class":107,"line":1644},[105,8845,5356],{"class":111},[105,8847,8848],{"class":1954}," printStudent2",[105,8850,116],{"class":115},[105,8852,7751],{"class":111},[105,8854,7890],{"class":1954},[105,8856,6510],{"class":111},[105,8858,811],{"class":5208},[105,8860,122],{"class":115},[105,8862,8863],{"class":107,"line":1665},[105,8864,1537],{"class":115},[105,8866,8867,8869,8871,8874,8876,8878,8880,8883,8885,8887,8889,8892,8894],{"class":107,"line":1670},[105,8868,6521],{"class":115},[105,8870,1160],{"class":111},[105,8872,8873],{"class":115}," s->name ",[105,8875,1160],{"class":111},[105,8877,8813],{"class":220},[105,8879,1436],{"class":111},[105,8881,8882],{"class":115}," s->age ",[105,8884,1160],{"class":111},[105,8886,8813],{"class":220},[105,8888,1436],{"class":111},[105,8890,8891],{"class":115}," s->score ",[105,8893,1160],{"class":111},[105,8895,8832],{"class":115},[105,8897,8898],{"class":107,"line":1684},[105,8899,1556],{"class":115},[105,8901,8902,8904,8906],{"class":107,"line":1689},[105,8903,119],{"class":111},[105,8905,1964],{"class":1954},[105,8907,1967],{"class":115},[105,8909,8910],{"class":107,"line":1718},[105,8911,1537],{"class":115},[105,8913,8914,8916,8918],{"class":107,"line":1723},[105,8915,7887],{"class":111},[105,8917,7890],{"class":1954},[105,8919,8920],{"class":115}," s;\n",[105,8922,8923,8926,8928,8931],{"class":107,"line":1740},[105,8924,8925],{"class":115},"    s.name ",[105,8927,161],{"class":111},[105,8929,8930],{"class":220}," \"张三\"",[105,8932,1282],{"class":115},[105,8934,8935,8938,8940,8943],{"class":107,"line":1745},[105,8936,8937],{"class":115},"    s.age ",[105,8939,161],{"class":111},[105,8941,8942],{"class":164}," 20",[105,8944,1282],{"class":115},[105,8946,8947,8950,8952,8955],{"class":107,"line":1750},[105,8948,8949],{"class":115},"    s.score ",[105,8951,161],{"class":111},[105,8953,8954],{"class":164}," 85",[105,8956,1282],{"class":115},[105,8958,8959,8961,8963,8966,8968],{"class":107,"line":1755},[105,8960,1542],{"class":115},[105,8962,1160],{"class":111},[105,8964,8965],{"class":220},"\"值传递:\"",[105,8967,1160],{"class":111},[105,8969,1183],{"class":115},[105,8971,8972,8975],{"class":107,"line":1769},[105,8973,8974],{"class":1954},"    printStudent1",[105,8976,8977],{"class":115},"(s);\n",[105,8979,8980,8982,8984,8987,8989],{"class":107,"line":1774},[105,8981,1542],{"class":115},[105,8983,1160],{"class":111},[105,8985,8986],{"class":220},"\"地址传递:\"",[105,8988,1160],{"class":111},[105,8990,1183],{"class":115},[105,8992,8993,8996,8998,9000],{"class":107,"line":2568},[105,8994,8995],{"class":1954},"    printStudent2",[105,8997,116],{"class":115},[105,8999,469],{"class":111},[105,9001,9002],{"class":115},"s); \n",[105,9004,9005,9007,9009],{"class":107,"line":2582},[105,9006,4081],{"class":111},[105,9008,4084],{"class":164},[105,9010,1282],{"class":115},[105,9012,9013],{"class":107,"line":2590},[105,9014,1556],{"class":115},[14,9016,9017],{},"注意：",[1123,9019,9020,9023],{},[62,9021,9022],{},"1.先定义结构体，不要在函数中写结构体的定义",[62,9024,9025],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[47,9027,9029],{"id":9028},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9031,9032],{},"用const防止误操作",[96,9034,9036],{"className":98,"code":9035,"language":100,"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",[102,9037,9038,9044,9054,9060,9065,9069,9073,9079,9085,9089,9105,9109,9132,9136,9144,9148,9169,9176,9180],{"__ignoreMap":22},[105,9039,9040,9042],{"class":107,"line":108},[105,9041,1940],{"class":111},[105,9043,1943],{"class":220},[105,9045,9046,9048,9050,9052],{"class":107,"line":28},[105,9047,1948],{"class":111},[105,9049,1951],{"class":111},[105,9051,1955],{"class":1954},[105,9053,1282],{"class":115},[105,9055,9056,9058],{"class":107,"line":1171},[105,9057,1940],{"class":111},[105,9059,7741],{"class":220},[105,9061,9062],{"class":107,"line":1186},[105,9063,9064],{"class":115},"sctuct Student\n",[105,9066,9067],{"class":107,"line":1192},[105,9068,1537],{"class":115},[105,9070,9071],{"class":107,"line":1206},[105,9072,7777],{"class":115},[105,9074,9075,9077],{"class":107,"line":1212},[105,9076,1976],{"class":111},[105,9078,7789],{"class":115},[105,9080,9081,9083],{"class":107,"line":1303},[105,9082,1976],{"class":111},[105,9084,7801],{"class":115},[105,9086,9087],{"class":107,"line":1309},[105,9088,3986],{"class":115},[105,9090,9091,9093,9096,9098,9101,9103],{"class":107,"line":1321},[105,9092,5356],{"class":111},[105,9094,9095],{"class":1954}," printStudents",[105,9097,116],{"class":115},[105,9099,9100],{"class":1954},"student",[105,9102,8420],{"class":5208},[105,9104,122],{"class":115},[105,9106,9107],{"class":107,"line":1603},[105,9108,1537],{"class":115},[105,9110,9111,9113,9115,9118,9120,9123,9125,9128,9130],{"class":107,"line":1608},[105,9112,1542],{"class":115},[105,9114,1160],{"class":111},[105,9116,9117],{"class":115},"s.name",[105,9119,1160],{"class":111},[105,9121,9122],{"class":115},"s.age",[105,9124,1160],{"class":111},[105,9126,9127],{"class":115},"s.score",[105,9129,1160],{"class":111},[105,9131,1183],{"class":115},[105,9133,9134],{"class":107,"line":1614},[105,9135,1556],{"class":115},[105,9137,9138,9140,9142],{"class":107,"line":1619},[105,9139,119],{"class":111},[105,9141,1964],{"class":1954},[105,9143,5970],{"class":115},[105,9145,9146],{"class":107,"line":1633},[105,9147,1537],{"class":115},[105,9149,9150,9153,9155,9157,9159,9161,9163,9165,9167],{"class":107,"line":1638},[105,9151,9152],{"class":115},"    Student s",[105,9154,161],{"class":111},[105,9156,1012],{"class":115},[105,9158,7908],{"class":220},[105,9160,494],{"class":115},[105,9162,766],{"class":164},[105,9164,494],{"class":115},[105,9166,766],{"class":164},[105,9168,3986],{"class":115},[105,9170,9171,9174],{"class":107,"line":1644},[105,9172,9173],{"class":1954},"    printStudent",[105,9175,8977],{"class":115},[105,9177,9178],{"class":107,"line":1665},[105,9179,2391],{"emptyLinePlaceholder":32},[105,9181,9182],{"class":107,"line":1670},[105,9183,1556],{"class":115},[14,9185,9017],{},[1123,9187,9188,9191,9194],{},[62,9189,9190],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[62,9192,9193],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[62,9195,9196],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[96,9198,9200],{"className":98,"code":9199,"language":100,"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",[102,9201,9202,9221,9225,9230,9250],{"__ignoreMap":22},[105,9203,9204,9206,9208,9210,9212,9215,9217,9219],{"class":107,"line":108},[105,9205,5356],{"class":111},[105,9207,9095],{"class":1954},[105,9209,116],{"class":115},[105,9211,6784],{"class":111},[105,9213,9214],{"class":1954}," student",[105,9216,6510],{"class":111},[105,9218,811],{"class":5208},[105,9220,122],{"class":115},[105,9222,9223],{"class":107,"line":28},[105,9224,1537],{"class":115},[105,9226,9227],{"class":107,"line":1171},[105,9228,9229],{"class":174},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[105,9231,9232,9234,9236,9238,9240,9242,9244,9246,9248],{"class":107,"line":1186},[105,9233,1542],{"class":115},[105,9235,1160],{"class":111},[105,9237,9117],{"class":115},[105,9239,1160],{"class":111},[105,9241,9122],{"class":115},[105,9243,1160],{"class":111},[105,9245,9127],{"class":115},[105,9247,1160],{"class":111},[105,9249,1183],{"class":115},[105,9251,9252],{"class":107,"line":1192},[105,9253,1556],{"class":115},[47,9255,9257],{"id":9256},"_47案例","4.7案例",[59,9259,9260],{},[62,9261,9262],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[96,9264,9266],{"className":98,"code":9265,"language":100,"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",[102,9267,9268,9274,9284,9290,9297,9301,9307,9311,9316,9322,9328,9332,9336,9342,9346,9351,9356,9369,9373,9378,9404,9408,9420,9447,9451,9463,9473,9477,9482,9511,9515,9527,9536,9563,9574,9584,9588,9592,9596,9601,9625,9629,9653,9657,9676,9702,9706,9731,9754,9778,9783,9788,9793,9802,9807,9813,9834,9840,9854,9860,9887,9896,9902,9910,9915],{"__ignoreMap":22},[105,9269,9270,9272],{"class":107,"line":108},[105,9271,1940],{"class":111},[105,9273,1943],{"class":220},[105,9275,9276,9278,9280,9282],{"class":107,"line":28},[105,9277,1948],{"class":111},[105,9279,1951],{"class":111},[105,9281,1955],{"class":1954},[105,9283,1282],{"class":115},[105,9285,9286,9288],{"class":107,"line":1171},[105,9287,1940],{"class":111},[105,9289,7741],{"class":220},[105,9291,9292,9294],{"class":107,"line":1186},[105,9293,1940],{"class":111},[105,9295,9296],{"class":220},"\u003Cctime>\n",[105,9298,9299],{"class":107,"line":1192},[105,9300,8530],{"class":174},[105,9302,9303,9305],{"class":107,"line":1206},[105,9304,7751],{"class":111},[105,9306,7754],{"class":1954},[105,9308,9309],{"class":107,"line":1212},[105,9310,1537],{"class":115},[105,9312,9313],{"class":107,"line":1303},[105,9314,9315],{"class":115},"    string sName;\n",[105,9317,9318,9320],{"class":107,"line":1309},[105,9319,1976],{"class":111},[105,9321,7789],{"class":115},[105,9323,9324,9326],{"class":107,"line":1321},[105,9325,1976],{"class":111},[105,9327,7801],{"class":115},[105,9329,9330],{"class":107,"line":1603},[105,9331,3986],{"class":115},[105,9333,9334],{"class":107,"line":1608},[105,9335,8567],{"class":174},[105,9337,9338,9340],{"class":107,"line":1614},[105,9339,7751],{"class":111},[105,9341,8574],{"class":1954},[105,9343,9344],{"class":107,"line":1619},[105,9345,1537],{"class":115},[105,9347,9348],{"class":107,"line":1633},[105,9349,9350],{"class":115},"    string tName;\n",[105,9352,9353],{"class":107,"line":1638},[105,9354,9355],{"class":174},"    \u002F\u002F学生数组\n",[105,9357,9358,9360,9362,9365,9367],{"class":107,"line":1644},[105,9359,7887],{"class":111},[105,9361,7890],{"class":1954},[105,9363,9364],{"class":115}," sArray[",[105,9366,435],{"class":164},[105,9368,4681],{"class":115},[105,9370,9371],{"class":107,"line":1665},[105,9372,3986],{"class":115},[105,9374,9375],{"class":107,"line":1670},[105,9376,9377],{"class":174},"\u002F\u002F给老师和学生赋值的函数\n",[105,9379,9380,9382,9385,9387,9389,9392,9395,9398,9400,9402],{"class":107,"line":1684},[105,9381,5356],{"class":111},[105,9383,9384],{"class":1954}," allocateSpace",[105,9386,116],{"class":115},[105,9388,7751],{"class":111},[105,9390,9391],{"class":1954}," Teacher",[105,9393,9394],{"class":5208}," tArray",[105,9396,9397],{"class":115},"[],",[105,9399,119],{"class":111},[105,9401,7323],{"class":5208},[105,9403,122],{"class":115},[105,9405,9406],{"class":107,"line":1689},[105,9407,1537],{"class":115},[105,9409,9410,9413,9415,9418],{"class":107,"line":1718},[105,9411,9412],{"class":115},"    string nameSeed",[105,9414,161],{"class":111},[105,9416,9417],{"class":220},"\"ABCDE\"",[105,9419,1282],{"class":115},[105,9421,9422,9424,9426,9428,9431,9433,9435,9438,9440,9443,9445],{"class":107,"line":1723},[105,9423,3192],{"class":111},[105,9425,1649],{"class":115},[105,9427,119],{"class":111},[105,9429,9430],{"class":115}," i ",[105,9432,161],{"class":111},[105,9434,4084],{"class":164},[105,9436,9437],{"class":115},"; i ",[105,9439,1026],{"class":111},[105,9441,9442],{"class":115}," len; i",[105,9444,2283],{"class":111},[105,9446,122],{"class":115},[105,9448,9449],{"class":107,"line":1740},[105,9450,2021],{"class":115},[105,9452,9453,9456,9458,9461],{"class":107,"line":1745},[105,9454,9455],{"class":115},"        tArray[i].tName ",[105,9457,161],{"class":111},[105,9459,9460],{"class":220}," \"Teacher_\"",[105,9462,1282],{"class":115},[105,9464,9465,9467,9470],{"class":107,"line":1750},[105,9466,9455],{"class":115},[105,9468,9469],{"class":111},"+=",[105,9471,9472],{"class":115},"nameSeed[i];\n",[105,9474,9475],{"class":107,"line":1755},[105,9476,2391],{"emptyLinePlaceholder":32},[105,9478,9479],{"class":107,"line":1769},[105,9480,9481],{"class":174},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[105,9483,9484,9486,9488,9490,9493,9495,9497,9500,9502,9504,9507,9509],{"class":107,"line":1774},[105,9485,3394],{"class":111},[105,9487,1649],{"class":115},[105,9489,119],{"class":111},[105,9491,9492],{"class":115}," j ",[105,9494,161],{"class":111},[105,9496,4084],{"class":164},[105,9498,9499],{"class":115},"; j ",[105,9501,1026],{"class":111},[105,9503,2139],{"class":164},[105,9505,9506],{"class":115},"; j",[105,9508,2283],{"class":111},[105,9510,122],{"class":115},[105,9512,9513],{"class":107,"line":2568},[105,9514,2501],{"class":115},[105,9516,9517,9520,9522,9525],{"class":107,"line":2582},[105,9518,9519],{"class":115},"            tArray[i].sArray[j].sName ",[105,9521,161],{"class":111},[105,9523,9524],{"class":220}," \"Student_\"",[105,9526,1282],{"class":115},[105,9528,9529,9531,9533],{"class":107,"line":2590},[105,9530,9519],{"class":115},[105,9532,9469],{"class":111},[105,9534,9535],{"class":115}," nameSeed[j];\n",[105,9537,9538,9541,9544,9546,9548,9550,9552,9554,9556,9558,9560],{"class":107,"line":2595},[105,9539,9540],{"class":111},"            int",[105,9542,9543],{"class":115}," random",[105,9545,161],{"class":111},[105,9547,2415],{"class":1954},[105,9549,2418],{"class":115},[105,9551,444],{"class":111},[105,9553,1023],{"class":164},[105,9555,597],{"class":111},[105,9557,517],{"class":164},[105,9559,171],{"class":115},[105,9561,9562],{"class":174},"\u002F\u002F40~99\n",[105,9564,9565,9568,9570,9572],{"class":107,"line":2601},[105,9566,9567],{"class":115},"            tArray[i].sArray[j].age ",[105,9569,161],{"class":111},[105,9571,8942],{"class":164},[105,9573,1282],{"class":115},[105,9575,9576,9579,9581],{"class":107,"line":2607},[105,9577,9578],{"class":115},"            tArray[i].sArray[j].score ",[105,9580,161],{"class":111},[105,9582,9583],{"class":115}," random;\n",[105,9585,9586],{"class":107,"line":2612},[105,9587,2520],{"class":115},[105,9589,9590],{"class":107,"line":7940},[105,9591,2178],{"class":115},[105,9593,9594],{"class":107,"line":7964},[105,9595,1556],{"class":115},[105,9597,9598],{"class":107,"line":7969},[105,9599,9600],{"class":174},"\u002F\u002F打印所有信息的函数\n",[105,9602,9603,9605,9608,9610,9612,9614,9616,9619,9621,9623],{"class":107,"line":7975},[105,9604,5356],{"class":111},[105,9606,9607],{"class":1954}," printInfo",[105,9609,116],{"class":115},[105,9611,7751],{"class":111},[105,9613,9391],{"class":1954},[105,9615,9394],{"class":5208},[105,9617,9618],{"class":115},"[], ",[105,9620,119],{"class":111},[105,9622,7323],{"class":5208},[105,9624,122],{"class":115},[105,9626,9627],{"class":107,"line":8002},[105,9628,1537],{"class":115},[105,9630,9631,9633,9635,9637,9639,9641,9643,9645,9647,9649,9651],{"class":107,"line":8007},[105,9632,3192],{"class":111},[105,9634,1649],{"class":115},[105,9636,119],{"class":111},[105,9638,9430],{"class":115},[105,9640,161],{"class":111},[105,9642,4084],{"class":164},[105,9644,9437],{"class":115},[105,9646,1026],{"class":111},[105,9648,9442],{"class":115},[105,9650,2283],{"class":111},[105,9652,122],{"class":115},[105,9654,9655],{"class":107,"line":8013},[105,9656,2021],{"class":115},[105,9658,9659,9662,9664,9667,9669,9672,9674],{"class":107,"line":8025},[105,9660,9661],{"class":115},"        cout ",[105,9663,1160],{"class":111},[105,9665,9666],{"class":220}," \"Teacher: \"",[105,9668,1436],{"class":111},[105,9670,9671],{"class":115}," tArray[i].tName ",[105,9673,1160],{"class":111},[105,9675,8832],{"class":115},[105,9677,9678,9680,9682,9684,9686,9688,9690,9692,9694,9696,9698,9700],{"class":107,"line":8037},[105,9679,3394],{"class":111},[105,9681,1649],{"class":115},[105,9683,119],{"class":111},[105,9685,9492],{"class":115},[105,9687,161],{"class":111},[105,9689,4084],{"class":164},[105,9691,9499],{"class":115},[105,9693,1026],{"class":111},[105,9695,2139],{"class":164},[105,9697,9506],{"class":115},[105,9699,2283],{"class":111},[105,9701,122],{"class":115},[105,9703,9704],{"class":107,"line":8049},[105,9705,2501],{"class":115},[105,9707,9709,9712,9714,9717,9719,9722,9724,9727,9729],{"class":107,"line":9708},47,[105,9710,9711],{"class":115},"            cout ",[105,9713,1160],{"class":111},[105,9715,9716],{"class":220}," \"",[105,9718,1222],{"class":164},[105,9720,9721],{"class":220},"Student: \"",[105,9723,1436],{"class":111},[105,9725,9726],{"class":115}," tArray[i].sArray[j].sName",[105,9728,1160],{"class":111},[105,9730,1183],{"class":115},[105,9732,9734,9736,9738,9740,9742,9745,9747,9750,9752],{"class":107,"line":9733},48,[105,9735,9711],{"class":115},[105,9737,1160],{"class":111},[105,9739,9716],{"class":220},[105,9741,1222],{"class":164},[105,9743,9744],{"class":220},"Age: \"",[105,9746,1436],{"class":111},[105,9748,9749],{"class":115}," tArray[i].sArray[j].age ",[105,9751,1160],{"class":111},[105,9753,8832],{"class":115},[105,9755,9757,9759,9761,9763,9765,9768,9770,9773,9775],{"class":107,"line":9756},49,[105,9758,9711],{"class":115},[105,9760,1160],{"class":111},[105,9762,9716],{"class":220},[105,9764,1222],{"class":164},[105,9766,9767],{"class":220},"Score: \"",[105,9769,1436],{"class":111},[105,9771,9772],{"class":115}," tArray[i].sArray[j].score ",[105,9774,1160],{"class":111},[105,9776,9777],{"class":115}," endl;   \n",[105,9779,9781],{"class":107,"line":9780},50,[105,9782,2520],{"class":115},[105,9784,9786],{"class":107,"line":9785},51,[105,9787,2178],{"class":115},[105,9789,9791],{"class":107,"line":9790},52,[105,9792,1556],{"class":115},[105,9794,9796,9798,9800],{"class":107,"line":9795},53,[105,9797,119],{"class":111},[105,9799,1964],{"class":1954},[105,9801,1967],{"class":115},[105,9803,9805],{"class":107,"line":9804},54,[105,9806,1537],{"class":115},[105,9808,9810],{"class":107,"line":9809},55,[105,9811,9812],{"class":174},"    \u002F\u002F随机数种子\n",[105,9814,9816,9818,9820,9822,9824,9826,9828,9830,9832],{"class":107,"line":9815},56,[105,9817,2364],{"class":1954},[105,9819,2367],{"class":115},[105,9821,2370],{"class":111},[105,9823,2373],{"class":111},[105,9825,545],{"class":115},[105,9827,2378],{"class":1954},[105,9829,116],{"class":115},[105,9831,2383],{"class":164},[105,9833,2386],{"class":115},[105,9835,9837],{"class":107,"line":9836},57,[105,9838,9839],{"class":174},"    \u002F\u002F1.创建3名老师的数组\n",[105,9841,9843,9845,9847,9850,9852],{"class":107,"line":9842},58,[105,9844,7887],{"class":111},[105,9846,9391],{"class":1954},[105,9848,9849],{"class":115}," tArray[",[105,9851,187],{"class":164},[105,9853,4681],{"class":115},[105,9855,9857],{"class":107,"line":9856},59,[105,9858,9859],{"class":174},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[105,9861,9863,9865,9868,9870,9873,9876,9878,9880,9883,9885],{"class":107,"line":9862},60,[105,9864,1976],{"class":111},[105,9866,9867],{"class":115}," len ",[105,9869,161],{"class":111},[105,9871,9872],{"class":111}," sizeof",[105,9874,9875],{"class":115},"(tArray) ",[105,9877,700],{"class":111},[105,9879,9872],{"class":111},[105,9881,9882],{"class":115},"(tArray[",[105,9884,307],{"class":164},[105,9886,3847],{"class":115},[105,9888,9890,9893],{"class":107,"line":9889},61,[105,9891,9892],{"class":1954},"    allocateSpace",[105,9894,9895],{"class":115},"(tArray, len);\n",[105,9897,9899],{"class":107,"line":9898},62,[105,9900,9901],{"class":174},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[105,9903,9905,9908],{"class":107,"line":9904},63,[105,9906,9907],{"class":1954},"    printInfo",[105,9909,9895],{"class":115},[105,9911,9913],{"class":107,"line":9912},64,[105,9914,2391],{"emptyLinePlaceholder":32},[105,9916,9918],{"class":107,"line":9917},65,[105,9919,1556],{"class":115},[59,9921,9922],{"start":28},[62,9923,9924,9927],{},[265,9925,9926],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,9929,9930],{},"五名英雄信息如下：",[96,9932,9936],{"className":9933,"code":9934,"language":9935,"meta":22,"style":22},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[102,9937,9938,9956,9973,9990,10007],{"__ignoreMap":22},[105,9939,9940,9942,9945,9947,9949,9951,9954],{"class":107,"line":108},[105,9941,4908],{"class":115},[105,9943,9944],{"class":220},"\"刘备\"",[105,9946,494],{"class":115},[105,9948,891],{"class":164},[105,9950,494],{"class":115},[105,9952,9953],{"class":220},"\"男\"",[105,9955,4921],{"class":115},[105,9957,9958,9960,9963,9965,9967,9969,9971],{"class":107,"line":28},[105,9959,4908],{"class":115},[105,9961,9962],{"class":220},"\"关羽\"",[105,9964,494],{"class":115},[105,9966,866],{"class":164},[105,9968,494],{"class":115},[105,9970,9953],{"class":220},[105,9972,4921],{"class":115},[105,9974,9975,9977,9980,9982,9984,9986,9988],{"class":107,"line":1171},[105,9976,4908],{"class":115},[105,9978,9979],{"class":220},"\"张飞\"",[105,9981,494],{"class":115},[105,9983,816],{"class":164},[105,9985,494],{"class":115},[105,9987,9953],{"class":220},[105,9989,4921],{"class":115},[105,9991,9992,9994,9997,9999,10001,10003,10005],{"class":107,"line":1186},[105,9993,4908],{"class":115},[105,9995,9996],{"class":220},"\"赵云\"",[105,9998,494],{"class":115},[105,10000,841],{"class":164},[105,10002,494],{"class":115},[105,10004,9953],{"class":220},[105,10006,4921],{"class":115},[105,10008,10009,10011,10014,10016,10018,10020,10023],{"class":107,"line":1192},[105,10010,4908],{"class":115},[105,10012,10013],{"class":220},"\"貂蝉\"",[105,10015,494],{"class":115},[105,10017,791],{"class":164},[105,10019,494],{"class":115},[105,10021,10022],{"class":220},"\"女\"",[105,10024,4921],{"class":115},[14,10026,10027],{},"代码：",[96,10029,10031],{"className":98,"code":10030,"language":100,"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",[102,10032,10033,10039,10049,10055,10062,10066,10070,10076,10081,10085,10090,10113,10117,10142,10146,10179,10184,10213,10218,10233,10259,10279,10284,10289,10293,10297,10302,10324,10328,10352,10356,10418,10422,10426,10434,10438,10443,10454,10458,10474,10490,10506,10522,10538,10542,10562,10584,10589,10602,10609,10614,10620,10625,10638,10644],{"__ignoreMap":22},[105,10034,10035,10037],{"class":107,"line":108},[105,10036,1940],{"class":111},[105,10038,1943],{"class":220},[105,10040,10041,10043,10045,10047],{"class":107,"line":28},[105,10042,1948],{"class":111},[105,10044,1951],{"class":111},[105,10046,1955],{"class":1954},[105,10048,1282],{"class":115},[105,10050,10051,10053],{"class":107,"line":1171},[105,10052,1940],{"class":111},[105,10054,7741],{"class":220},[105,10056,10057,10059],{"class":107,"line":1186},[105,10058,7751],{"class":111},[105,10060,10061],{"class":1954}," Sanguo\n",[105,10063,10064],{"class":107,"line":1192},[105,10065,1537],{"class":115},[105,10067,10068],{"class":107,"line":1206},[105,10069,7777],{"class":115},[105,10071,10072,10074],{"class":107,"line":1212},[105,10073,1976],{"class":111},[105,10075,7789],{"class":115},[105,10077,10078],{"class":107,"line":1303},[105,10079,10080],{"class":115},"    string gender;\n",[105,10082,10083],{"class":107,"line":1309},[105,10084,3986],{"class":115},[105,10086,10087],{"class":107,"line":1321},[105,10088,10089],{"class":174},"\u002F\u002F定义排序函数\n",[105,10091,10092,10094,10096,10098,10101,10103,10105,10107,10109,10111],{"class":107,"line":1603},[105,10093,5356],{"class":111},[105,10095,7308],{"class":1954},[105,10097,116],{"class":115},[105,10099,10100],{"class":1954},"Sanguo",[105,10102,6510],{"class":111},[105,10104,811],{"class":5208},[105,10106,494],{"class":115},[105,10108,119],{"class":111},[105,10110,7323],{"class":5208},[105,10112,122],{"class":115},[105,10114,10115],{"class":107,"line":1608},[105,10116,1537],{"class":115},[105,10118,10119,10121,10123,10125,10127,10129,10131,10133,10135,10138,10140],{"class":107,"line":1614},[105,10120,3192],{"class":111},[105,10122,116],{"class":115},[105,10124,119],{"class":111},[105,10126,3023],{"class":115},[105,10128,161],{"class":111},[105,10130,307],{"class":164},[105,10132,3030],{"class":115},[105,10134,1026],{"class":111},[105,10136,10137],{"class":115},"len;i",[105,10139,2283],{"class":111},[105,10141,122],{"class":115},[105,10143,10144],{"class":107,"line":1619},[105,10145,2021],{"class":115},[105,10147,10148,10151,10153,10155,10157,10159,10161,10163,10165,10167,10169,10171,10173,10175,10177],{"class":107,"line":1633},[105,10149,10150],{"class":111},"     for",[105,10152,1649],{"class":115},[105,10154,119],{"class":111},[105,10156,3401],{"class":115},[105,10158,161],{"class":111},[105,10160,307],{"class":164},[105,10162,3408],{"class":115},[105,10164,1026],{"class":111},[105,10166,7350],{"class":115},[105,10168,648],{"class":111},[105,10170,333],{"class":164},[105,10172,648],{"class":111},[105,10174,3541],{"class":115},[105,10176,2283],{"class":111},[105,10178,122],{"class":115},[105,10180,10181],{"class":107,"line":1638},[105,10182,10183],{"class":115},"     {\n",[105,10185,10186,10189,10192,10194,10197,10199,10202,10204,10206,10208,10210],{"class":107,"line":1644},[105,10187,10188],{"class":111},"         if",[105,10190,10191],{"class":115}," ((s",[105,10193,597],{"class":111},[105,10195,10196],{"class":115},"j)->age ",[105,10198,1076],{"class":111},[105,10200,10201],{"class":115}," (s",[105,10203,597],{"class":111},[105,10205,583],{"class":115},[105,10207,597],{"class":111},[105,10209,333],{"class":164},[105,10211,10212],{"class":115},")->age)\n",[105,10214,10215],{"class":107,"line":1665},[105,10216,10217],{"class":115},"         {\n",[105,10219,10220,10223,10225,10228,10230],{"class":107,"line":1670},[105,10221,10222],{"class":115},"             Sanguo temp",[105,10224,7145],{"class":111},[105,10226,10227],{"class":115},"(s",[105,10229,597],{"class":111},[105,10231,10232],{"class":115},"j);\n",[105,10234,10235,10238,10240,10242,10245,10247,10249,10251,10253,10255,10257],{"class":107,"line":1684},[105,10236,10237],{"class":111},"             *",[105,10239,10227],{"class":115},[105,10241,597],{"class":111},[105,10243,10244],{"class":115},"j)",[105,10246,7145],{"class":111},[105,10248,10227],{"class":115},[105,10250,597],{"class":111},[105,10252,583],{"class":115},[105,10254,597],{"class":111},[105,10256,333],{"class":164},[105,10258,2710],{"class":115},[105,10260,10261,10263,10265,10267,10269,10271,10273,10275,10277],{"class":107,"line":1689},[105,10262,10237],{"class":111},[105,10264,10227],{"class":115},[105,10266,597],{"class":111},[105,10268,583],{"class":115},[105,10270,597],{"class":111},[105,10272,333],{"class":164},[105,10274,545],{"class":115},[105,10276,161],{"class":111},[105,10278,4271],{"class":115},[105,10280,10281],{"class":107,"line":1718},[105,10282,10283],{"class":115},"         }\n",[105,10285,10286],{"class":107,"line":1723},[105,10287,10288],{"class":115},"     }\n",[105,10290,10291],{"class":107,"line":1740},[105,10292,2178],{"class":115},[105,10294,10295],{"class":107,"line":1745},[105,10296,1556],{"class":115},[105,10298,10299],{"class":107,"line":1750},[105,10300,10301],{"class":174},"\u002F\u002F定义打印函数\n",[105,10303,10304,10306,10308,10310,10312,10314,10316,10318,10320,10322],{"class":107,"line":1755},[105,10305,5356],{"class":111},[105,10307,9607],{"class":1954},[105,10309,116],{"class":115},[105,10311,10100],{"class":1954},[105,10313,6510],{"class":111},[105,10315,811],{"class":5208},[105,10317,494],{"class":115},[105,10319,119],{"class":111},[105,10321,7323],{"class":5208},[105,10323,122],{"class":115},[105,10325,10326],{"class":107,"line":1769},[105,10327,1537],{"class":115},[105,10329,10330,10332,10334,10336,10338,10340,10342,10344,10346,10348,10350],{"class":107,"line":1774},[105,10331,3192],{"class":111},[105,10333,1649],{"class":115},[105,10335,119],{"class":111},[105,10337,3023],{"class":115},[105,10339,161],{"class":111},[105,10341,307],{"class":164},[105,10343,3030],{"class":115},[105,10345,1026],{"class":111},[105,10347,10137],{"class":115},[105,10349,2283],{"class":111},[105,10351,122],{"class":115},[105,10353,10354],{"class":107,"line":2568},[105,10355,2021],{"class":115},[105,10357,10358,10360,10362,10364,10366,10369,10371,10373,10375,10378,10380,10382,10384,10387,10389,10391,10393,10396,10398,10400,10402,10405,10407,10409,10411,10414,10416],{"class":107,"line":2582},[105,10359,3442],{"class":115},[105,10361,1160],{"class":111},[105,10363,367],{"class":220},[105,10365,1222],{"class":164},[105,10367,10368],{"class":220},"姓名：\"",[105,10370,1160],{"class":111},[105,10372,10227],{"class":115},[105,10374,597],{"class":111},[105,10376,10377],{"class":115},"i)->name",[105,10379,1160],{"class":111},[105,10381,367],{"class":220},[105,10383,1222],{"class":164},[105,10385,10386],{"class":220},"年龄：\"",[105,10388,1160],{"class":111},[105,10390,10227],{"class":115},[105,10392,597],{"class":111},[105,10394,10395],{"class":115},"i)->age",[105,10397,1160],{"class":111},[105,10399,367],{"class":220},[105,10401,1222],{"class":164},[105,10403,10404],{"class":220},"性别：\"",[105,10406,1160],{"class":111},[105,10408,10227],{"class":115},[105,10410,597],{"class":111},[105,10412,10413],{"class":115},"i)->gender",[105,10415,1160],{"class":111},[105,10417,1183],{"class":115},[105,10419,10420],{"class":107,"line":2590},[105,10421,2178],{"class":115},[105,10423,10424],{"class":107,"line":2595},[105,10425,1556],{"class":115},[105,10427,10428,10430,10432],{"class":107,"line":2601},[105,10429,119],{"class":111},[105,10431,1964],{"class":1954},[105,10433,1967],{"class":115},[105,10435,10436],{"class":107,"line":2607},[105,10437,1537],{"class":115},[105,10439,10440],{"class":107,"line":2612},[105,10441,10442],{"class":174},"    \u002F\u002F定义结构体变量\n",[105,10444,10445,10448,10450,10452],{"class":107,"line":7940},[105,10446,10447],{"class":115},"    Sanguo s1[",[105,10449,435],{"class":164},[105,10451,1056],{"class":115},[105,10453,4899],{"class":111},[105,10455,10456],{"class":107,"line":7964},[105,10457,2021],{"class":115},[105,10459,10460,10462,10464,10466,10468,10470,10472],{"class":107,"line":7969},[105,10461,4908],{"class":115},[105,10463,9944],{"class":220},[105,10465,494],{"class":115},[105,10467,891],{"class":164},[105,10469,494],{"class":115},[105,10471,9953],{"class":220},[105,10473,4921],{"class":115},[105,10475,10476,10478,10480,10482,10484,10486,10488],{"class":107,"line":7975},[105,10477,4908],{"class":115},[105,10479,9962],{"class":220},[105,10481,494],{"class":115},[105,10483,866],{"class":164},[105,10485,494],{"class":115},[105,10487,9953],{"class":220},[105,10489,4921],{"class":115},[105,10491,10492,10494,10496,10498,10500,10502,10504],{"class":107,"line":8002},[105,10493,4908],{"class":115},[105,10495,9979],{"class":220},[105,10497,494],{"class":115},[105,10499,816],{"class":164},[105,10501,494],{"class":115},[105,10503,9953],{"class":220},[105,10505,4921],{"class":115},[105,10507,10508,10510,10512,10514,10516,10518,10520],{"class":107,"line":8007},[105,10509,4908],{"class":115},[105,10511,9996],{"class":220},[105,10513,494],{"class":115},[105,10515,841],{"class":164},[105,10517,494],{"class":115},[105,10519,9953],{"class":220},[105,10521,4921],{"class":115},[105,10523,10524,10526,10528,10530,10532,10534,10536],{"class":107,"line":8013},[105,10525,4908],{"class":115},[105,10527,10013],{"class":220},[105,10529,494],{"class":115},[105,10531,791],{"class":164},[105,10533,494],{"class":115},[105,10535,10022],{"class":220},[105,10537,4921],{"class":115},[105,10539,10540],{"class":107,"line":8025},[105,10541,4942],{"class":115},[105,10543,10544,10546,10548,10550,10553,10555,10558,10560],{"class":107,"line":8037},[105,10545,1976],{"class":111},[105,10547,7323],{"class":115},[105,10549,4194],{"class":111},[105,10551,10552],{"class":115},"(s1)",[105,10554,4200],{"class":111},[105,10556,10557],{"class":115},"(s1[",[105,10559,307],{"class":164},[105,10561,3847],{"class":115},[105,10563,10564,10567,10569,10572,10574,10577,10580,10582],{"class":107,"line":8049},[105,10565,10566],{"class":115},"    Sanguo ",[105,10568,571],{"class":111},[105,10570,10571],{"class":115},"s ",[105,10573,161],{"class":111},[105,10575,10576],{"class":111}," &",[105,10578,10579],{"class":115},"s1[",[105,10581,307],{"class":164},[105,10583,4681],{"class":115},[105,10585,10586],{"class":107,"line":9708},[105,10587,10588],{"class":174},"    \u002F\u002F排序前：\n",[105,10590,10591,10593,10595,10598,10600],{"class":107,"line":9733},[105,10592,6521],{"class":115},[105,10594,1160],{"class":111},[105,10596,10597],{"class":220}," \"排序前：\"",[105,10599,1436],{"class":111},[105,10601,8832],{"class":115},[105,10603,10604,10606],{"class":107,"line":9756},[105,10605,9907],{"class":1954},[105,10607,10608],{"class":115},"(s,len);\n",[105,10610,10611],{"class":107,"line":9780},[105,10612,10613],{"class":174},"    \u002F\u002F调用排序函数\n",[105,10615,10616,10618],{"class":107,"line":9785},[105,10617,7590],{"class":1954},[105,10619,10608],{"class":115},[105,10621,10622],{"class":107,"line":9790},[105,10623,10624],{"class":174},"    \u002F\u002F排序后\n",[105,10626,10627,10629,10631,10634,10636],{"class":107,"line":9795},[105,10628,6521],{"class":115},[105,10630,1160],{"class":111},[105,10632,10633],{"class":220}," \"排序后：\"",[105,10635,1436],{"class":111},[105,10637,8832],{"class":115},[105,10639,10640,10642],{"class":107,"line":9804},[105,10641,9907],{"class":1954},[105,10643,10608],{"class":115},[105,10645,10646],{"class":107,"line":9809},[105,10647,1556],{"class":115},[14,10649,10650,10651,10653],{},"注意：使用指针时直接用传首地址**&s",[105,10652,307],{},"**",[5118,10655,10656],{},"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":28,"depth":28,"links":10658},[10659,10660,10661,10662,10663,10664,10665],{"id":7695,"depth":28,"text":7696},{"id":8057,"depth":28,"text":8058},{"id":8326,"depth":28,"text":8327},{"id":8491,"depth":28,"text":8492},{"id":8707,"depth":28,"text":8708},{"id":9028,"depth":28,"text":9029},{"id":9256,"depth":28,"text":9257},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7684,"description":7692},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10672,"title":10673,"body":10674,"description":22,"extension":30,"meta":12017,"navigation":32,"path":12018,"seo":12019,"stem":12020,"__hash__":12021},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10675,"toc":12011},[10676,10679,10683,10689,10703,10708,10711,10715,10722,10728,10731,10738,10744,10749,10752,10755,10758,11322,11325,11339,11343,11348,11364,11504,11507,11513,11516,11521,11529,11637,11640,11645,11648,11653,11656,11662,11665,12008],[10,10677,10673],{"id":10678},"_5程序内存模型",[47,10680,10682],{"id":10681},"_51内存分区模型","5.1内存分区模型",[14,10684,10685,10686],{},"C++程序在执行时，将内存大方向划分为",[265,10687,10688],{},"4个区域",[1123,10690,10691,10694,10697,10700],{},[62,10692,10693],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[62,10695,10696],{},"全局区：存放全局变量和静态变量以及常量",[62,10698,10699],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[62,10701,10702],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10704,10705],{},[265,10706,10707],{},"内存四区意义：",[14,10709,10710],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[76,10712,10714],{"id":10713},"_511程序运行前","5.1.1程序运行前",[14,10716,10717,10718,10721],{},"​\t在程序编译后，生成了exe可执行程序，",[265,10719,10720],{},"未执行该程序前","分为两个区域",[14,10723,10724,10725],{},"​\t",[265,10726,10727],{},"代码区：",[14,10729,10730],{},"​\t\t存放 CPU 执行的机器指令",[14,10732,10733,10734,10737],{},"​\t\t代码区是",[265,10735,10736],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10739,10733,10740,10743],{},[265,10741,10742],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10745,10724,10746],{},[265,10747,10748],{},"全局区：",[14,10750,10751],{},"​\t\t全局变量和静态变量存放在此.",[14,10753,10754],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10756,10757],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[96,10759,10761],{"className":98,"code":10760,"language":100,"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",[102,10762,10763,10768,10781,10794,10798,10803,10818,10833,10837,10846,10850,10855,10868,10881,10885,10890,10916,10942,10946,10973,10999,11003,11008,11024,11039,11043,11069,11095,11099,11124,11149,11153,11179,11205,11209,11225,11240,11266,11292,11296,11306,11310,11318],{"__ignoreMap":22},[105,10764,10765],{"class":107,"line":108},[105,10766,10767],{"class":174},"\u002F\u002F全局变量\n",[105,10769,10770,10772,10775,10777,10779],{"class":107,"line":28},[105,10771,119],{"class":111},[105,10773,10774],{"class":115}," g_a ",[105,10776,161],{"class":111},[105,10778,2029],{"class":164},[105,10780,1282],{"class":115},[105,10782,10783,10785,10788,10790,10792],{"class":107,"line":1171},[105,10784,119],{"class":111},[105,10786,10787],{"class":115}," g_b ",[105,10789,161],{"class":111},[105,10791,2029],{"class":164},[105,10793,1282],{"class":115},[105,10795,10796],{"class":107,"line":1186},[105,10797,2391],{"emptyLinePlaceholder":32},[105,10799,10800],{"class":107,"line":1192},[105,10801,10802],{"class":174},"\u002F\u002F全局常量\n",[105,10804,10805,10807,10809,10812,10814,10816],{"class":107,"line":1206},[105,10806,6784],{"class":111},[105,10808,2373],{"class":111},[105,10810,10811],{"class":115}," c_g_a ",[105,10813,161],{"class":111},[105,10815,2029],{"class":164},[105,10817,1282],{"class":115},[105,10819,10820,10822,10824,10827,10829,10831],{"class":107,"line":1212},[105,10821,6784],{"class":111},[105,10823,2373],{"class":111},[105,10825,10826],{"class":115}," c_g_b ",[105,10828,161],{"class":111},[105,10830,2029],{"class":164},[105,10832,1282],{"class":115},[105,10834,10835],{"class":107,"line":1303},[105,10836,2391],{"emptyLinePlaceholder":32},[105,10838,10839,10841,10843],{"class":107,"line":1309},[105,10840,119],{"class":111},[105,10842,1964],{"class":1954},[105,10844,10845],{"class":115},"() {\n",[105,10847,10848],{"class":107,"line":1321},[105,10849,2391],{"emptyLinePlaceholder":32},[105,10851,10852],{"class":107,"line":1603},[105,10853,10854],{"class":174},"    \u002F\u002F局部变量\n",[105,10856,10857,10859,10862,10864,10866],{"class":107,"line":1608},[105,10858,1976],{"class":111},[105,10860,10861],{"class":115}," a ",[105,10863,161],{"class":111},[105,10865,2029],{"class":164},[105,10867,1282],{"class":115},[105,10869,10870,10872,10875,10877,10879],{"class":107,"line":1614},[105,10871,1976],{"class":111},[105,10873,10874],{"class":115}," b ",[105,10876,161],{"class":111},[105,10878,2029],{"class":164},[105,10880,1282],{"class":115},[105,10882,10883],{"class":107,"line":1619},[105,10884,2391],{"emptyLinePlaceholder":32},[105,10886,10887],{"class":107,"line":1633},[105,10888,10889],{"class":174},"    \u002F\u002F打印地址\n",[105,10891,10892,10894,10896,10899,10901,10903,10905,10907,10909,10912,10914],{"class":107,"line":1638},[105,10893,6521],{"class":115},[105,10895,1160],{"class":111},[105,10897,10898],{"class":220}," \"局部变量a地址为： \"",[105,10900,1436],{"class":111},[105,10902,1649],{"class":115},[105,10904,119],{"class":111},[105,10906,545],{"class":115},[105,10908,469],{"class":111},[105,10910,10911],{"class":115},"a ",[105,10913,1160],{"class":111},[105,10915,8832],{"class":115},[105,10917,10918,10920,10922,10925,10927,10929,10931,10933,10935,10938,10940],{"class":107,"line":1644},[105,10919,6521],{"class":115},[105,10921,1160],{"class":111},[105,10923,10924],{"class":220}," \"局部变量b地址为： \"",[105,10926,1436],{"class":111},[105,10928,1649],{"class":115},[105,10930,119],{"class":111},[105,10932,545],{"class":115},[105,10934,469],{"class":111},[105,10936,10937],{"class":115},"b ",[105,10939,1160],{"class":111},[105,10941,8832],{"class":115},[105,10943,10944],{"class":107,"line":1665},[105,10945,2391],{"emptyLinePlaceholder":32},[105,10947,10948,10950,10952,10955,10957,10960,10962,10964,10966,10969,10971],{"class":107,"line":1670},[105,10949,6521],{"class":115},[105,10951,1160],{"class":111},[105,10953,10954],{"class":220}," \"全局变量g_a地址为： \"",[105,10956,1436],{"class":111},[105,10958,10959],{"class":115},"  (",[105,10961,119],{"class":111},[105,10963,545],{"class":115},[105,10965,469],{"class":111},[105,10967,10968],{"class":115},"g_a ",[105,10970,1160],{"class":111},[105,10972,8832],{"class":115},[105,10974,10975,10977,10979,10982,10984,10986,10988,10990,10992,10995,10997],{"class":107,"line":1684},[105,10976,6521],{"class":115},[105,10978,1160],{"class":111},[105,10980,10981],{"class":220}," \"全局变量g_b地址为： \"",[105,10983,1436],{"class":111},[105,10985,10959],{"class":115},[105,10987,119],{"class":111},[105,10989,545],{"class":115},[105,10991,469],{"class":111},[105,10993,10994],{"class":115},"g_b ",[105,10996,1160],{"class":111},[105,10998,8832],{"class":115},[105,11000,11001],{"class":107,"line":1689},[105,11002,2391],{"emptyLinePlaceholder":32},[105,11004,11005],{"class":107,"line":1718},[105,11006,11007],{"class":174},"    \u002F\u002F静态变量\n",[105,11009,11010,11013,11015,11018,11020,11022],{"class":107,"line":1723},[105,11011,11012],{"class":111},"    static",[105,11014,2373],{"class":111},[105,11016,11017],{"class":115}," s_a ",[105,11019,161],{"class":111},[105,11021,2029],{"class":164},[105,11023,1282],{"class":115},[105,11025,11026,11028,11030,11033,11035,11037],{"class":107,"line":1740},[105,11027,11012],{"class":111},[105,11029,2373],{"class":111},[105,11031,11032],{"class":115}," s_b ",[105,11034,161],{"class":111},[105,11036,2029],{"class":164},[105,11038,1282],{"class":115},[105,11040,11041],{"class":107,"line":1745},[105,11042,2391],{"emptyLinePlaceholder":32},[105,11044,11045,11047,11049,11052,11054,11056,11058,11060,11062,11065,11067],{"class":107,"line":1750},[105,11046,6521],{"class":115},[105,11048,1160],{"class":111},[105,11050,11051],{"class":220}," \"静态变量s_a地址为： \"",[105,11053,1436],{"class":111},[105,11055,1649],{"class":115},[105,11057,119],{"class":111},[105,11059,545],{"class":115},[105,11061,469],{"class":111},[105,11063,11064],{"class":115},"s_a ",[105,11066,1160],{"class":111},[105,11068,8832],{"class":115},[105,11070,11071,11073,11075,11078,11080,11082,11084,11086,11088,11091,11093],{"class":107,"line":1755},[105,11072,6521],{"class":115},[105,11074,1160],{"class":111},[105,11076,11077],{"class":220}," \"静态变量s_b地址为： \"",[105,11079,1436],{"class":111},[105,11081,1649],{"class":115},[105,11083,119],{"class":111},[105,11085,545],{"class":115},[105,11087,469],{"class":111},[105,11089,11090],{"class":115},"s_b ",[105,11092,1160],{"class":111},[105,11094,8832],{"class":115},[105,11096,11097],{"class":107,"line":1769},[105,11098,2391],{"emptyLinePlaceholder":32},[105,11100,11101,11103,11105,11108,11110,11112,11114,11116,11118,11120,11122],{"class":107,"line":1774},[105,11102,6521],{"class":115},[105,11104,1160],{"class":111},[105,11106,11107],{"class":220}," \"字符串常量地址为： \"",[105,11109,1436],{"class":111},[105,11111,1649],{"class":115},[105,11113,119],{"class":111},[105,11115,545],{"class":115},[105,11117,469],{"class":111},[105,11119,1178],{"class":220},[105,11121,1436],{"class":111},[105,11123,8832],{"class":115},[105,11125,11126,11128,11130,11132,11134,11136,11138,11140,11142,11145,11147],{"class":107,"line":2568},[105,11127,6521],{"class":115},[105,11129,1160],{"class":111},[105,11131,11107],{"class":220},[105,11133,1436],{"class":111},[105,11135,1649],{"class":115},[105,11137,119],{"class":111},[105,11139,545],{"class":115},[105,11141,469],{"class":111},[105,11143,11144],{"class":220},"\"hello world1\"",[105,11146,1436],{"class":111},[105,11148,8832],{"class":115},[105,11150,11151],{"class":107,"line":2582},[105,11152,2391],{"emptyLinePlaceholder":32},[105,11154,11155,11157,11159,11162,11164,11166,11168,11170,11172,11175,11177],{"class":107,"line":2590},[105,11156,6521],{"class":115},[105,11158,1160],{"class":111},[105,11160,11161],{"class":220}," \"全局常量c_g_a地址为： \"",[105,11163,1436],{"class":111},[105,11165,1649],{"class":115},[105,11167,119],{"class":111},[105,11169,545],{"class":115},[105,11171,469],{"class":111},[105,11173,11174],{"class":115},"c_g_a ",[105,11176,1160],{"class":111},[105,11178,8832],{"class":115},[105,11180,11181,11183,11185,11188,11190,11192,11194,11196,11198,11201,11203],{"class":107,"line":2595},[105,11182,6521],{"class":115},[105,11184,1160],{"class":111},[105,11186,11187],{"class":220}," \"全局常量c_g_b地址为： \"",[105,11189,1436],{"class":111},[105,11191,1649],{"class":115},[105,11193,119],{"class":111},[105,11195,545],{"class":115},[105,11197,469],{"class":111},[105,11199,11200],{"class":115},"c_g_b ",[105,11202,1160],{"class":111},[105,11204,8832],{"class":115},[105,11206,11207],{"class":107,"line":2601},[105,11208,2391],{"emptyLinePlaceholder":32},[105,11210,11211,11214,11216,11219,11221,11223],{"class":107,"line":2607},[105,11212,11213],{"class":111},"    const",[105,11215,2373],{"class":111},[105,11217,11218],{"class":115}," c_l_a ",[105,11220,161],{"class":111},[105,11222,2029],{"class":164},[105,11224,1282],{"class":115},[105,11226,11227,11229,11231,11234,11236,11238],{"class":107,"line":2612},[105,11228,11213],{"class":111},[105,11230,2373],{"class":111},[105,11232,11233],{"class":115}," c_l_b ",[105,11235,161],{"class":111},[105,11237,2029],{"class":164},[105,11239,1282],{"class":115},[105,11241,11242,11244,11246,11249,11251,11253,11255,11257,11259,11262,11264],{"class":107,"line":7940},[105,11243,6521],{"class":115},[105,11245,1160],{"class":111},[105,11247,11248],{"class":220}," \"局部常量c_l_a地址为： \"",[105,11250,1436],{"class":111},[105,11252,1649],{"class":115},[105,11254,119],{"class":111},[105,11256,545],{"class":115},[105,11258,469],{"class":111},[105,11260,11261],{"class":115},"c_l_a ",[105,11263,1160],{"class":111},[105,11265,8832],{"class":115},[105,11267,11268,11270,11272,11275,11277,11279,11281,11283,11285,11288,11290],{"class":107,"line":7964},[105,11269,6521],{"class":115},[105,11271,1160],{"class":111},[105,11273,11274],{"class":220}," \"局部常量c_l_b地址为： \"",[105,11276,1436],{"class":111},[105,11278,1649],{"class":115},[105,11280,119],{"class":111},[105,11282,545],{"class":115},[105,11284,469],{"class":111},[105,11286,11287],{"class":115},"c_l_b ",[105,11289,1160],{"class":111},[105,11291,8832],{"class":115},[105,11293,11294],{"class":107,"line":7969},[105,11295,2391],{"emptyLinePlaceholder":32},[105,11297,11298,11300,11302,11304],{"class":107,"line":7975},[105,11299,2294],{"class":1954},[105,11301,116],{"class":115},[105,11303,2299],{"class":220},[105,11305,2710],{"class":115},[105,11307,11308],{"class":107,"line":8002},[105,11309,2391],{"emptyLinePlaceholder":32},[105,11311,11312,11314,11316],{"class":107,"line":8007},[105,11313,4081],{"class":111},[105,11315,4084],{"class":164},[105,11317,1282],{"class":115},[105,11319,11320],{"class":107,"line":8013},[105,11321,1556],{"class":115},[14,11323,11324],{},"总结：",[1123,11326,11327,11330,11333,11336],{},[62,11328,11329],{},"c++中程序运行前分为全局区和代码区",[62,11331,11332],{},"代码区特点是共享和只读",[62,11334,11335],{},"全局区中存放全局变量、静态变量、常量",[62,11337,11338],{},"常量区中存放const修饰的全局常量和字符串常量",[76,11340,11342],{"id":11341},"_512程序运行后","5.1.2程序运行后",[59,11344,11345],{},[62,11346,11347],{},"栈区：",[1123,11349,11350,11357],{},[62,11351,11352,11353,11356],{},"由编译器自动分配释放, 存放",[265,11354,11355],{},"函数的参数值,局部变量","等",[62,11358,11359,11360,11363],{},"注意事项：",[265,11361,11362],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[96,11365,11367],{"className":98,"code":11366,"language":100,"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",[102,11368,11369,11380,11384,11399,11411,11415,11419,11427,11432,11447,11465,11482,11492,11500],{"__ignoreMap":22},[105,11370,11371,11373,11375,11378],{"class":107,"line":108},[105,11372,119],{"class":111},[105,11374,6510],{"class":111},[105,11376,11377],{"class":1954}," func",[105,11379,1967],{"class":115},[105,11381,11382],{"class":107,"line":28},[105,11383,1537],{"class":115},[105,11385,11386,11388,11390,11392,11394,11396],{"class":107,"line":1171},[105,11387,1976],{"class":111},[105,11389,10861],{"class":115},[105,11391,161],{"class":111},[105,11393,2029],{"class":164},[105,11395,171],{"class":115},[105,11397,11398],{"class":174}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[105,11400,11401,11403,11405,11408],{"class":107,"line":1186},[105,11402,4081],{"class":111},[105,11404,10576],{"class":111},[105,11406,11407],{"class":115},"a;",[105,11409,11410],{"class":174}," \u002F\u002F放回局部变量的地址\n",[105,11412,11413],{"class":107,"line":1192},[105,11414,1556],{"class":115},[105,11416,11417],{"class":107,"line":1206},[105,11418,2391],{"emptyLinePlaceholder":32},[105,11420,11421,11423,11425],{"class":107,"line":1212},[105,11422,119],{"class":111},[105,11424,1964],{"class":1954},[105,11426,10845],{"class":115},[105,11428,11429],{"class":107,"line":1303},[105,11430,11431],{"class":174},"    \u002F\u002F接受func的返回值\n",[105,11433,11434,11436,11438,11441,11443,11445],{"class":107,"line":1309},[105,11435,1976],{"class":111},[105,11437,6510],{"class":111},[105,11439,11440],{"class":115},"p ",[105,11442,161],{"class":111},[105,11444,11377],{"class":1954},[105,11446,5628],{"class":115},[105,11448,11449,11451,11453,11455,11457,11459,11462],{"class":107,"line":1321},[105,11450,6521],{"class":115},[105,11452,1160],{"class":111},[105,11454,6510],{"class":111},[105,11456,11440],{"class":115},[105,11458,1160],{"class":111},[105,11460,11461],{"class":115}," endl;",[105,11463,11464],{"class":174}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[105,11466,11467,11469,11471,11473,11475,11477,11479],{"class":107,"line":1603},[105,11468,6521],{"class":115},[105,11470,1160],{"class":111},[105,11472,6510],{"class":111},[105,11474,11440],{"class":115},[105,11476,1160],{"class":111},[105,11478,11461],{"class":115},[105,11480,11481],{"class":174}," \u002F\u002F第二次这个数据不再保留\n",[105,11483,11484,11486,11488,11490],{"class":107,"line":1608},[105,11485,2294],{"class":1954},[105,11487,116],{"class":115},[105,11489,2299],{"class":220},[105,11491,2710],{"class":115},[105,11493,11494,11496,11498],{"class":107,"line":1614},[105,11495,4081],{"class":111},[105,11497,4084],{"class":164},[105,11499,1282],{"class":115},[105,11501,11502],{"class":107,"line":1619},[105,11503,1556],{"class":115},[14,11505,11506],{},"输出结果：",[14,11508,11509],{},[20,11510],{"alt":11511,"src":11512},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11514,11515],{},"总结：不要返回局部变量的地址",[59,11517,11518],{"start":28},[62,11519,11520],{},"堆区",[1123,11522,11523,11526],{},[62,11524,11525],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[62,11527,11528],{},"在c++中主要利用new在堆区开辟内存",[96,11530,11532],{"className":98,"code":11531,"language":100,"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",[102,11533,11534,11549,11553,11558,11579,11586,11590,11598,11602,11607,11621,11633],{"__ignoreMap":22},[105,11535,11536,11538,11541,11544,11546],{"class":107,"line":108},[105,11537,119],{"class":111},[105,11539,11540],{"class":111},"  *",[105,11542,11543],{"class":1954},"func",[105,11545,2418],{"class":115},[105,11547,11548],{"class":174},"  \u002F\u002F函数返回指针\n",[105,11550,11551],{"class":107,"line":28},[105,11552,1537],{"class":115},[105,11554,11555],{"class":107,"line":1171},[105,11556,11557],{"class":174},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[105,11559,11560,11562,11564,11566,11568,11571,11573,11575,11577],{"class":107,"line":1186},[105,11561,4138],{"class":111},[105,11563,6510],{"class":111},[105,11565,14],{"class":115},[105,11567,161],{"class":111},[105,11569,11570],{"class":111}," new",[105,11572,2373],{"class":111},[105,11574,116],{"class":115},[105,11576,562],{"class":164},[105,11578,2710],{"class":115},[105,11580,11581,11583],{"class":107,"line":1192},[105,11582,4372],{"class":111},[105,11584,11585],{"class":115}," p;\n",[105,11587,11588],{"class":107,"line":1206},[105,11589,1556],{"class":115},[105,11591,11592,11594,11596],{"class":107,"line":1212},[105,11593,119],{"class":111},[105,11595,1964],{"class":1954},[105,11597,1967],{"class":115},[105,11599,11600],{"class":107,"line":1303},[105,11601,1537],{"class":115},[105,11603,11604],{"class":107,"line":1309},[105,11605,11606],{"class":174},"    \u002F\u002F在堆区开辟数据\n",[105,11608,11609,11611,11613,11615,11617,11619],{"class":107,"line":1321},[105,11610,1976],{"class":111},[105,11612,6510],{"class":111},[105,11614,14],{"class":115},[105,11616,161],{"class":111},[105,11618,11543],{"class":1954},[105,11620,5628],{"class":115},[105,11622,11623,11625,11627,11629,11631],{"class":107,"line":1603},[105,11624,1542],{"class":115},[105,11626,6411],{"class":111},[105,11628,14],{"class":115},[105,11630,1160],{"class":111},[105,11632,1183],{"class":115},[105,11634,11635],{"class":107,"line":1608},[105,11636,1556],{"class":115},[14,11638,11639],{},"图片展示：",[14,11641,11642],{},[20,11643],{"alt":11511,"src":11644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11646,11647],{},"堆区内存由程序员管生死！！！",[59,11649,11650],{"start":1171},[62,11651,11652],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11654,11655],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11657,11658,11659],{},"​语法：",[102,11660,11661],{}," new 数据类型",[14,11663,11664],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[96,11666,11668],{"className":98,"code":11667,"language":100,"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",[102,11669,11670,11675,11685,11689,11694,11699,11721,11725,11733,11737,11751,11763,11775,11787,11792,11797,11808,11812,11817,11825,11829,11834,11856,11882,11886,11904,11908,11934,11938,11950,11954,11959,11964,11972,11976,11980,11988,11992,11998,12004],{"__ignoreMap":22},[105,11671,11672],{"class":107,"line":108},[105,11673,11674],{"class":174},"\u002F\u002F1.new的基本语法\n",[105,11676,11677,11679,11681,11683],{"class":107,"line":28},[105,11678,119],{"class":111},[105,11680,6510],{"class":111},[105,11682,11543],{"class":1954},[105,11684,1967],{"class":115},[105,11686,11687],{"class":107,"line":1171},[105,11688,1537],{"class":115},[105,11690,11691],{"class":107,"line":1186},[105,11692,11693],{"class":174},"    \u002F\u002F在堆区创建整型数据\n",[105,11695,11696],{"class":107,"line":1192},[105,11697,11698],{"class":174},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[105,11700,11701,11703,11705,11707,11710,11712,11714,11716,11718],{"class":107,"line":1206},[105,11702,1976],{"class":111},[105,11704,6510],{"class":111},[105,11706,14],{"class":115},[105,11708,11709],{"class":111},"=new",[105,11711,2373],{"class":111},[105,11713,116],{"class":115},[105,11715,562],{"class":164},[105,11717,5958],{"class":115},[105,11719,11720],{"class":174},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[105,11722,11723],{"class":107,"line":1212},[105,11724,1556],{"class":115},[105,11726,11727,11729,11731],{"class":107,"line":1303},[105,11728,5356],{"class":111},[105,11730,5580],{"class":1954},[105,11732,1967],{"class":115},[105,11734,11735],{"class":107,"line":1309},[105,11736,1537],{"class":115},[105,11738,11739,11741,11743,11745,11747,11749],{"class":107,"line":1321},[105,11740,1976],{"class":111},[105,11742,6510],{"class":111},[105,11744,14],{"class":115},[105,11746,161],{"class":111},[105,11748,11543],{"class":1954},[105,11750,5628],{"class":115},[105,11752,11753,11755,11757,11759,11761],{"class":107,"line":1603},[105,11754,1542],{"class":115},[105,11756,6411],{"class":111},[105,11758,14],{"class":115},[105,11760,1160],{"class":111},[105,11762,1183],{"class":115},[105,11764,11765,11767,11769,11771,11773],{"class":107,"line":1608},[105,11766,1542],{"class":115},[105,11768,6411],{"class":111},[105,11770,14],{"class":115},[105,11772,1160],{"class":111},[105,11774,1183],{"class":115},[105,11776,11777,11779,11781,11783,11785],{"class":107,"line":1614},[105,11778,1542],{"class":115},[105,11780,6411],{"class":111},[105,11782,14],{"class":115},[105,11784,1160],{"class":111},[105,11786,1183],{"class":115},[105,11788,11789],{"class":107,"line":1619},[105,11790,11791],{"class":174},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[105,11793,11794],{"class":107,"line":1633},[105,11795,11796],{"class":174},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[105,11798,11799,11802,11805],{"class":107,"line":1638},[105,11800,11801],{"class":111},"    delete",[105,11803,11804],{"class":115}," p;",[105,11806,11807],{"class":174},"\u002F\u002F删除这块地址\n",[105,11809,11810],{"class":107,"line":1644},[105,11811,1556],{"class":115},[105,11813,11814],{"class":107,"line":1665},[105,11815,11816],{"class":174},"\u002F\u002F2.在堆区利用new开辟数组\n",[105,11818,11819,11821,11823],{"class":107,"line":1670},[105,11820,5356],{"class":111},[105,11822,5649],{"class":1954},[105,11824,1967],{"class":115},[105,11826,11827],{"class":107,"line":1684},[105,11828,1537],{"class":115},[105,11830,11831],{"class":107,"line":1689},[105,11832,11833],{"class":174},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[105,11835,11836,11838,11840,11842,11844,11846,11848,11850,11853],{"class":107,"line":1718},[105,11837,1976],{"class":111},[105,11839,6510],{"class":111},[105,11841,3871],{"class":115},[105,11843,11709],{"class":111},[105,11845,2373],{"class":111},[105,11847,1006],{"class":115},[105,11849,562],{"class":164},[105,11851,11852],{"class":115},"];",[105,11854,11855],{"class":174},"\u002F\u002F10代表数组有10个元素\n",[105,11857,11858,11860,11862,11864,11866,11868,11870,11872,11874,11876,11878,11880],{"class":107,"line":1723},[105,11859,3192],{"class":111},[105,11861,1649],{"class":115},[105,11863,119],{"class":111},[105,11865,3023],{"class":115},[105,11867,161],{"class":111},[105,11869,307],{"class":164},[105,11871,3030],{"class":115},[105,11873,1026],{"class":111},[105,11875,562],{"class":164},[105,11877,3030],{"class":115},[105,11879,2283],{"class":111},[105,11881,122],{"class":115},[105,11883,11884],{"class":107,"line":1740},[105,11885,2021],{"class":115},[105,11887,11888,11891,11893,11895,11897,11899,11901],{"class":107,"line":1745},[105,11889,11890],{"class":115},"        arr[i]",[105,11892,161],{"class":111},[105,11894,557],{"class":115},[105,11896,597],{"class":111},[105,11898,427],{"class":164},[105,11900,171],{"class":115},[105,11902,11903],{"class":174},"\u002F\u002F给10个元素赋值100～109\n",[105,11905,11906],{"class":107,"line":1750},[105,11907,2178],{"class":115},[105,11909,11910,11912,11914,11916,11918,11920,11922,11924,11926,11928,11930,11932],{"class":107,"line":1755},[105,11911,3192],{"class":111},[105,11913,1649],{"class":115},[105,11915,119],{"class":111},[105,11917,3023],{"class":115},[105,11919,161],{"class":111},[105,11921,307],{"class":164},[105,11923,3030],{"class":115},[105,11925,1026],{"class":111},[105,11927,562],{"class":164},[105,11929,3030],{"class":115},[105,11931,2283],{"class":111},[105,11933,122],{"class":115},[105,11935,11936],{"class":107,"line":1769},[105,11937,2021],{"class":115},[105,11939,11940,11942,11944,11946,11948],{"class":107,"line":1774},[105,11941,3442],{"class":115},[105,11943,1160],{"class":111},[105,11945,4345],{"class":115},[105,11947,1160],{"class":111},[105,11949,1183],{"class":115},[105,11951,11952],{"class":107,"line":2568},[105,11953,2178],{"class":115},[105,11955,11956],{"class":107,"line":2582},[105,11957,11958],{"class":174},"    \u002F\u002F释放堆区数组\n",[105,11960,11961],{"class":107,"line":2590},[105,11962,11963],{"class":174},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[105,11965,11966,11969],{"class":107,"line":2595},[105,11967,11968],{"class":111},"    delete[]",[105,11970,11971],{"class":115}," arr;\n",[105,11973,11974],{"class":107,"line":2601},[105,11975,1556],{"class":115},[105,11977,11978],{"class":107,"line":2607},[105,11979,2391],{"emptyLinePlaceholder":32},[105,11981,11982,11984,11986],{"class":107,"line":2612},[105,11983,119],{"class":111},[105,11985,1964],{"class":1954},[105,11987,1967],{"class":115},[105,11989,11990],{"class":107,"line":7940},[105,11991,1537],{"class":115},[105,11993,11994,11996],{"class":107,"line":7964},[105,11995,5625],{"class":1954},[105,11997,5628],{"class":115},[105,11999,12000,12002],{"class":107,"line":7969},[105,12001,5694],{"class":1954},[105,12003,5628],{"class":115},[105,12005,12006],{"class":107,"line":7975},[105,12007,1556],{"class":115},[5118,12009,12010],{},"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":28,"depth":28,"links":12012},[12013],{"id":10681,"depth":28,"text":10682,"children":12014},[12015,12016],{"id":10713,"depth":1171,"text":10714},{"id":11341,"depth":1171,"text":11342},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10673,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12023,"title":12024,"body":12025,"description":22,"extension":30,"meta":13506,"navigation":32,"path":13507,"seo":13508,"stem":13509,"__hash__":13510},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12026,"toc":13498},[12027,12030,12034,12037,12040,12209,12213,12218,12235,12240,12392,12396,12399,12402,12796,12800,12803,12808,12811,13123,13127,13133,13293,13295,13303,13307,13310,13317,13495],[10,12028,12024],{"id":12029},"_6引用",[47,12031,12033],{"id":12032},"_61引用基本用法","6.1引用基本用法",[14,12035,12036],{},"引用的本质：给变量起别名",[14,12038,12039],{},"语法：数据类型 &别名=原名",[96,12041,12043],{"className":98,"code":12042,"language":100,"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",[102,12044,12045,12053,12057,12069,12081,12085,12104,12123,12127,12138,12142,12161,12179,12183,12193,12197,12205],{"__ignoreMap":22},[105,12046,12047,12049,12051],{"class":107,"line":108},[105,12048,119],{"class":111},[105,12050,1964],{"class":1954},[105,12052,10845],{"class":115},[105,12054,12055],{"class":107,"line":28},[105,12056,2391],{"emptyLinePlaceholder":32},[105,12058,12059,12061,12063,12065,12067],{"class":107,"line":1171},[105,12060,1976],{"class":111},[105,12062,10861],{"class":115},[105,12064,161],{"class":111},[105,12066,2029],{"class":164},[105,12068,1282],{"class":115},[105,12070,12071,12073,12075,12077,12079],{"class":107,"line":1186},[105,12072,1976],{"class":111},[105,12074,10576],{"class":111},[105,12076,10937],{"class":115},[105,12078,161],{"class":111},[105,12080,1424],{"class":115},[105,12082,12083],{"class":107,"line":1192},[105,12084,2391],{"emptyLinePlaceholder":32},[105,12086,12087,12089,12091,12094,12096,12098,12100,12102],{"class":107,"line":1206},[105,12088,6521],{"class":115},[105,12090,1160],{"class":111},[105,12092,12093],{"class":220}," \"a = \"",[105,12095,1436],{"class":111},[105,12097,10861],{"class":115},[105,12099,1160],{"class":111},[105,12101,11461],{"class":115},[105,12103,7260],{"class":174},[105,12105,12106,12108,12110,12113,12115,12117,12119,12121],{"class":107,"line":1212},[105,12107,6521],{"class":115},[105,12109,1160],{"class":111},[105,12111,12112],{"class":220}," \"b = \"",[105,12114,1436],{"class":111},[105,12116,10874],{"class":115},[105,12118,1160],{"class":111},[105,12120,11461],{"class":115},[105,12122,7260],{"class":174},[105,12124,12125],{"class":107,"line":1303},[105,12126,2391],{"emptyLinePlaceholder":32},[105,12128,12129,12132,12134,12136],{"class":107,"line":1309},[105,12130,12131],{"class":115},"    b ",[105,12133,161],{"class":111},[105,12135,5746],{"class":164},[105,12137,1282],{"class":115},[105,12139,12140],{"class":107,"line":1321},[105,12141,2391],{"emptyLinePlaceholder":32},[105,12143,12144,12146,12148,12150,12152,12154,12156,12158],{"class":107,"line":1603},[105,12145,6521],{"class":115},[105,12147,1160],{"class":111},[105,12149,12093],{"class":220},[105,12151,1436],{"class":111},[105,12153,10861],{"class":115},[105,12155,1160],{"class":111},[105,12157,11461],{"class":115},[105,12159,12160],{"class":174},"\u002F\u002F100\n",[105,12162,12163,12165,12167,12169,12171,12173,12175,12177],{"class":107,"line":1608},[105,12164,6521],{"class":115},[105,12166,1160],{"class":111},[105,12168,12112],{"class":220},[105,12170,1436],{"class":111},[105,12172,10874],{"class":115},[105,12174,1160],{"class":111},[105,12176,11461],{"class":115},[105,12178,12160],{"class":174},[105,12180,12181],{"class":107,"line":1614},[105,12182,2391],{"emptyLinePlaceholder":32},[105,12184,12185,12187,12189,12191],{"class":107,"line":1619},[105,12186,2294],{"class":1954},[105,12188,116],{"class":115},[105,12190,2299],{"class":220},[105,12192,2710],{"class":115},[105,12194,12195],{"class":107,"line":1633},[105,12196,2391],{"emptyLinePlaceholder":32},[105,12198,12199,12201,12203],{"class":107,"line":1638},[105,12200,4081],{"class":111},[105,12202,4084],{"class":164},[105,12204,1282],{"class":115},[105,12206,12207],{"class":107,"line":1644},[105,12208,1556],{"class":115},[47,12210,12212],{"id":12211},"_62引用的注意事项","6.2引用的注意事项",[59,12214,12215],{},[62,12216,12217],{},"引用必须要初始化",[96,12219,12221],{"className":98,"code":12220,"language":100,"meta":22,"style":22},"int &b;\u002F\u002F非常错误！\n",[102,12222,12223],{"__ignoreMap":22},[105,12224,12225,12227,12229,12232],{"class":107,"line":108},[105,12226,119],{"class":111},[105,12228,10576],{"class":111},[105,12230,12231],{"class":115},"b;",[105,12233,12234],{"class":174},"\u002F\u002F非常错误！\n",[59,12236,12237],{"start":28},[62,12238,12239],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[96,12241,12243],{"className":98,"code":12242,"language":100,"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",[102,12244,12245,12253,12265,12277,12285,12301,12314,12332,12350,12370,12380,12388],{"__ignoreMap":22},[105,12246,12247,12249,12251],{"class":107,"line":108},[105,12248,119],{"class":111},[105,12250,1964],{"class":1954},[105,12252,10845],{"class":115},[105,12254,12255,12257,12259,12261,12263],{"class":107,"line":28},[105,12256,1976],{"class":111},[105,12258,10861],{"class":115},[105,12260,161],{"class":111},[105,12262,2029],{"class":164},[105,12264,1282],{"class":115},[105,12266,12267,12269,12271,12273,12275],{"class":107,"line":1171},[105,12268,1976],{"class":111},[105,12270,10874],{"class":115},[105,12272,161],{"class":111},[105,12274,8942],{"class":164},[105,12276,1282],{"class":115},[105,12278,12279,12282],{"class":107,"line":1186},[105,12280,12281],{"class":174},"    \u002F\u002Fint &c;",[105,12283,12284],{"class":174}," \u002F\u002F错误，引用必须初始化\n",[105,12286,12287,12289,12291,12293,12295,12298],{"class":107,"line":1192},[105,12288,1976],{"class":111},[105,12290,10576],{"class":111},[105,12292,2937],{"class":115},[105,12294,161],{"class":111},[105,12296,12297],{"class":115}," a;",[105,12299,12300],{"class":174}," \u002F\u002F一旦初始化后，就不可以更改\n",[105,12302,12303,12306,12308,12311],{"class":107,"line":1206},[105,12304,12305],{"class":115},"    c ",[105,12307,161],{"class":111},[105,12309,12310],{"class":115}," b;",[105,12312,12313],{"class":174}," \u002F\u002F这是赋值操作，不是更改引用\n",[105,12315,12316,12318,12320,12322,12324,12326,12328,12330],{"class":107,"line":1212},[105,12317,6521],{"class":115},[105,12319,1160],{"class":111},[105,12321,12093],{"class":220},[105,12323,1436],{"class":111},[105,12325,10861],{"class":115},[105,12327,1160],{"class":111},[105,12329,11461],{"class":115},[105,12331,7245],{"class":174},[105,12333,12334,12336,12338,12340,12342,12344,12346,12348],{"class":107,"line":1303},[105,12335,6521],{"class":115},[105,12337,1160],{"class":111},[105,12339,12112],{"class":220},[105,12341,1436],{"class":111},[105,12343,10874],{"class":115},[105,12345,1160],{"class":111},[105,12347,11461],{"class":115},[105,12349,7245],{"class":174},[105,12351,12352,12354,12356,12359,12361,12364,12366,12368],{"class":107,"line":1309},[105,12353,6521],{"class":115},[105,12355,1160],{"class":111},[105,12357,12358],{"class":220}," \"c = \"",[105,12360,1436],{"class":111},[105,12362,12363],{"class":115}," c ",[105,12365,1160],{"class":111},[105,12367,11461],{"class":115},[105,12369,7245],{"class":174},[105,12371,12372,12374,12376,12378],{"class":107,"line":1321},[105,12373,2294],{"class":1954},[105,12375,116],{"class":115},[105,12377,2299],{"class":220},[105,12379,2710],{"class":115},[105,12381,12382,12384,12386],{"class":107,"line":1603},[105,12383,4081],{"class":111},[105,12385,4084],{"class":164},[105,12387,1282],{"class":115},[105,12389,12390],{"class":107,"line":1608},[105,12391,1556],{"class":115},[47,12393,12395],{"id":12394},"_63引用做函数参数","6.3引用做函数参数",[14,12397,12398],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12400,12401],{},"优点：可以简化指针修改实参",[96,12403,12405],{"className":98,"code":12404,"language":100,"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",[102,12406,12407,12412,12435,12446,12456,12465,12469,12473,12478,12500,12512,12524,12534,12538,12542,12547,12569,12579,12587,12595,12599,12603,12611,12615,12627,12639,12643,12654,12680,12684,12704,12728,12732,12742,12766,12770,12780,12784,12792],{"__ignoreMap":22},[105,12408,12409],{"class":107,"line":108},[105,12410,12411],{"class":174},"\u002F\u002F1. 值传递\n",[105,12413,12414,12416,12419,12421,12423,12425,12428,12430,12432],{"class":107,"line":28},[105,12415,5356],{"class":111},[105,12417,12418],{"class":1954}," mySwap01",[105,12420,116],{"class":115},[105,12422,119],{"class":111},[105,12424,1390],{"class":5208},[105,12426,12427],{"class":115},", ",[105,12429,119],{"class":111},[105,12431,2824],{"class":5208},[105,12433,12434],{"class":115},") {\n",[105,12436,12437,12439,12442,12444],{"class":107,"line":1171},[105,12438,1976],{"class":111},[105,12440,12441],{"class":115}," temp ",[105,12443,161],{"class":111},[105,12445,1424],{"class":115},[105,12447,12448,12451,12453],{"class":107,"line":1186},[105,12449,12450],{"class":115},"    a ",[105,12452,161],{"class":111},[105,12454,12455],{"class":115}," b;\n",[105,12457,12458,12460,12462],{"class":107,"line":1192},[105,12459,12131],{"class":115},[105,12461,161],{"class":111},[105,12463,12464],{"class":115}," temp;\n",[105,12466,12467],{"class":107,"line":1206},[105,12468,1556],{"class":115},[105,12470,12471],{"class":107,"line":1212},[105,12472,2391],{"emptyLinePlaceholder":32},[105,12474,12475],{"class":107,"line":1303},[105,12476,12477],{"class":174},"\u002F\u002F2. 地址传递\n",[105,12479,12480,12482,12485,12487,12490,12492,12494,12496,12498],{"class":107,"line":1309},[105,12481,5356],{"class":111},[105,12483,12484],{"class":1954}," mySwap02",[105,12486,116],{"class":115},[105,12488,12489],{"class":111},"int*",[105,12491,1390],{"class":5208},[105,12493,12427],{"class":115},[105,12495,12489],{"class":111},[105,12497,2824],{"class":5208},[105,12499,12434],{"class":115},[105,12501,12502,12504,12506,12508,12510],{"class":107,"line":1321},[105,12503,1976],{"class":111},[105,12505,12441],{"class":115},[105,12507,161],{"class":111},[105,12509,6510],{"class":111},[105,12511,6189],{"class":115},[105,12513,12514,12516,12518,12520,12522],{"class":107,"line":1603},[105,12515,6395],{"class":111},[105,12517,10911],{"class":115},[105,12519,161],{"class":111},[105,12521,6510],{"class":111},[105,12523,6061],{"class":115},[105,12525,12526,12528,12530,12532],{"class":107,"line":1608},[105,12527,6395],{"class":111},[105,12529,10937],{"class":115},[105,12531,161],{"class":111},[105,12533,12464],{"class":115},[105,12535,12536],{"class":107,"line":1614},[105,12537,1556],{"class":115},[105,12539,12540],{"class":107,"line":1619},[105,12541,2391],{"emptyLinePlaceholder":32},[105,12543,12544],{"class":107,"line":1633},[105,12545,12546],{"class":174},"\u002F\u002F3. 引用传递\n",[105,12548,12549,12551,12554,12556,12559,12561,12563,12565,12567],{"class":107,"line":1638},[105,12550,5356],{"class":111},[105,12552,12553],{"class":1954}," mySwap03",[105,12555,116],{"class":115},[105,12557,12558],{"class":111},"int&",[105,12560,1390],{"class":5208},[105,12562,12427],{"class":115},[105,12564,12558],{"class":111},[105,12566,2824],{"class":5208},[105,12568,12434],{"class":115},[105,12570,12571,12573,12575,12577],{"class":107,"line":1644},[105,12572,1976],{"class":111},[105,12574,12441],{"class":115},[105,12576,161],{"class":111},[105,12578,1424],{"class":115},[105,12580,12581,12583,12585],{"class":107,"line":1665},[105,12582,12450],{"class":115},[105,12584,161],{"class":111},[105,12586,12455],{"class":115},[105,12588,12589,12591,12593],{"class":107,"line":1670},[105,12590,12131],{"class":115},[105,12592,161],{"class":111},[105,12594,12464],{"class":115},[105,12596,12597],{"class":107,"line":1684},[105,12598,1556],{"class":115},[105,12600,12601],{"class":107,"line":1689},[105,12602,2391],{"emptyLinePlaceholder":32},[105,12604,12605,12607,12609],{"class":107,"line":1718},[105,12606,119],{"class":111},[105,12608,1964],{"class":1954},[105,12610,10845],{"class":115},[105,12612,12613],{"class":107,"line":1723},[105,12614,2391],{"emptyLinePlaceholder":32},[105,12616,12617,12619,12621,12623,12625],{"class":107,"line":1740},[105,12618,1976],{"class":111},[105,12620,10861],{"class":115},[105,12622,161],{"class":111},[105,12624,2029],{"class":164},[105,12626,1282],{"class":115},[105,12628,12629,12631,12633,12635,12637],{"class":107,"line":1745},[105,12630,1976],{"class":111},[105,12632,10874],{"class":115},[105,12634,161],{"class":111},[105,12636,8942],{"class":164},[105,12638,1282],{"class":115},[105,12640,12641],{"class":107,"line":1750},[105,12642,2391],{"emptyLinePlaceholder":32},[105,12644,12645,12648,12651],{"class":107,"line":1755},[105,12646,12647],{"class":1954},"    mySwap01",[105,12649,12650],{"class":115},"(a, b);",[105,12652,12653],{"class":174},"\u002F\u002F值传递，形参不会修饰实参\n",[105,12655,12656,12658,12660,12663,12665,12667,12669,12672,12674,12676,12678],{"class":107,"line":1769},[105,12657,6521],{"class":115},[105,12659,1160],{"class":111},[105,12661,12662],{"class":220}," \"a:\"",[105,12664,1436],{"class":111},[105,12666,10861],{"class":115},[105,12668,1160],{"class":111},[105,12670,12671],{"class":220}," \" b:\"",[105,12673,1436],{"class":111},[105,12675,10874],{"class":115},[105,12677,1160],{"class":111},[105,12679,8832],{"class":115},[105,12681,12682],{"class":107,"line":1774},[105,12683,2391],{"emptyLinePlaceholder":32},[105,12685,12686,12689,12691,12693,12696,12698,12701],{"class":107,"line":2568},[105,12687,12688],{"class":1954},"    mySwap02",[105,12690,116],{"class":115},[105,12692,469],{"class":111},[105,12694,12695],{"class":115},"a, ",[105,12697,469],{"class":111},[105,12699,12700],{"class":115},"b);",[105,12702,12703],{"class":174},"\u002F\u002F地址传递，形参会修饰实参\n",[105,12705,12706,12708,12710,12712,12714,12716,12718,12720,12722,12724,12726],{"class":107,"line":2582},[105,12707,6521],{"class":115},[105,12709,1160],{"class":111},[105,12711,12662],{"class":220},[105,12713,1436],{"class":111},[105,12715,10861],{"class":115},[105,12717,1160],{"class":111},[105,12719,12671],{"class":220},[105,12721,1436],{"class":111},[105,12723,10874],{"class":115},[105,12725,1160],{"class":111},[105,12727,8832],{"class":115},[105,12729,12730],{"class":107,"line":2590},[105,12731,2391],{"emptyLinePlaceholder":32},[105,12733,12734,12737,12739],{"class":107,"line":2595},[105,12735,12736],{"class":1954},"    mySwap03",[105,12738,12650],{"class":115},[105,12740,12741],{"class":174},"\u002F\u002F引用传递，形参会修饰实参\n",[105,12743,12744,12746,12748,12750,12752,12754,12756,12758,12760,12762,12764],{"class":107,"line":2601},[105,12745,6521],{"class":115},[105,12747,1160],{"class":111},[105,12749,12662],{"class":220},[105,12751,1436],{"class":111},[105,12753,10861],{"class":115},[105,12755,1160],{"class":111},[105,12757,12671],{"class":220},[105,12759,1436],{"class":111},[105,12761,10874],{"class":115},[105,12763,1160],{"class":111},[105,12765,8832],{"class":115},[105,12767,12768],{"class":107,"line":2607},[105,12769,2391],{"emptyLinePlaceholder":32},[105,12771,12772,12774,12776,12778],{"class":107,"line":2612},[105,12773,2294],{"class":1954},[105,12775,116],{"class":115},[105,12777,2299],{"class":220},[105,12779,2710],{"class":115},[105,12781,12782],{"class":107,"line":7940},[105,12783,2391],{"emptyLinePlaceholder":32},[105,12785,12786,12788,12790],{"class":107,"line":7964},[105,12787,4081],{"class":111},[105,12789,4084],{"class":164},[105,12791,1282],{"class":115},[105,12793,12794],{"class":107,"line":7969},[105,12795,1556],{"class":115},[47,12797,12799],{"id":12798},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12801,12802],{},"作用：引用是可以作为函数的返回值存在的",[14,12804,9017,12805],{},[265,12806,12807],{},"不要返回局部变量引用",[14,12809,12810],{},"用法：函数调用作为左值",[96,12812,12814],{"className":9933,"code":12813,"language":9935,"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",[102,12815,12816,12821,12829,12844,12850,12854,12858,12863,12871,12888,12894,12898,12902,12910,12914,12919,12933,12953,12972,12976,12981,12994,13014,13032,13036,13052,13056,13075,13093,13097,13107,13111,13119],{"__ignoreMap":22},[105,12817,12818],{"class":107,"line":108},[105,12819,12820],{"class":174},"\u002F\u002F返回局部变量引用\n",[105,12822,12823,12825,12827],{"class":107,"line":28},[105,12824,12558],{"class":111},[105,12826,5580],{"class":1954},[105,12828,10845],{"class":115},[105,12830,12831,12833,12835,12837,12839,12841],{"class":107,"line":1171},[105,12832,1976],{"class":111},[105,12834,10861],{"class":115},[105,12836,161],{"class":111},[105,12838,2029],{"class":164},[105,12840,171],{"class":115},[105,12842,12843],{"class":174}," \u002F\u002F局部变量\n",[105,12845,12846,12848],{"class":107,"line":1186},[105,12847,4081],{"class":111},[105,12849,1424],{"class":115},[105,12851,12852],{"class":107,"line":1192},[105,12853,1556],{"class":115},[105,12855,12856],{"class":107,"line":1206},[105,12857,2391],{"emptyLinePlaceholder":32},[105,12859,12860],{"class":107,"line":1212},[105,12861,12862],{"class":174},"\u002F\u002F返回静态变量引用\n",[105,12864,12865,12867,12869],{"class":107,"line":1303},[105,12866,12558],{"class":111},[105,12868,5649],{"class":1954},[105,12870,10845],{"class":115},[105,12872,12873,12875,12877,12879,12881,12883,12885],{"class":107,"line":1309},[105,12874,11012],{"class":111},[105,12876,2373],{"class":111},[105,12878,10861],{"class":115},[105,12880,161],{"class":111},[105,12882,8942],{"class":164},[105,12884,171],{"class":115},[105,12886,12887],{"class":174},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[105,12889,12890,12892],{"class":107,"line":1321},[105,12891,4081],{"class":111},[105,12893,1424],{"class":115},[105,12895,12896],{"class":107,"line":1603},[105,12897,1556],{"class":115},[105,12899,12900],{"class":107,"line":1608},[105,12901,2391],{"emptyLinePlaceholder":32},[105,12903,12904,12906,12908],{"class":107,"line":1614},[105,12905,119],{"class":111},[105,12907,1964],{"class":1954},[105,12909,10845],{"class":115},[105,12911,12912],{"class":107,"line":1619},[105,12913,2391],{"emptyLinePlaceholder":32},[105,12915,12916],{"class":107,"line":1633},[105,12917,12918],{"class":174},"    \u002F\u002F不能返回局部变量的引用\n",[105,12920,12921,12924,12927,12929,12931],{"class":107,"line":1638},[105,12922,12923],{"class":111},"    int&",[105,12925,12926],{"class":115}," ref ",[105,12928,161],{"class":111},[105,12930,5580],{"class":1954},[105,12932,5628],{"class":115},[105,12934,12935,12937,12939,12942,12944,12946,12948,12950],{"class":107,"line":1644},[105,12936,6521],{"class":115},[105,12938,1160],{"class":111},[105,12940,12941],{"class":220}," \"ref = \"",[105,12943,1436],{"class":111},[105,12945,12926],{"class":115},[105,12947,1160],{"class":111},[105,12949,11461],{"class":115},[105,12951,12952],{"class":174},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[105,12954,12955,12957,12959,12961,12963,12965,12967,12969],{"class":107,"line":1665},[105,12956,6521],{"class":115},[105,12958,1160],{"class":111},[105,12960,12941],{"class":220},[105,12962,1436],{"class":111},[105,12964,12926],{"class":115},[105,12966,1160],{"class":111},[105,12968,11461],{"class":115},[105,12970,12971],{"class":174},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[105,12973,12974],{"class":107,"line":1670},[105,12975,2391],{"emptyLinePlaceholder":32},[105,12977,12978],{"class":107,"line":1684},[105,12979,12980],{"class":174},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[105,12982,12983,12985,12988,12990,12992],{"class":107,"line":1689},[105,12984,12923],{"class":111},[105,12986,12987],{"class":115}," ref2 ",[105,12989,161],{"class":111},[105,12991,5649],{"class":1954},[105,12993,5628],{"class":115},[105,12995,12996,12998,13000,13003,13005,13007,13009,13011],{"class":107,"line":1718},[105,12997,6521],{"class":115},[105,12999,1160],{"class":111},[105,13001,13002],{"class":220}," \"ref2 = \"",[105,13004,1436],{"class":111},[105,13006,12987],{"class":115},[105,13008,1160],{"class":111},[105,13010,11461],{"class":115},[105,13012,13013],{"class":174}," \u002F\u002F20\n",[105,13015,13016,13018,13020,13022,13024,13026,13028,13030],{"class":107,"line":1723},[105,13017,6521],{"class":115},[105,13019,1160],{"class":111},[105,13021,13002],{"class":220},[105,13023,1436],{"class":111},[105,13025,12987],{"class":115},[105,13027,1160],{"class":111},[105,13029,11461],{"class":115},[105,13031,13013],{"class":174},[105,13033,13034],{"class":107,"line":1740},[105,13035,2391],{"emptyLinePlaceholder":32},[105,13037,13038,13040,13043,13045,13047,13049],{"class":107,"line":1745},[105,13039,5694],{"class":1954},[105,13041,13042],{"class":115},"() ",[105,13044,161],{"class":111},[105,13046,2990],{"class":164},[105,13048,171],{"class":115},[105,13050,13051],{"class":174},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[105,13053,13054],{"class":107,"line":1750},[105,13055,2391],{"emptyLinePlaceholder":32},[105,13057,13058,13060,13062,13064,13066,13068,13070,13072],{"class":107,"line":1755},[105,13059,6521],{"class":115},[105,13061,1160],{"class":111},[105,13063,13002],{"class":220},[105,13065,1436],{"class":111},[105,13067,12987],{"class":115},[105,13069,1160],{"class":111},[105,13071,11461],{"class":115},[105,13073,13074],{"class":174}," \u002F\u002F1000\n",[105,13076,13077,13079,13081,13083,13085,13087,13089,13091],{"class":107,"line":1769},[105,13078,6521],{"class":115},[105,13080,1160],{"class":111},[105,13082,13002],{"class":220},[105,13084,1436],{"class":111},[105,13086,12987],{"class":115},[105,13088,1160],{"class":111},[105,13090,11461],{"class":115},[105,13092,13074],{"class":174},[105,13094,13095],{"class":107,"line":1774},[105,13096,2391],{"emptyLinePlaceholder":32},[105,13098,13099,13101,13103,13105],{"class":107,"line":2568},[105,13100,2294],{"class":1954},[105,13102,116],{"class":115},[105,13104,2299],{"class":220},[105,13106,2710],{"class":115},[105,13108,13109],{"class":107,"line":2582},[105,13110,2391],{"emptyLinePlaceholder":32},[105,13112,13113,13115,13117],{"class":107,"line":2590},[105,13114,4081],{"class":111},[105,13116,4084],{"class":164},[105,13118,1282],{"class":115},[105,13120,13121],{"class":107,"line":2595},[105,13122,1556],{"class":115},[47,13124,13126],{"id":13125},"_65引用的本质","6.5引用的本质",[14,13128,13129,13130],{},"本质：",[265,13131,13132],{},"引用的本质在c++内部实现是一个指针常量.",[96,13134,13136],{"className":98,"code":13135,"language":100,"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",[102,13137,13138,13143,13159,13173,13177,13186,13198,13203,13208,13219,13232,13236,13252,13269,13273,13281,13289],{"__ignoreMap":22},[105,13139,13140],{"class":107,"line":108},[105,13141,13142],{"class":174},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[105,13144,13145,13147,13149,13151,13153,13156],{"class":107,"line":28},[105,13146,5356],{"class":111},[105,13148,11377],{"class":1954},[105,13150,116],{"class":115},[105,13152,12558],{"class":111},[105,13154,13155],{"class":5208}," ref",[105,13157,13158],{"class":115},"){\n",[105,13160,13161,13164,13166,13168,13170],{"class":107,"line":1171},[105,13162,13163],{"class":115},"    ref ",[105,13165,161],{"class":111},[105,13167,5746],{"class":164},[105,13169,171],{"class":115},[105,13171,13172],{"class":174}," \u002F\u002F ref是引用，转换为*ref = 100\n",[105,13174,13175],{"class":107,"line":1186},[105,13176,1556],{"class":115},[105,13178,13179,13181,13183],{"class":107,"line":1192},[105,13180,119],{"class":111},[105,13182,1964],{"class":1954},[105,13184,13185],{"class":115},"(){\n",[105,13187,13188,13190,13192,13194,13196],{"class":107,"line":1206},[105,13189,1976],{"class":111},[105,13191,10861],{"class":115},[105,13193,161],{"class":111},[105,13195,2029],{"class":164},[105,13197,1282],{"class":115},[105,13199,13200],{"class":107,"line":1212},[105,13201,13202],{"class":115},"    \n",[105,13204,13205],{"class":107,"line":1303},[105,13206,13207],{"class":174},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[105,13209,13210,13212,13214,13216],{"class":107,"line":1309},[105,13211,12923],{"class":111},[105,13213,12926],{"class":115},[105,13215,161],{"class":111},[105,13217,13218],{"class":115}," a; \n",[105,13220,13221,13223,13225,13227,13229],{"class":107,"line":1321},[105,13222,13163],{"class":115},[105,13224,161],{"class":111},[105,13226,8942],{"class":164},[105,13228,171],{"class":115},[105,13230,13231],{"class":174}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[105,13233,13234],{"class":107,"line":1603},[105,13235,13202],{"class":115},[105,13237,13238,13240,13242,13244,13246,13248,13250],{"class":107,"line":1608},[105,13239,6521],{"class":115},[105,13241,1160],{"class":111},[105,13243,12662],{"class":220},[105,13245,1436],{"class":111},[105,13247,10861],{"class":115},[105,13249,1160],{"class":111},[105,13251,8832],{"class":115},[105,13253,13254,13256,13258,13261,13263,13265,13267],{"class":107,"line":1614},[105,13255,6521],{"class":115},[105,13257,1160],{"class":111},[105,13259,13260],{"class":220}," \"ref:\"",[105,13262,1436],{"class":111},[105,13264,12926],{"class":115},[105,13266,1160],{"class":111},[105,13268,8832],{"class":115},[105,13270,13271],{"class":107,"line":1619},[105,13272,13202],{"class":115},[105,13274,13275,13278],{"class":107,"line":1633},[105,13276,13277],{"class":1954},"    func",[105,13279,13280],{"class":115},"(a);\n",[105,13282,13283,13285,13287],{"class":107,"line":1638},[105,13284,4081],{"class":111},[105,13286,4084],{"class":164},[105,13288,1282],{"class":115},[105,13290,13291],{"class":107,"line":1644},[105,13292,1556],{"class":115},[14,13294,11324],{},[59,13296,13297,13300],{},[62,13298,13299],{},"引用的本质，就是一个指针常量",[62,13301,13302],{},"引用一旦初始化，就不可以发生改变",[47,13304,13306],{"id":13305},"_66常量引用","6.6常量引用",[14,13308,13309],{},"作用：常量引用主要用来修饰形参",[14,13311,13312,13313,13316],{},"在函数形参列表中，可以加",[265,13314,13315],{},"const修饰形参","，防止形参改变实参",[96,13318,13320],{"className":98,"code":13319,"language":100,"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",[102,13321,13322,13327,13332,13351,13356,13369,13373,13377,13385,13389,13394,13399,13413,13417,13425,13437,13441,13446,13458,13465,13469,13479,13483,13491],{"__ignoreMap":22},[105,13323,13324],{"class":107,"line":108},[105,13325,13326],{"class":174},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[105,13328,13329],{"class":107,"line":28},[105,13330,13331],{"class":174},"\u002F\u002F加上const就不能修改实参的\n",[105,13333,13334,13336,13339,13341,13343,13346,13349],{"class":107,"line":1171},[105,13335,5356],{"class":111},[105,13337,13338],{"class":1954}," showValue",[105,13340,116],{"class":115},[105,13342,6784],{"class":111},[105,13344,13345],{"class":111}," int&",[105,13347,13348],{"class":5208}," v",[105,13350,12434],{"class":115},[105,13352,13353],{"class":107,"line":1186},[105,13354,13355],{"class":174},"    \u002F\u002Fv += 100;\n",[105,13357,13358,13360,13362,13365,13367],{"class":107,"line":1192},[105,13359,6521],{"class":115},[105,13361,1160],{"class":111},[105,13363,13364],{"class":115}," v ",[105,13366,1160],{"class":111},[105,13368,8832],{"class":115},[105,13370,13371],{"class":107,"line":1206},[105,13372,1556],{"class":115},[105,13374,13375],{"class":107,"line":1212},[105,13376,2391],{"emptyLinePlaceholder":32},[105,13378,13379,13381,13383],{"class":107,"line":1303},[105,13380,119],{"class":111},[105,13382,1964],{"class":1954},[105,13384,10845],{"class":115},[105,13386,13387],{"class":107,"line":1309},[105,13388,2391],{"emptyLinePlaceholder":32},[105,13390,13391],{"class":107,"line":1321},[105,13392,13393],{"class":174},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[105,13395,13396],{"class":107,"line":1603},[105,13397,13398],{"class":174},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[105,13400,13401,13403,13405,13407,13409,13411],{"class":107,"line":1608},[105,13402,11213],{"class":111},[105,13404,13345],{"class":111},[105,13406,12926],{"class":115},[105,13408,161],{"class":111},[105,13410,2029],{"class":164},[105,13412,1282],{"class":115},[105,13414,13415],{"class":107,"line":1614},[105,13416,2391],{"emptyLinePlaceholder":32},[105,13418,13419,13422],{"class":107,"line":1619},[105,13420,13421],{"class":174},"    \u002F\u002Fref = 100;",[105,13423,13424],{"class":174},"  \u002F\u002F加入const后不可以修改变量\n",[105,13426,13427,13429,13431,13433,13435],{"class":107,"line":1633},[105,13428,6521],{"class":115},[105,13430,1160],{"class":111},[105,13432,12926],{"class":115},[105,13434,1160],{"class":111},[105,13436,8832],{"class":115},[105,13438,13439],{"class":107,"line":1638},[105,13440,2391],{"emptyLinePlaceholder":32},[105,13442,13443],{"class":107,"line":1644},[105,13444,13445],{"class":174},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[105,13447,13448,13450,13452,13454,13456],{"class":107,"line":1665},[105,13449,1976],{"class":111},[105,13451,10861],{"class":115},[105,13453,161],{"class":111},[105,13455,2029],{"class":164},[105,13457,1282],{"class":115},[105,13459,13460,13463],{"class":107,"line":1670},[105,13461,13462],{"class":1954},"    showValue",[105,13464,13280],{"class":115},[105,13466,13467],{"class":107,"line":1684},[105,13468,2391],{"emptyLinePlaceholder":32},[105,13470,13471,13473,13475,13477],{"class":107,"line":1689},[105,13472,2294],{"class":1954},[105,13474,116],{"class":115},[105,13476,2299],{"class":220},[105,13478,2710],{"class":115},[105,13480,13481],{"class":107,"line":1718},[105,13482,2391],{"emptyLinePlaceholder":32},[105,13484,13485,13487,13489],{"class":107,"line":1723},[105,13486,4081],{"class":111},[105,13488,4084],{"class":164},[105,13490,1282],{"class":115},[105,13492,13493],{"class":107,"line":1740},[105,13494,1556],{"class":115},[5118,13496,13497],{},"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":28,"depth":28,"links":13499},[13500,13501,13502,13503,13504,13505],{"id":12032,"depth":28,"text":12033},{"id":12211,"depth":28,"text":12212},{"id":12394,"depth":28,"text":12395},{"id":12798,"depth":28,"text":12799},{"id":13125,"depth":28,"text":13126},{"id":13305,"depth":28,"text":13306},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12024,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13512,"title":13513,"body":13514,"description":22,"extension":30,"meta":14595,"navigation":32,"path":14596,"seo":14597,"stem":14598,"__hash__":14599},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13515,"toc":14587},[13516,13519,13523,13526,13531,13763,13765,13776,13780,13783,13791,13895,13898,13902,13905,13909,13912,13917,13939,13945,14272,14275,14279,14287,14584],[10,13517,13513],{"id":13518},"_7函数高级部分",[47,13520,13522],{"id":13521},"_71函数默认参数","7.1函数默认参数",[14,13524,13525],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13527,5173,13528],{},[102,13529,13530],{}," 返回值类型  函数名 （参数= 默认值）{}",[96,13532,13534],{"className":98,"code":13533,"language":100,"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",[102,13535,13536,13571,13586,13590,13594,13599,13604,13633,13653,13663,13667,13671,13679,13683,13711,13733,13737,13747,13751,13759],{"__ignoreMap":22},[105,13537,13538,13540,13542,13544,13546,13548,13550,13552,13554,13557,13559,13561,13563,13565,13567,13569],{"class":107,"line":108},[105,13539,119],{"class":111},[105,13541,11377],{"class":1954},[105,13543,116],{"class":115},[105,13545,119],{"class":111},[105,13547,1390],{"class":5208},[105,13549,12427],{"class":115},[105,13551,119],{"class":111},[105,13553,2824],{"class":5208},[105,13555,13556],{"class":111}," =",[105,13558,2029],{"class":164},[105,13560,12427],{"class":115},[105,13562,119],{"class":111},[105,13564,2840],{"class":5208},[105,13566,13556],{"class":111},[105,13568,2029],{"class":164},[105,13570,12434],{"class":115},[105,13572,13573,13575,13577,13579,13581,13583],{"class":107,"line":28},[105,13574,4081],{"class":111},[105,13576,10861],{"class":115},[105,13578,597],{"class":111},[105,13580,10874],{"class":115},[105,13582,597],{"class":111},[105,13584,13585],{"class":115}," c;\n",[105,13587,13588],{"class":107,"line":1171},[105,13589,1556],{"class":115},[105,13591,13592],{"class":107,"line":1186},[105,13593,2391],{"emptyLinePlaceholder":32},[105,13595,13596],{"class":107,"line":1192},[105,13597,13598],{"class":174},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[105,13600,13601],{"class":107,"line":1206},[105,13602,13603],{"class":174},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[105,13605,13606,13608,13611,13613,13615,13617,13619,13621,13623,13625,13627,13629,13631],{"class":107,"line":1212},[105,13607,119],{"class":111},[105,13609,13610],{"class":1954}," func2",[105,13612,116],{"class":115},[105,13614,119],{"class":111},[105,13616,1390],{"class":5208},[105,13618,13556],{"class":111},[105,13620,2029],{"class":164},[105,13622,12427],{"class":115},[105,13624,119],{"class":111},[105,13626,2824],{"class":5208},[105,13628,13556],{"class":111},[105,13630,2029],{"class":164},[105,13632,2710],{"class":115},[105,13634,13635,13637,13639,13641,13643,13645,13647,13649,13651],{"class":107,"line":1303},[105,13636,119],{"class":111},[105,13638,13610],{"class":1954},[105,13640,116],{"class":115},[105,13642,119],{"class":111},[105,13644,1390],{"class":5208},[105,13646,12427],{"class":115},[105,13648,119],{"class":111},[105,13650,2824],{"class":5208},[105,13652,12434],{"class":115},[105,13654,13655,13657,13659,13661],{"class":107,"line":1309},[105,13656,4081],{"class":111},[105,13658,10861],{"class":115},[105,13660,597],{"class":111},[105,13662,12455],{"class":115},[105,13664,13665],{"class":107,"line":1321},[105,13666,1556],{"class":115},[105,13668,13669],{"class":107,"line":1603},[105,13670,2391],{"emptyLinePlaceholder":32},[105,13672,13673,13675,13677],{"class":107,"line":1608},[105,13674,119],{"class":111},[105,13676,1964],{"class":1954},[105,13678,10845],{"class":115},[105,13680,13681],{"class":107,"line":1614},[105,13682,2391],{"emptyLinePlaceholder":32},[105,13684,13685,13687,13689,13692,13694,13696,13698,13700,13702,13704,13707,13709],{"class":107,"line":1619},[105,13686,6521],{"class":115},[105,13688,1160],{"class":111},[105,13690,13691],{"class":220}," \"ret = \"",[105,13693,1436],{"class":111},[105,13695,11377],{"class":1954},[105,13697,116],{"class":115},[105,13699,816],{"class":164},[105,13701,12427],{"class":115},[105,13703,816],{"class":164},[105,13705,13706],{"class":115},") ",[105,13708,1160],{"class":111},[105,13710,8832],{"class":115},[105,13712,13713,13715,13717,13719,13721,13723,13725,13727,13729,13731],{"class":107,"line":1633},[105,13714,6521],{"class":115},[105,13716,1160],{"class":111},[105,13718,13691],{"class":220},[105,13720,1436],{"class":111},[105,13722,11377],{"class":1954},[105,13724,116],{"class":115},[105,13726,427],{"class":164},[105,13728,13706],{"class":115},[105,13730,1160],{"class":111},[105,13732,8832],{"class":115},[105,13734,13735],{"class":107,"line":1638},[105,13736,2391],{"emptyLinePlaceholder":32},[105,13738,13739,13741,13743,13745],{"class":107,"line":1644},[105,13740,2294],{"class":1954},[105,13742,116],{"class":115},[105,13744,2299],{"class":220},[105,13746,2710],{"class":115},[105,13748,13749],{"class":107,"line":1665},[105,13750,2391],{"emptyLinePlaceholder":32},[105,13752,13753,13755,13757],{"class":107,"line":1670},[105,13754,4081],{"class":111},[105,13756,4084],{"class":164},[105,13758,1282],{"class":115},[105,13760,13761],{"class":107,"line":1684},[105,13762,1556],{"class":115},[14,13764,11324],{},[59,13766,13767,13770,13773],{},[62,13768,13769],{},"我传就用我；没传就用你",[62,13771,13772],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[62,13774,13775],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[47,13777,13779],{"id":13778},"_72函数的占位参数","7.2函数的占位参数",[14,13781,13782],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13784,13785,13787,13788],{},[265,13786,5173],{}," ",[102,13789,13790],{},"返回值类型 函数名 (数据类型){}",[96,13792,13794],{"className":98,"code":13793,"language":100,"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",[102,13795,13796,13801,13819,13832,13836,13844,13848,13865,13869,13879,13883,13891],{"__ignoreMap":22},[105,13797,13798],{"class":107,"line":108},[105,13799,13800],{"class":174},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[105,13802,13803,13805,13807,13809,13811,13813,13815,13817],{"class":107,"line":28},[105,13804,5356],{"class":111},[105,13806,11377],{"class":1954},[105,13808,116],{"class":115},[105,13810,119],{"class":111},[105,13812,1390],{"class":5208},[105,13814,12427],{"class":115},[105,13816,119],{"class":111},[105,13818,12434],{"class":115},[105,13820,13821,13823,13825,13828,13830],{"class":107,"line":1171},[105,13822,6521],{"class":115},[105,13824,1160],{"class":111},[105,13826,13827],{"class":220}," \"this is func\"",[105,13829,1436],{"class":111},[105,13831,8832],{"class":115},[105,13833,13834],{"class":107,"line":1186},[105,13835,1556],{"class":115},[105,13837,13838,13840,13842],{"class":107,"line":1192},[105,13839,119],{"class":111},[105,13841,1964],{"class":1954},[105,13843,10845],{"class":115},[105,13845,13846],{"class":107,"line":1206},[105,13847,2391],{"emptyLinePlaceholder":32},[105,13849,13850,13852,13854,13856,13858,13860,13862],{"class":107,"line":1212},[105,13851,13277],{"class":1954},[105,13853,116],{"class":115},[105,13855,562],{"class":164},[105,13857,494],{"class":115},[105,13859,562],{"class":164},[105,13861,5958],{"class":115},[105,13863,13864],{"class":174}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[105,13866,13867],{"class":107,"line":1303},[105,13868,2391],{"emptyLinePlaceholder":32},[105,13870,13871,13873,13875,13877],{"class":107,"line":1309},[105,13872,2294],{"class":1954},[105,13874,116],{"class":115},[105,13876,2299],{"class":220},[105,13878,2710],{"class":115},[105,13880,13881],{"class":107,"line":1321},[105,13882,2391],{"emptyLinePlaceholder":32},[105,13884,13885,13887,13889],{"class":107,"line":1603},[105,13886,4081],{"class":111},[105,13888,4084],{"class":164},[105,13890,1282],{"class":115},[105,13892,13893],{"class":107,"line":1608},[105,13894,1556],{"class":115},[14,13896,13897],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[47,13899,13901],{"id":13900},"_73函数重载","7.3函数重载",[14,13903,13904],{},"意思是函数名是可以相同的",[76,13906,13908],{"id":13907},"_731基本语法","7.3.1基本语法",[14,13910,13911],{},"作用：函数名可以相同，提高复用性",[14,13913,13914],{},[265,13915,13916],{},"函数重载满足条件：",[1123,13918,13919,13922,13925],{},[62,13920,13921],{},"同一个作用域下",[62,13923,13924],{},"函数名称相同",[62,13926,13927,13928,13931,13932,13935,13936],{},"函数参数",[265,13929,13930],{},"类型不同","  或者 ",[265,13933,13934],{},"个数不同"," 或者 ",[265,13937,13938],{},"顺序不同",[14,13940,13941,13944],{},[265,13942,13943],{},"注意:","  函数的返回值不可以作为函数重载的条件",[96,13946,13948],{"className":9933,"code":13947,"language":9935,"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",[102,13949,13950,13955,13963,13967,13980,13984,13998,14002,14015,14019,14034,14038,14051,14055,14076,14080,14093,14097,14117,14121,14134,14138,14142,14147,14152,14157,14162,14167,14171,14175,14183,14187,14193,14203,14213,14227,14242,14246,14256,14260,14268],{"__ignoreMap":22},[105,13951,13952],{"class":107,"line":108},[105,13953,13954],{"class":174},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[105,13956,13957,13959,13961],{"class":107,"line":28},[105,13958,5356],{"class":111},[105,13960,11377],{"class":1954},[105,13962,1967],{"class":115},[105,13964,13965],{"class":107,"line":1171},[105,13966,1537],{"class":115},[105,13968,13969,13971,13973,13976,13978],{"class":107,"line":1186},[105,13970,6521],{"class":115},[105,13972,1160],{"class":111},[105,13974,13975],{"class":220}," \"func 的调用！\"",[105,13977,1436],{"class":111},[105,13979,8832],{"class":115},[105,13981,13982],{"class":107,"line":1192},[105,13983,1556],{"class":115},[105,13985,13986,13988,13990,13992,13994,13996],{"class":107,"line":1206},[105,13987,5356],{"class":111},[105,13989,11377],{"class":1954},[105,13991,116],{"class":115},[105,13993,119],{"class":111},[105,13995,1390],{"class":5208},[105,13997,122],{"class":115},[105,13999,14000],{"class":107,"line":1212},[105,14001,1537],{"class":115},[105,14003,14004,14006,14008,14011,14013],{"class":107,"line":1303},[105,14005,6521],{"class":115},[105,14007,1160],{"class":111},[105,14009,14010],{"class":220}," \"func (int a) 的调用！\"",[105,14012,1436],{"class":111},[105,14014,8832],{"class":115},[105,14016,14017],{"class":107,"line":1309},[105,14018,1556],{"class":115},[105,14020,14021,14023,14025,14027,14030,14032],{"class":107,"line":1321},[105,14022,5356],{"class":111},[105,14024,11377],{"class":1954},[105,14026,116],{"class":115},[105,14028,14029],{"class":111},"double",[105,14031,1390],{"class":5208},[105,14033,122],{"class":115},[105,14035,14036],{"class":107,"line":1603},[105,14037,1537],{"class":115},[105,14039,14040,14042,14044,14047,14049],{"class":107,"line":1608},[105,14041,6521],{"class":115},[105,14043,1160],{"class":111},[105,14045,14046],{"class":220}," \"func (double a)的调用！\"",[105,14048,1436],{"class":111},[105,14050,8832],{"class":115},[105,14052,14053],{"class":107,"line":1614},[105,14054,1556],{"class":115},[105,14056,14057,14059,14061,14063,14065,14067,14070,14072,14074],{"class":107,"line":1619},[105,14058,5356],{"class":111},[105,14060,11377],{"class":1954},[105,14062,116],{"class":115},[105,14064,119],{"class":111},[105,14066,1390],{"class":5208},[105,14068,14069],{"class":115}," ,",[105,14071,14029],{"class":111},[105,14073,2824],{"class":5208},[105,14075,122],{"class":115},[105,14077,14078],{"class":107,"line":1633},[105,14079,1537],{"class":115},[105,14081,14082,14084,14086,14089,14091],{"class":107,"line":1638},[105,14083,6521],{"class":115},[105,14085,1160],{"class":111},[105,14087,14088],{"class":220}," \"func (int a ,double b) 的调用！\"",[105,14090,1436],{"class":111},[105,14092,8832],{"class":115},[105,14094,14095],{"class":107,"line":1644},[105,14096,1556],{"class":115},[105,14098,14099,14101,14103,14105,14107,14109,14111,14113,14115],{"class":107,"line":1665},[105,14100,5356],{"class":111},[105,14102,11377],{"class":1954},[105,14104,116],{"class":115},[105,14106,14029],{"class":111},[105,14108,1390],{"class":5208},[105,14110,14069],{"class":115},[105,14112,119],{"class":111},[105,14114,2824],{"class":5208},[105,14116,122],{"class":115},[105,14118,14119],{"class":107,"line":1670},[105,14120,1537],{"class":115},[105,14122,14123,14125,14127,14130,14132],{"class":107,"line":1684},[105,14124,6521],{"class":115},[105,14126,1160],{"class":111},[105,14128,14129],{"class":220}," \"func (double a ,int b)的调用！\"",[105,14131,1436],{"class":111},[105,14133,8832],{"class":115},[105,14135,14136],{"class":107,"line":1689},[105,14137,1556],{"class":115},[105,14139,14140],{"class":107,"line":1718},[105,14141,2391],{"emptyLinePlaceholder":32},[105,14143,14144],{"class":107,"line":1723},[105,14145,14146],{"class":174},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[105,14148,14149],{"class":107,"line":1740},[105,14150,14151],{"class":174},"\u002F\u002Fint func(double a, int b)\n",[105,14153,14154],{"class":107,"line":1745},[105,14155,14156],{"class":174},"\u002F\u002F{\n",[105,14158,14159],{"class":107,"line":1750},[105,14160,14161],{"class":174},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[105,14163,14164],{"class":107,"line":1755},[105,14165,14166],{"class":174},"\u002F\u002F}\n",[105,14168,14169],{"class":107,"line":1769},[105,14170,2391],{"emptyLinePlaceholder":32},[105,14172,14173],{"class":107,"line":1774},[105,14174,2391],{"emptyLinePlaceholder":32},[105,14176,14177,14179,14181],{"class":107,"line":2568},[105,14178,119],{"class":111},[105,14180,1964],{"class":1954},[105,14182,10845],{"class":115},[105,14184,14185],{"class":107,"line":2582},[105,14186,2391],{"emptyLinePlaceholder":32},[105,14188,14189,14191],{"class":107,"line":2590},[105,14190,13277],{"class":1954},[105,14192,5628],{"class":115},[105,14194,14195,14197,14199,14201],{"class":107,"line":2595},[105,14196,13277],{"class":1954},[105,14198,116],{"class":115},[105,14200,562],{"class":164},[105,14202,2710],{"class":115},[105,14204,14205,14207,14209,14211],{"class":107,"line":2601},[105,14206,13277],{"class":1954},[105,14208,116],{"class":115},[105,14210,165],{"class":164},[105,14212,2710],{"class":115},[105,14214,14215,14217,14219,14221,14223,14225],{"class":107,"line":2607},[105,14216,13277],{"class":1954},[105,14218,116],{"class":115},[105,14220,562],{"class":164},[105,14222,494],{"class":115},[105,14224,165],{"class":164},[105,14226,2710],{"class":115},[105,14228,14229,14231,14233,14235,14238,14240],{"class":107,"line":2612},[105,14230,13277],{"class":1954},[105,14232,116],{"class":115},[105,14234,165],{"class":164},[105,14236,14237],{"class":115}," , ",[105,14239,562],{"class":164},[105,14241,2710],{"class":115},[105,14243,14244],{"class":107,"line":7940},[105,14245,13202],{"class":115},[105,14247,14248,14250,14252,14254],{"class":107,"line":7964},[105,14249,2294],{"class":1954},[105,14251,116],{"class":115},[105,14253,2299],{"class":220},[105,14255,2710],{"class":115},[105,14257,14258],{"class":107,"line":7969},[105,14259,2391],{"emptyLinePlaceholder":32},[105,14261,14262,14264,14266],{"class":107,"line":7975},[105,14263,4081],{"class":111},[105,14265,4084],{"class":164},[105,14267,1282],{"class":115},[105,14269,14270],{"class":107,"line":8002},[105,14271,1556],{"class":115},[14,14273,14274],{},"重点：函数返回值不可以作为函数重载条件！",[76,14276,14278],{"id":14277},"_732注意事项","7.3.2注意事项",[1123,14280,14281,14284],{},[62,14282,14283],{},"引用作为重载条件!!!",[62,14285,14286],{},"函数重载碰到函数默认参数",[96,14288,14290],{"className":98,"code":14289,"language":100,"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",[102,14291,14292,14297,14302,14306,14322,14326,14339,14343,14347,14365,14369,14382,14386,14390,14394,14399,14403,14427,14431,14444,14448,14452,14466,14470,14483,14487,14491,14499,14503,14515,14525,14538,14542,14546,14554,14558,14568,14572,14580],{"__ignoreMap":22},[105,14293,14294],{"class":107,"line":108},[105,14295,14296],{"class":174},"\u002F\u002F函数重载注意事项\n",[105,14298,14299],{"class":107,"line":28},[105,14300,14301],{"class":174},"\u002F\u002F1、引用作为重载条件\n",[105,14303,14304],{"class":107,"line":1171},[105,14305,2391],{"emptyLinePlaceholder":32},[105,14307,14308,14310,14312,14314,14316,14318,14320],{"class":107,"line":1186},[105,14309,5356],{"class":111},[105,14311,11377],{"class":1954},[105,14313,116],{"class":115},[105,14315,119],{"class":111},[105,14317,10576],{"class":111},[105,14319,354],{"class":5208},[105,14321,122],{"class":115},[105,14323,14324],{"class":107,"line":1192},[105,14325,1537],{"class":115},[105,14327,14328,14330,14332,14335,14337],{"class":107,"line":1206},[105,14329,6521],{"class":115},[105,14331,1160],{"class":111},[105,14333,14334],{"class":220}," \"func (int &a) 调用 \"",[105,14336,1436],{"class":111},[105,14338,8832],{"class":115},[105,14340,14341],{"class":107,"line":1212},[105,14342,1556],{"class":115},[105,14344,14345],{"class":107,"line":1303},[105,14346,2391],{"emptyLinePlaceholder":32},[105,14348,14349,14351,14353,14355,14357,14359,14361,14363],{"class":107,"line":1309},[105,14350,5356],{"class":111},[105,14352,11377],{"class":1954},[105,14354,116],{"class":115},[105,14356,6784],{"class":111},[105,14358,2373],{"class":111},[105,14360,10576],{"class":111},[105,14362,354],{"class":5208},[105,14364,122],{"class":115},[105,14366,14367],{"class":107,"line":1321},[105,14368,1537],{"class":115},[105,14370,14371,14373,14375,14378,14380],{"class":107,"line":1603},[105,14372,6521],{"class":115},[105,14374,1160],{"class":111},[105,14376,14377],{"class":220}," \"func (const int &a) 调用 \"",[105,14379,1436],{"class":111},[105,14381,8832],{"class":115},[105,14383,14384],{"class":107,"line":1608},[105,14385,1556],{"class":115},[105,14387,14388],{"class":107,"line":1614},[105,14389,2391],{"emptyLinePlaceholder":32},[105,14391,14392],{"class":107,"line":1619},[105,14393,2391],{"emptyLinePlaceholder":32},[105,14395,14396],{"class":107,"line":1633},[105,14397,14398],{"class":174},"\u002F\u002F2、函数重载碰到函数默认参数\n",[105,14400,14401],{"class":107,"line":1638},[105,14402,2391],{"emptyLinePlaceholder":32},[105,14404,14405,14407,14409,14411,14413,14415,14417,14419,14421,14423,14425],{"class":107,"line":1644},[105,14406,5356],{"class":111},[105,14408,13610],{"class":1954},[105,14410,116],{"class":115},[105,14412,119],{"class":111},[105,14414,1390],{"class":5208},[105,14416,12427],{"class":115},[105,14418,119],{"class":111},[105,14420,2824],{"class":5208},[105,14422,13556],{"class":111},[105,14424,2029],{"class":164},[105,14426,122],{"class":115},[105,14428,14429],{"class":107,"line":1665},[105,14430,1537],{"class":115},[105,14432,14433,14435,14437,14440,14442],{"class":107,"line":1670},[105,14434,6521],{"class":115},[105,14436,1160],{"class":111},[105,14438,14439],{"class":220}," \"func2(int a, int b = 10) 调用\"",[105,14441,1436],{"class":111},[105,14443,8832],{"class":115},[105,14445,14446],{"class":107,"line":1684},[105,14447,1556],{"class":115},[105,14449,14450],{"class":107,"line":1689},[105,14451,2391],{"emptyLinePlaceholder":32},[105,14453,14454,14456,14458,14460,14462,14464],{"class":107,"line":1718},[105,14455,5356],{"class":111},[105,14457,13610],{"class":1954},[105,14459,116],{"class":115},[105,14461,119],{"class":111},[105,14463,1390],{"class":5208},[105,14465,122],{"class":115},[105,14467,14468],{"class":107,"line":1723},[105,14469,1537],{"class":115},[105,14471,14472,14474,14476,14479,14481],{"class":107,"line":1740},[105,14473,6521],{"class":115},[105,14475,1160],{"class":111},[105,14477,14478],{"class":220}," \"func2(int a) 调用\"",[105,14480,1436],{"class":111},[105,14482,8832],{"class":115},[105,14484,14485],{"class":107,"line":1745},[105,14486,1556],{"class":115},[105,14488,14489],{"class":107,"line":1750},[105,14490,2391],{"emptyLinePlaceholder":32},[105,14492,14493,14495,14497],{"class":107,"line":1755},[105,14494,119],{"class":111},[105,14496,1964],{"class":1954},[105,14498,10845],{"class":115},[105,14500,14501],{"class":107,"line":1769},[105,14502,13202],{"class":115},[105,14504,14505,14507,14509,14511,14513],{"class":107,"line":1774},[105,14506,1976],{"class":111},[105,14508,10861],{"class":115},[105,14510,161],{"class":111},[105,14512,2029],{"class":164},[105,14514,1282],{"class":115},[105,14516,14517,14519,14522],{"class":107,"line":2568},[105,14518,13277],{"class":1954},[105,14520,14521],{"class":115},"(a);",[105,14523,14524],{"class":174}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[105,14526,14527,14529,14531,14533,14535],{"class":107,"line":2582},[105,14528,13277],{"class":1954},[105,14530,116],{"class":115},[105,14532,562],{"class":164},[105,14534,5958],{"class":115},[105,14536,14537],{"class":174},"\u002F\u002F调用有const   10是个常量\n",[105,14539,14540],{"class":107,"line":2590},[105,14541,2391],{"emptyLinePlaceholder":32},[105,14543,14544],{"class":107,"line":2595},[105,14545,2391],{"emptyLinePlaceholder":32},[105,14547,14548,14551],{"class":107,"line":2601},[105,14549,14550],{"class":174},"    \u002F\u002Ffunc2(10);",[105,14552,14553],{"class":174}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[105,14555,14556],{"class":107,"line":2607},[105,14557,2391],{"emptyLinePlaceholder":32},[105,14559,14560,14562,14564,14566],{"class":107,"line":2612},[105,14561,2294],{"class":1954},[105,14563,116],{"class":115},[105,14565,2299],{"class":220},[105,14567,2710],{"class":115},[105,14569,14570],{"class":107,"line":7940},[105,14571,2391],{"emptyLinePlaceholder":32},[105,14573,14574,14576,14578],{"class":107,"line":7964},[105,14575,4081],{"class":111},[105,14577,4084],{"class":164},[105,14579,1282],{"class":115},[105,14581,14582],{"class":107,"line":7969},[105,14583,1556],{"class":115},[5118,14585,14586],{},"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":28,"depth":28,"links":14588},[14589,14590,14591],{"id":13521,"depth":28,"text":13522},{"id":13778,"depth":28,"text":13779},{"id":13900,"depth":28,"text":13901,"children":14592},[14593,14594],{"id":13907,"depth":1171,"text":13908},{"id":14277,"depth":1171,"text":14278},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13513,"description":22},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14601,"title":14602,"body":14603,"description":23357,"extension":30,"meta":23358,"navigation":32,"path":23359,"seo":23360,"stem":23361,"__hash__":23362},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14604,"toc":23338},[14605,14608,14614,14621,14626,14629,14632,14635,14639,14643,14646,14649,14657,14662,14665,14672,14677,14836,14839,15092,15095,15098,15101,15106,15109,15112,15123,15128,15364,15368,15378,15381,15389,15536,15540,15543,15546,15550,15995,15999,16007,16015,16927,16934,16939,17567,17570,17573,17576,17695,17698,17785,17788,17914,17917,18011,18014,18367,18371,18379,18383,18390,18393,18396,18407,18413,18418,18430,18438,18458,18466,18483,18669,18672,18676,18679,18682,18685,18688,18691,18694,18697,19157,19163,19167,19170,19181,19768,19771,20260,20264,20267,20270,20273,20276,20279,20287,20683,20687,20690,20693,21140,21143,21146,21151,21154,21159,21162,21166,21169,21171,21177,21180,21486,21496,21537,21541,21544,21546,21579,21582,21889,21891,21906,21909,21932,21941,21947,21950,21954,21957,21960,21965,21976,21981,21989,21994,22124,22127,22130,22305,22310,22522,22526,22529,22643,22648,22887,22891,22895,22898,22901,22906,23011,23014,23017,23020,23024,23135,23138,23141,23146,23198,23201,23204,23209,23255,23258,23263,23331,23333,23336],[10,14606,14602],{"id":14607},"_8类和对象",[14,14609,14610,14611],{},"C++面向对象的三大特性为",[265,14612,14613],{},"封装、继承、多态",[14,14615,14616,14617,14620],{},"C++认为",[265,14618,14619],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14622,14623],{},[265,14624,14625],{},"例如：",[14,14627,14628],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14630,14631],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14633,14634],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[47,14636,14638],{"id":14637},"_81封装","8.1封装",[76,14640,14642],{"id":14641},"_811封装的意义","8.1.1封装的意义",[14,14644,14645],{},"封装是C++面向对象三大特性之一",[14,14647,14648],{},"封装的意义：",[1123,14650,14651,14654],{},[62,14652,14653],{},"将属性和行为作为一个整体，表现生活中的事物",[62,14655,14656],{},"将属性和行为加以权限控制",[14,14658,14659],{},[265,14660,14661],{},"封装意义一：",[14,14663,14664],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14666,14667,13787,14669],{},[265,14668,5173],{},[102,14670,14671],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[59,14673,14674],{},[62,14675,14676],{},"**示例1：**设计一个圆类，求圆的周长",[96,14678,14680],{"className":98,"code":14679,"language":100,"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",[102,14681,14682,14690,14694,14699,14704,14709,14714,14721,14726,14736,14740,14758,14762,14766,14774,14778,14783,14788,14793,14798,14809,14832],{"__ignoreMap":22},[105,14683,14684,14687],{"class":107,"line":108},[105,14685,14686],{"class":111},"class",[105,14688,14689],{"class":1954}," Circle\n",[105,14691,14692],{"class":107,"line":28},[105,14693,1537],{"class":115},[105,14695,14696],{"class":107,"line":1171},[105,14697,14698],{"class":174},"    \u002F\u002F访问权限\n",[105,14700,14701],{"class":107,"line":1186},[105,14702,14703],{"class":174},"    \u002F\u002F公共权限\n",[105,14705,14706],{"class":107,"line":1192},[105,14707,14708],{"class":111},"public:\n",[105,14710,14711],{"class":107,"line":1206},[105,14712,14713],{"class":174},"    \u002F\u002F属性\n",[105,14715,14716,14718],{"class":107,"line":1212},[105,14717,1976],{"class":111},[105,14719,14720],{"class":115}," m_r;\n",[105,14722,14723],{"class":107,"line":1303},[105,14724,14725],{"class":174},"    \u002F\u002F行为\n",[105,14727,14728,14731,14734],{"class":107,"line":1309},[105,14729,14730],{"class":111},"    double",[105,14732,14733],{"class":1954}," calculateZC",[105,14735,1967],{"class":115},[105,14737,14738],{"class":107,"line":1321},[105,14739,2021],{"class":115},[105,14741,14742,14745,14748,14750,14753,14755],{"class":107,"line":1603},[105,14743,14744],{"class":111},"        return",[105,14746,14747],{"class":164}," 2",[105,14749,571],{"class":111},[105,14751,14752],{"class":115},"PI",[105,14754,571],{"class":111},[105,14756,14757],{"class":115},"m_r;\n",[105,14759,14760],{"class":107,"line":1608},[105,14761,2178],{"class":115},[105,14763,14764],{"class":107,"line":1614},[105,14765,3986],{"class":115},[105,14767,14768,14770,14772],{"class":107,"line":1619},[105,14769,119],{"class":111},[105,14771,1964],{"class":1954},[105,14773,1967],{"class":115},[105,14775,14776],{"class":107,"line":1633},[105,14777,1537],{"class":115},[105,14779,14780],{"class":107,"line":1638},[105,14781,14782],{"class":174},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[105,14784,14785],{"class":107,"line":1644},[105,14786,14787],{"class":174},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[105,14789,14790],{"class":107,"line":1665},[105,14791,14792],{"class":115},"    Circle c1;\n",[105,14794,14795],{"class":107,"line":1670},[105,14796,14797],{"class":174},"    \u002F\u002F给圆对象 的属性进行赋值\n",[105,14799,14800,14803,14805,14807],{"class":107,"line":1684},[105,14801,14802],{"class":115},"    c1.m_r",[105,14804,161],{"class":111},[105,14806,562],{"class":164},[105,14808,1282],{"class":115},[105,14810,14811,14813,14815,14818,14820,14823,14826,14828,14830],{"class":107,"line":1689},[105,14812,1542],{"class":115},[105,14814,1160],{"class":111},[105,14816,14817],{"class":220},"\"圆的周长\"",[105,14819,1160],{"class":111},[105,14821,14822],{"class":115},"c1.",[105,14824,14825],{"class":1954},"calculateZC",[105,14827,2418],{"class":115},[105,14829,1160],{"class":111},[105,14831,1183],{"class":115},[105,14833,14834],{"class":107,"line":1718},[105,14835,1556],{"class":115},[14,14837,14838],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[96,14840,14842],{"className":98,"code":14841,"language":100,"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",[102,14843,14844,14850,14860,14866,14872,14876,14880,14885,14892,14897,14915,14919,14929,14933,14938,14954,14958,14968,14972,14977,14985,14989,15021,15025,15029,15037,15041,15046,15051,15065,15079,15088],{"__ignoreMap":22},[105,14845,14846,14848],{"class":107,"line":108},[105,14847,1940],{"class":111},[105,14849,1943],{"class":220},[105,14851,14852,14854,14856,14858],{"class":107,"line":28},[105,14853,1948],{"class":111},[105,14855,1951],{"class":111},[105,14857,1955],{"class":1954},[105,14859,1282],{"class":115},[105,14861,14862,14864],{"class":107,"line":1171},[105,14863,1940],{"class":111},[105,14865,7741],{"class":220},[105,14867,14868,14870],{"class":107,"line":1186},[105,14869,14686],{"class":111},[105,14871,7754],{"class":1954},[105,14873,14874],{"class":107,"line":1192},[105,14875,1537],{"class":115},[105,14877,14878],{"class":107,"line":1206},[105,14879,14708],{"class":111},[105,14881,14882],{"class":107,"line":1212},[105,14883,14884],{"class":115},"    string m_name;\n",[105,14886,14887,14889],{"class":107,"line":1303},[105,14888,1976],{"class":111},[105,14890,14891],{"class":115}," m_id;\n",[105,14893,14894],{"class":107,"line":1309},[105,14895,14896],{"class":174},"    \u002F\u002F赋值姓名\n",[105,14898,14899,14902,14905,14907,14910,14913],{"class":107,"line":1321},[105,14900,14901],{"class":111},"    void",[105,14903,14904],{"class":1954}," setName",[105,14906,116],{"class":115},[105,14908,14909],{"class":1954},"string",[105,14911,14912],{"class":5208}," name",[105,14914,122],{"class":115},[105,14916,14917],{"class":107,"line":1603},[105,14918,2021],{"class":115},[105,14920,14921,14924,14926],{"class":107,"line":1608},[105,14922,14923],{"class":115},"        m_name",[105,14925,161],{"class":111},[105,14927,14928],{"class":115},"name;\n",[105,14930,14931],{"class":107,"line":1614},[105,14932,2178],{"class":115},[105,14934,14935],{"class":107,"line":1619},[105,14936,14937],{"class":174},"    \u002F\u002F赋值学号\n",[105,14939,14940,14942,14945,14947,14949,14952],{"class":107,"line":1633},[105,14941,14901],{"class":111},[105,14943,14944],{"class":1954}," setId",[105,14946,116],{"class":115},[105,14948,119],{"class":111},[105,14950,14951],{"class":5208}," id",[105,14953,122],{"class":115},[105,14955,14956],{"class":107,"line":1638},[105,14957,2021],{"class":115},[105,14959,14960,14963,14965],{"class":107,"line":1644},[105,14961,14962],{"class":115},"        m_id",[105,14964,161],{"class":111},[105,14966,14967],{"class":115},"id;\n",[105,14969,14970],{"class":107,"line":1665},[105,14971,2178],{"class":115},[105,14973,14974],{"class":107,"line":1670},[105,14975,14976],{"class":174},"    \u002F\u002F打印学生信息\n",[105,14978,14979,14981,14983],{"class":107,"line":1684},[105,14980,14901],{"class":111},[105,14982,9607],{"class":1954},[105,14984,1967],{"class":115},[105,14986,14987],{"class":107,"line":1689},[105,14988,2021],{"class":115},[105,14990,14991,14993,14995,14998,15000,15003,15005,15007,15009,15012,15014,15017,15019],{"class":107,"line":1718},[105,14992,3442],{"class":115},[105,14994,1160],{"class":111},[105,14996,14997],{"class":220},"\"姓名：\"",[105,14999,1160],{"class":111},[105,15001,15002],{"class":115},"m_name",[105,15004,1160],{"class":111},[105,15006,4350],{"class":220},[105,15008,1160],{"class":111},[105,15010,15011],{"class":220},"\"学号：\"",[105,15013,1160],{"class":111},[105,15015,15016],{"class":115},"m_id",[105,15018,1160],{"class":111},[105,15020,1183],{"class":115},[105,15022,15023],{"class":107,"line":1723},[105,15024,2178],{"class":115},[105,15026,15027],{"class":107,"line":1740},[105,15028,3986],{"class":115},[105,15030,15031,15033,15035],{"class":107,"line":1745},[105,15032,119],{"class":111},[105,15034,1964],{"class":1954},[105,15036,1967],{"class":115},[105,15038,15039],{"class":107,"line":1750},[105,15040,1537],{"class":115},[105,15042,15043],{"class":107,"line":1755},[105,15044,15045],{"class":174},"    \u002F\u002F实例化\n",[105,15047,15048],{"class":107,"line":1769},[105,15049,15050],{"class":115},"    Student s1;\n",[105,15052,15053,15056,15059,15061,15063],{"class":107,"line":1774},[105,15054,15055],{"class":115},"    s1.",[105,15057,15058],{"class":1954},"setName",[105,15060,116],{"class":115},[105,15062,7908],{"class":220},[105,15064,2710],{"class":115},[105,15066,15067,15069,15072,15074,15077],{"class":107,"line":2568},[105,15068,15055],{"class":115},[105,15070,15071],{"class":1954},"setId",[105,15073,116],{"class":115},[105,15075,15076],{"class":164},"123456",[105,15078,2710],{"class":115},[105,15080,15081,15083,15086],{"class":107,"line":2582},[105,15082,15055],{"class":115},[105,15084,15085],{"class":1954},"printInfo",[105,15087,5628],{"class":115},[105,15089,15090],{"class":107,"line":2590},[105,15091,1556],{"class":115},[14,15093,15094],{},"类中的属性和行为统称为成员",[14,15096,15097],{},"属性：成员属性(成员变量)",[14,15099,15100],{},"方法：成员函数(成员方法)",[14,15102,15103],{},[265,15104,15105],{},"封装意义二：",[14,15107,15108],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15110,15111],{},"访问权限有三种：",[59,15113,15114,15117,15120],{},[62,15115,15116],{},"public        公共权限",[62,15118,15119],{},"protected 保护权限",[62,15121,15122],{},"private      私有权限",[14,15124,15125],{},[265,15126,15127],{},"示例：",[96,15129,15131],{"className":9933,"code":15130,"language":9935,"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",[102,15132,15133,15138,15143,15148,15153,15157,15164,15168,15173,15177,15182,15186,15191,15196,15201,15205,15210,15215,15222,15226,15230,15238,15242,15253,15265,15277,15281,15285,15289,15297,15301,15306,15318,15326,15334,15338,15348,15352,15360],{"__ignoreMap":22},[105,15134,15135],{"class":107,"line":108},[105,15136,15137],{"class":174},"\u002F\u002F三种权限\n",[105,15139,15140],{"class":107,"line":28},[105,15141,15142],{"class":174},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[105,15144,15145],{"class":107,"line":1171},[105,15146,15147],{"class":174},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[105,15149,15150],{"class":107,"line":1186},[105,15151,15152],{"class":174},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[105,15154,15155],{"class":107,"line":1192},[105,15156,2391],{"emptyLinePlaceholder":32},[105,15158,15159,15161],{"class":107,"line":1206},[105,15160,14686],{"class":111},[105,15162,15163],{"class":1954}," Person\n",[105,15165,15166],{"class":107,"line":1212},[105,15167,1537],{"class":115},[105,15169,15170],{"class":107,"line":1303},[105,15171,15172],{"class":174},"    \u002F\u002F姓名  公共权限\n",[105,15174,15175],{"class":107,"line":1309},[105,15176,14708],{"class":111},[105,15178,15179],{"class":107,"line":1321},[105,15180,15181],{"class":115},"    string m_Name;\n",[105,15183,15184],{"class":107,"line":1603},[105,15185,2391],{"emptyLinePlaceholder":32},[105,15187,15188],{"class":107,"line":1608},[105,15189,15190],{"class":174},"    \u002F\u002F汽车  保护权限\n",[105,15192,15193],{"class":107,"line":1614},[105,15194,15195],{"class":111},"protected:\n",[105,15197,15198],{"class":107,"line":1619},[105,15199,15200],{"class":115},"    string m_Car;\n",[105,15202,15203],{"class":107,"line":1633},[105,15204,2391],{"emptyLinePlaceholder":32},[105,15206,15207],{"class":107,"line":1638},[105,15208,15209],{"class":174},"    \u002F\u002F银行卡密码  私有权限\n",[105,15211,15212],{"class":107,"line":1644},[105,15213,15214],{"class":111},"private:\n",[105,15216,15217,15219],{"class":107,"line":1665},[105,15218,1976],{"class":111},[105,15220,15221],{"class":115}," m_Password;\n",[105,15223,15224],{"class":107,"line":1670},[105,15225,2391],{"emptyLinePlaceholder":32},[105,15227,15228],{"class":107,"line":1684},[105,15229,14708],{"class":111},[105,15231,15232,15234,15236],{"class":107,"line":1689},[105,15233,14901],{"class":111},[105,15235,11377],{"class":1954},[105,15237,1967],{"class":115},[105,15239,15240],{"class":107,"line":1718},[105,15241,2021],{"class":115},[105,15243,15244,15247,15249,15251],{"class":107,"line":1723},[105,15245,15246],{"class":115},"        m_Name ",[105,15248,161],{"class":111},[105,15250,8930],{"class":220},[105,15252,1282],{"class":115},[105,15254,15255,15258,15260,15263],{"class":107,"line":1740},[105,15256,15257],{"class":115},"        m_Car ",[105,15259,161],{"class":111},[105,15261,15262],{"class":220}," \"拖拉机\"",[105,15264,1282],{"class":115},[105,15266,15267,15270,15272,15275],{"class":107,"line":1745},[105,15268,15269],{"class":115},"        m_Password ",[105,15271,161],{"class":111},[105,15273,15274],{"class":164}," 123456",[105,15276,1282],{"class":115},[105,15278,15279],{"class":107,"line":1750},[105,15280,2178],{"class":115},[105,15282,15283],{"class":107,"line":1755},[105,15284,3986],{"class":115},[105,15286,15287],{"class":107,"line":1769},[105,15288,2391],{"emptyLinePlaceholder":32},[105,15290,15291,15293,15295],{"class":107,"line":1774},[105,15292,119],{"class":111},[105,15294,1964],{"class":1954},[105,15296,10845],{"class":115},[105,15298,15299],{"class":107,"line":2568},[105,15300,2391],{"emptyLinePlaceholder":32},[105,15302,15303],{"class":107,"line":2582},[105,15304,15305],{"class":115},"    Person p;\n",[105,15307,15308,15311,15313,15316],{"class":107,"line":2590},[105,15309,15310],{"class":115},"    p.m_Name ",[105,15312,161],{"class":111},[105,15314,15315],{"class":220}," \"李四\"",[105,15317,1282],{"class":115},[105,15319,15320,15323],{"class":107,"line":2595},[105,15321,15322],{"class":174},"    \u002F\u002Fp.m_Car = \"奔驰\";",[105,15324,15325],{"class":174},"  \u002F\u002F保护权限类外访问不到\n",[105,15327,15328,15331],{"class":107,"line":2601},[105,15329,15330],{"class":174},"    \u002F\u002Fp.m_Password = 123;",[105,15332,15333],{"class":174}," \u002F\u002F私有权限类外访问不到\n",[105,15335,15336],{"class":107,"line":2607},[105,15337,2391],{"emptyLinePlaceholder":32},[105,15339,15340,15342,15344,15346],{"class":107,"line":2612},[105,15341,2294],{"class":1954},[105,15343,116],{"class":115},[105,15345,2299],{"class":220},[105,15347,2710],{"class":115},[105,15349,15350],{"class":107,"line":7940},[105,15351,2391],{"emptyLinePlaceholder":32},[105,15353,15354,15356,15358],{"class":107,"line":7964},[105,15355,4081],{"class":111},[105,15357,4084],{"class":164},[105,15359,1282],{"class":115},[105,15361,15362],{"class":107,"line":7969},[105,15363,1556],{"class":115},[76,15365,15367],{"id":15366},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15369,15370,15371,15374,15375],{},"在C++中 struct和class唯一的",[265,15372,15373],{},"区别","就在于 ",[265,15376,15377],{},"默认的访问权限不同",[14,15379,15380],{},"区别：",[1123,15382,15383,15386],{},[62,15384,15385],{},"struct 默认权限为公共",[62,15387,15388],{},"class   默认权限为私有",[96,15390,15392],{"className":9933,"code":15391,"language":9935,"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",[102,15393,15394,15401,15405,15415,15419,15423,15430,15434,15444,15448,15452,15460,15464,15469,15483,15487,15492,15506,15510,15520,15524,15532],{"__ignoreMap":22},[105,15395,15396,15398],{"class":107,"line":108},[105,15397,14686],{"class":111},[105,15399,15400],{"class":1954}," C1\n",[105,15402,15403],{"class":107,"line":28},[105,15404,1537],{"class":115},[105,15406,15407,15409,15412],{"class":107,"line":1171},[105,15408,1976],{"class":111},[105,15410,15411],{"class":115},"  m_A;",[105,15413,15414],{"class":174}," \u002F\u002F默认是私有权限\n",[105,15416,15417],{"class":107,"line":1186},[105,15418,3986],{"class":115},[105,15420,15421],{"class":107,"line":1192},[105,15422,2391],{"emptyLinePlaceholder":32},[105,15424,15425,15427],{"class":107,"line":1206},[105,15426,7751],{"class":111},[105,15428,15429],{"class":1954}," C2\n",[105,15431,15432],{"class":107,"line":1212},[105,15433,1537],{"class":115},[105,15435,15436,15438,15441],{"class":107,"line":1303},[105,15437,1976],{"class":111},[105,15439,15440],{"class":115}," m_A;",[105,15442,15443],{"class":174},"  \u002F\u002F默认是公共权限\n",[105,15445,15446],{"class":107,"line":1309},[105,15447,3986],{"class":115},[105,15449,15450],{"class":107,"line":1321},[105,15451,2391],{"emptyLinePlaceholder":32},[105,15453,15454,15456,15458],{"class":107,"line":1603},[105,15455,119],{"class":111},[105,15457,1964],{"class":1954},[105,15459,10845],{"class":115},[105,15461,15462],{"class":107,"line":1608},[105,15463,2391],{"emptyLinePlaceholder":32},[105,15465,15466],{"class":107,"line":1614},[105,15467,15468],{"class":115},"    C1 c1;\n",[105,15470,15471,15474,15476,15478,15480],{"class":107,"line":1619},[105,15472,15473],{"class":115},"    c1.m_A ",[105,15475,161],{"class":111},[105,15477,2029],{"class":164},[105,15479,171],{"class":115},[105,15481,15482],{"class":174}," \u002F\u002F错误，访问权限是私有\n",[105,15484,15485],{"class":107,"line":1633},[105,15486,2391],{"emptyLinePlaceholder":32},[105,15488,15489],{"class":107,"line":1638},[105,15490,15491],{"class":115},"    C2 c2;\n",[105,15493,15494,15497,15499,15501,15503],{"class":107,"line":1644},[105,15495,15496],{"class":115},"    c2.m_A ",[105,15498,161],{"class":111},[105,15500,2029],{"class":164},[105,15502,171],{"class":115},[105,15504,15505],{"class":174}," \u002F\u002F正确，访问权限是公共\n",[105,15507,15508],{"class":107,"line":1665},[105,15509,2391],{"emptyLinePlaceholder":32},[105,15511,15512,15514,15516,15518],{"class":107,"line":1670},[105,15513,2294],{"class":1954},[105,15515,116],{"class":115},[105,15517,2299],{"class":220},[105,15519,2710],{"class":115},[105,15521,15522],{"class":107,"line":1684},[105,15523,2391],{"emptyLinePlaceholder":32},[105,15525,15526,15528,15530],{"class":107,"line":1689},[105,15527,4081],{"class":111},[105,15529,4084],{"class":164},[105,15531,1282],{"class":115},[105,15533,15534],{"class":107,"line":1718},[105,15535,1556],{"class":115},[76,15537,15539],{"id":15538},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15541,15542],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15544,15545],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15547,15548],{},[265,15549,15127],{},[96,15551,15553],{"className":9933,"code":15552,"language":9935,"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",[102,15554,15555,15565,15569,15573,15578,15592,15601,15605,15615,15619,15626,15630,15634,15638,15643,15652,15659,15663,15668,15684,15707,15720,15727,15731,15740,15744,15748,15753,15769,15779,15783,15787,15791,15799,15803,15813,15817,15825,15829,15833,15841,15845,15849,15854,15867,15890,15894,15899,15912,15934,15938,15943,15957,15965,15969,15979,15983,15991],{"__ignoreMap":22},[105,15556,15557,15559,15562],{"class":107,"line":108},[105,15558,14686],{"class":111},[105,15560,15561],{"class":1954}," Person",[105,15563,15564],{"class":115}," {\n",[105,15566,15567],{"class":107,"line":28},[105,15568,14708],{"class":111},[105,15570,15571],{"class":107,"line":1171},[105,15572,2391],{"emptyLinePlaceholder":32},[105,15574,15575],{"class":107,"line":1186},[105,15576,15577],{"class":174},"    \u002F\u002F姓名设置可读可写\n",[105,15579,15580,15582,15584,15586,15588,15590],{"class":107,"line":1192},[105,15581,14901],{"class":111},[105,15583,14904],{"class":1954},[105,15585,116],{"class":115},[105,15587,14909],{"class":1954},[105,15589,14912],{"class":5208},[105,15591,12434],{"class":115},[105,15593,15594,15596,15598],{"class":107,"line":1206},[105,15595,15246],{"class":115},[105,15597,161],{"class":111},[105,15599,15600],{"class":115}," name;\n",[105,15602,15603],{"class":107,"line":1212},[105,15604,2178],{"class":115},[105,15606,15607,15610,15613],{"class":107,"line":1303},[105,15608,15609],{"class":1954},"    string",[105,15611,15612],{"class":1954}," getName",[105,15614,1967],{"class":115},[105,15616,15617],{"class":107,"line":1309},[105,15618,2021],{"class":115},[105,15620,15621,15623],{"class":107,"line":1321},[105,15622,14744],{"class":111},[105,15624,15625],{"class":115}," m_Name;\n",[105,15627,15628],{"class":107,"line":1603},[105,15629,2178],{"class":115},[105,15631,15632],{"class":107,"line":1608},[105,15633,2391],{"emptyLinePlaceholder":32},[105,15635,15636],{"class":107,"line":1614},[105,15637,2391],{"emptyLinePlaceholder":32},[105,15639,15640],{"class":107,"line":1619},[105,15641,15642],{"class":174},"    \u002F\u002F获取年龄 \n",[105,15644,15645,15647,15650],{"class":107,"line":1633},[105,15646,1976],{"class":111},[105,15648,15649],{"class":1954}," getAge",[105,15651,10845],{"class":115},[105,15653,15654,15656],{"class":107,"line":1638},[105,15655,14744],{"class":111},[105,15657,15658],{"class":115}," m_Age;\n",[105,15660,15661],{"class":107,"line":1644},[105,15662,2178],{"class":115},[105,15664,15665],{"class":107,"line":1665},[105,15666,15667],{"class":174},"    \u002F\u002F设置年龄\n",[105,15669,15670,15672,15675,15677,15679,15682],{"class":107,"line":1670},[105,15671,14901],{"class":111},[105,15673,15674],{"class":1954}," setAge",[105,15676,116],{"class":115},[105,15678,119],{"class":111},[105,15680,15681],{"class":5208}," age",[105,15683,12434],{"class":115},[105,15685,15686,15688,15691,15693,15695,15697,15700,15702,15705],{"class":107,"line":1684},[105,15687,2488],{"class":111},[105,15689,15690],{"class":115}," (age ",[105,15692,1026],{"class":111},[105,15694,4084],{"class":164},[105,15696,3246],{"class":111},[105,15698,15699],{"class":115}," age ",[105,15701,1076],{"class":111},[105,15703,15704],{"class":164}," 150",[105,15706,12434],{"class":115},[105,15708,15709,15711,15713,15716,15718],{"class":107,"line":1689},[105,15710,9711],{"class":115},[105,15712,1160],{"class":111},[105,15714,15715],{"class":220}," \"你个老妖精!\"",[105,15717,1436],{"class":111},[105,15719,8832],{"class":115},[105,15721,15722,15725],{"class":107,"line":1718},[105,15723,15724],{"class":111},"            return",[105,15726,1282],{"class":115},[105,15728,15729],{"class":107,"line":1723},[105,15730,2520],{"class":115},[105,15732,15733,15736,15738],{"class":107,"line":1740},[105,15734,15735],{"class":115},"        m_Age ",[105,15737,161],{"class":111},[105,15739,7789],{"class":115},[105,15741,15742],{"class":107,"line":1745},[105,15743,2178],{"class":115},[105,15745,15746],{"class":107,"line":1750},[105,15747,2391],{"emptyLinePlaceholder":32},[105,15749,15750],{"class":107,"line":1755},[105,15751,15752],{"class":174},"    \u002F\u002F情人设置为只写\n",[105,15754,15755,15757,15760,15762,15764,15767],{"class":107,"line":1769},[105,15756,14901],{"class":111},[105,15758,15759],{"class":1954}," setLover",[105,15761,116],{"class":115},[105,15763,14909],{"class":1954},[105,15765,15766],{"class":5208}," lover",[105,15768,12434],{"class":115},[105,15770,15771,15774,15776],{"class":107,"line":1774},[105,15772,15773],{"class":115},"        m_Lover ",[105,15775,161],{"class":111},[105,15777,15778],{"class":115}," lover;\n",[105,15780,15781],{"class":107,"line":2568},[105,15782,2178],{"class":115},[105,15784,15785],{"class":107,"line":2582},[105,15786,2391],{"emptyLinePlaceholder":32},[105,15788,15789],{"class":107,"line":2590},[105,15790,15214],{"class":111},[105,15792,15793,15796],{"class":107,"line":2595},[105,15794,15795],{"class":115},"    string m_Name;",[105,15797,15798],{"class":174}," \u002F\u002F可读可写  姓名\n",[105,15800,15801],{"class":107,"line":2601},[105,15802,13202],{"class":115},[105,15804,15805,15807,15810],{"class":107,"line":2607},[105,15806,1976],{"class":111},[105,15808,15809],{"class":115}," m_Age;",[105,15811,15812],{"class":174}," \u002F\u002F只读  年龄\n",[105,15814,15815],{"class":107,"line":2612},[105,15816,2391],{"emptyLinePlaceholder":32},[105,15818,15819,15822],{"class":107,"line":7940},[105,15820,15821],{"class":115},"    string m_Lover;",[105,15823,15824],{"class":174}," \u002F\u002F只写  情人\n",[105,15826,15827],{"class":107,"line":7964},[105,15828,3986],{"class":115},[105,15830,15831],{"class":107,"line":7969},[105,15832,2391],{"emptyLinePlaceholder":32},[105,15834,15835,15837,15839],{"class":107,"line":7975},[105,15836,119],{"class":111},[105,15838,1964],{"class":1954},[105,15840,10845],{"class":115},[105,15842,15843],{"class":107,"line":8002},[105,15844,2391],{"emptyLinePlaceholder":32},[105,15846,15847],{"class":107,"line":8007},[105,15848,15305],{"class":115},[105,15850,15851],{"class":107,"line":8013},[105,15852,15853],{"class":174},"    \u002F\u002F姓名设置\n",[105,15855,15856,15859,15861,15863,15865],{"class":107,"line":8025},[105,15857,15858],{"class":115},"    p.",[105,15860,15058],{"class":1954},[105,15862,116],{"class":115},[105,15864,7908],{"class":220},[105,15866,2710],{"class":115},[105,15868,15869,15871,15873,15876,15878,15881,15884,15886,15888],{"class":107,"line":8037},[105,15870,6521],{"class":115},[105,15872,1160],{"class":111},[105,15874,15875],{"class":220}," \"姓名： \"",[105,15877,1436],{"class":111},[105,15879,15880],{"class":115}," p.",[105,15882,15883],{"class":1954},"getName",[105,15885,13042],{"class":115},[105,15887,1160],{"class":111},[105,15889,8832],{"class":115},[105,15891,15892],{"class":107,"line":8049},[105,15893,2391],{"emptyLinePlaceholder":32},[105,15895,15896],{"class":107,"line":9708},[105,15897,15898],{"class":174},"    \u002F\u002F年龄设置\n",[105,15900,15901,15903,15906,15908,15910],{"class":107,"line":9733},[105,15902,15858],{"class":115},[105,15904,15905],{"class":1954},"setAge",[105,15907,116],{"class":115},[105,15909,772],{"class":164},[105,15911,2710],{"class":115},[105,15913,15914,15916,15918,15921,15923,15925,15928,15930,15932],{"class":107,"line":9756},[105,15915,6521],{"class":115},[105,15917,1160],{"class":111},[105,15919,15920],{"class":220}," \"年龄： \"",[105,15922,1436],{"class":111},[105,15924,15880],{"class":115},[105,15926,15927],{"class":1954},"getAge",[105,15929,13042],{"class":115},[105,15931,1160],{"class":111},[105,15933,8832],{"class":115},[105,15935,15936],{"class":107,"line":9780},[105,15937,2391],{"emptyLinePlaceholder":32},[105,15939,15940],{"class":107,"line":9785},[105,15941,15942],{"class":174},"    \u002F\u002F情人设置\n",[105,15944,15945,15947,15950,15952,15955],{"class":107,"line":9790},[105,15946,15858],{"class":115},[105,15948,15949],{"class":1954},"setLover",[105,15951,116],{"class":115},[105,15953,15954],{"class":220},"\"苍井\"",[105,15956,2710],{"class":115},[105,15958,15959,15962],{"class":107,"line":9795},[105,15960,15961],{"class":174},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[105,15963,15964],{"class":174},"  \u002F\u002F只写属性，不可以读取\n",[105,15966,15967],{"class":107,"line":9804},[105,15968,2391],{"emptyLinePlaceholder":32},[105,15970,15971,15973,15975,15977],{"class":107,"line":9809},[105,15972,2294],{"class":1954},[105,15974,116],{"class":115},[105,15976,2299],{"class":220},[105,15978,2710],{"class":115},[105,15980,15981],{"class":107,"line":9815},[105,15982,2391],{"emptyLinePlaceholder":32},[105,15984,15985,15987,15989],{"class":107,"line":9836},[105,15986,4081],{"class":111},[105,15988,4084],{"class":164},[105,15990,1282],{"class":115},[105,15992,15993],{"class":107,"line":9842},[105,15994,1556],{"class":115},[76,15996,15998],{"id":15997},"_814封装案例","8.1.4封装案例",[59,16000,16001],{},[62,16002,16003,16006],{},[265,16004,16005],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1123,16008,16009,16012],{},[62,16010,16011],{},"求出立方体的面积和体积",[62,16013,16014],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[96,16016,16018],{"className":98,"code":16017,"language":100,"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",[102,16019,16020,16026,16036,16043,16047,16051,16056,16086,16090,16100,16110,16120,16124,16133,16137,16173,16177,16186,16190,16206,16210,16215,16224,16228,16235,16239,16248,16252,16259,16263,16272,16276,16283,16287,16292,16309,16313,16359,16363,16372,16376,16380,16384,16393,16397,16401,16406,16410,16416,16422,16428,16432,16436,16441,16463,16467,16521,16525,16533,16537,16542,16547,16560,16567,16583,16594,16600,16623,16629,16652,16666,16686,16692,16703,16726,16748,16753,16759,16773,16786,16791,16805,16810,16816,16821,16835,16840,16845,16859,16871,16876,16889,16894,16899,16904,16917,16922],{"__ignoreMap":22},[105,16021,16022,16024],{"class":107,"line":108},[105,16023,1940],{"class":111},[105,16025,1943],{"class":220},[105,16027,16028,16030,16032,16034],{"class":107,"line":28},[105,16029,1948],{"class":111},[105,16031,1951],{"class":111},[105,16033,1955],{"class":1954},[105,16035,1282],{"class":115},[105,16037,16038,16040],{"class":107,"line":1171},[105,16039,14686],{"class":111},[105,16041,16042],{"class":1954}," Cube\n",[105,16044,16045],{"class":107,"line":1186},[105,16046,1537],{"class":115},[105,16048,16049],{"class":107,"line":1192},[105,16050,14708],{"class":111},[105,16052,16053],{"class":107,"line":1206},[105,16054,16055],{"class":174},"    \u002F\u002F输入长宽高\n",[105,16057,16058,16060,16063,16065,16067,16070,16072,16074,16077,16079,16081,16084],{"class":107,"line":1212},[105,16059,14901],{"class":111},[105,16061,16062],{"class":1954}," setLwh",[105,16064,116],{"class":115},[105,16066,119],{"class":111},[105,16068,16069],{"class":5208}," l",[105,16071,494],{"class":115},[105,16073,119],{"class":111},[105,16075,16076],{"class":5208}," w",[105,16078,494],{"class":115},[105,16080,119],{"class":111},[105,16082,16083],{"class":5208}," h",[105,16085,122],{"class":115},[105,16087,16088],{"class":107,"line":1303},[105,16089,2021],{"class":115},[105,16091,16092,16095,16097],{"class":107,"line":1309},[105,16093,16094],{"class":115},"        m_L",[105,16096,161],{"class":111},[105,16098,16099],{"class":115},"l;\n",[105,16101,16102,16105,16107],{"class":107,"line":1321},[105,16103,16104],{"class":115},"        m_W",[105,16106,161],{"class":111},[105,16108,16109],{"class":115},"w;\n",[105,16111,16112,16115,16117],{"class":107,"line":1603},[105,16113,16114],{"class":115},"        m_H",[105,16116,161],{"class":111},[105,16118,16119],{"class":115},"h;\n",[105,16121,16122],{"class":107,"line":1608},[105,16123,2178],{"class":115},[105,16125,16126,16128,16131],{"class":107,"line":1614},[105,16127,1976],{"class":111},[105,16129,16130],{"class":1954}," mianji",[105,16132,1967],{"class":115},[105,16134,16135],{"class":107,"line":1619},[105,16136,2021],{"class":115},[105,16138,16139,16141,16143,16145,16148,16150,16153,16155,16158,16160,16163,16165,16168,16170],{"class":107,"line":1633},[105,16140,14744],{"class":111},[105,16142,14747],{"class":164},[105,16144,571],{"class":111},[105,16146,16147],{"class":115},"(m_L",[105,16149,571],{"class":111},[105,16151,16152],{"class":115},"m_W ",[105,16154,597],{"class":111},[105,16156,16157],{"class":115}," m_L",[105,16159,571],{"class":111},[105,16161,16162],{"class":115},"m_H ",[105,16164,597],{"class":111},[105,16166,16167],{"class":115}," m_W",[105,16169,571],{"class":111},[105,16171,16172],{"class":115},"m_H);\n",[105,16174,16175],{"class":107,"line":1638},[105,16176,2178],{"class":115},[105,16178,16179,16181,16184],{"class":107,"line":1644},[105,16180,1976],{"class":111},[105,16182,16183],{"class":1954}," tiji",[105,16185,1967],{"class":115},[105,16187,16188],{"class":107,"line":1665},[105,16189,2021],{"class":115},[105,16191,16192,16194,16196,16198,16201,16203],{"class":107,"line":1670},[105,16193,14744],{"class":111},[105,16195,16157],{"class":115},[105,16197,571],{"class":111},[105,16199,16200],{"class":115},"m_W",[105,16202,571],{"class":111},[105,16204,16205],{"class":115},"m_H;\n",[105,16207,16208],{"class":107,"line":1684},[105,16209,2178],{"class":115},[105,16211,16212],{"class":107,"line":1689},[105,16213,16214],{"class":174},"    \u002F\u002F获取长宽高\n",[105,16216,16217,16219,16222],{"class":107,"line":1718},[105,16218,1976],{"class":111},[105,16220,16221],{"class":1954}," getLength",[105,16223,1967],{"class":115},[105,16225,16226],{"class":107,"line":1723},[105,16227,2021],{"class":115},[105,16229,16230,16232],{"class":107,"line":1740},[105,16231,14744],{"class":111},[105,16233,16234],{"class":115}," m_L;\n",[105,16236,16237],{"class":107,"line":1745},[105,16238,2178],{"class":115},[105,16240,16241,16243,16246],{"class":107,"line":1750},[105,16242,1976],{"class":111},[105,16244,16245],{"class":1954}," getWidth",[105,16247,1967],{"class":115},[105,16249,16250],{"class":107,"line":1755},[105,16251,2021],{"class":115},[105,16253,16254,16256],{"class":107,"line":1769},[105,16255,14744],{"class":111},[105,16257,16258],{"class":115}," m_W;\n",[105,16260,16261],{"class":107,"line":1774},[105,16262,2178],{"class":115},[105,16264,16265,16267,16270],{"class":107,"line":2568},[105,16266,1976],{"class":111},[105,16268,16269],{"class":1954}," getHeight",[105,16271,1967],{"class":115},[105,16273,16274],{"class":107,"line":2582},[105,16275,2021],{"class":115},[105,16277,16278,16280],{"class":107,"line":2590},[105,16279,14744],{"class":111},[105,16281,16282],{"class":115}," m_H;\n",[105,16284,16285],{"class":107,"line":2595},[105,16286,2178],{"class":115},[105,16288,16289],{"class":107,"line":2601},[105,16290,16291],{"class":174},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[105,16293,16294,16297,16300,16302,16305,16307],{"class":107,"line":2607},[105,16295,16296],{"class":111},"    bool",[105,16298,16299],{"class":1954}," isEqual",[105,16301,116],{"class":115},[105,16303,16304],{"class":1954},"Cube",[105,16306,2840],{"class":5208},[105,16308,122],{"class":115},[105,16310,16311],{"class":107,"line":2612},[105,16312,2021],{"class":115},[105,16314,16315,16317,16320,16323,16325,16327,16330,16332,16335,16338,16340,16342,16345,16347,16349,16352,16354,16356],{"class":107,"line":7940},[105,16316,2488],{"class":111},[105,16318,16319],{"class":115}," (c.",[105,16321,16322],{"class":1954},"getLength",[105,16324,13042],{"class":115},[105,16326,2940],{"class":111},[105,16328,16329],{"class":115}," m_L ",[105,16331,1706],{"class":111},[105,16333,16334],{"class":115}," c.",[105,16336,16337],{"class":1954},"getWidth",[105,16339,13042],{"class":115},[105,16341,2940],{"class":111},[105,16343,16344],{"class":115}," m_W ",[105,16346,1706],{"class":111},[105,16348,16334],{"class":115},[105,16350,16351],{"class":1954},"getHeight",[105,16353,13042],{"class":115},[105,16355,2940],{"class":111},[105,16357,16358],{"class":115}," m_H)\n",[105,16360,16361],{"class":107,"line":7964},[105,16362,2501],{"class":115},[105,16364,16365,16367,16370],{"class":107,"line":7969},[105,16366,15724],{"class":111},[105,16368,16369],{"class":164}," true",[105,16371,1282],{"class":115},[105,16373,16374],{"class":107,"line":7975},[105,16375,2520],{"class":115},[105,16377,16378],{"class":107,"line":8002},[105,16379,2561],{"class":111},[105,16381,16382],{"class":107,"line":8007},[105,16383,2501],{"class":115},[105,16385,16386,16388,16391],{"class":107,"line":8013},[105,16387,15724],{"class":111},[105,16389,16390],{"class":164}," false",[105,16392,1282],{"class":115},[105,16394,16395],{"class":107,"line":8025},[105,16396,2520],{"class":115},[105,16398,16399],{"class":107,"line":8037},[105,16400,2178],{"class":115},[105,16402,16403],{"class":107,"line":8049},[105,16404,16405],{"class":174},"    \u002F\u002F私有属性\n",[105,16407,16408],{"class":107,"line":9708},[105,16409,15214],{"class":111},[105,16411,16412,16414],{"class":107,"line":9733},[105,16413,1976],{"class":111},[105,16415,16234],{"class":115},[105,16417,16418,16420],{"class":107,"line":9756},[105,16419,1976],{"class":111},[105,16421,16258],{"class":115},[105,16423,16424,16426],{"class":107,"line":9780},[105,16425,1976],{"class":111},[105,16427,16282],{"class":115},[105,16429,16430],{"class":107,"line":9785},[105,16431,2391],{"emptyLinePlaceholder":32},[105,16433,16434],{"class":107,"line":9790},[105,16435,3986],{"class":115},[105,16437,16438],{"class":107,"line":9795},[105,16439,16440],{"class":174},"\u002F\u002F全局函数判断两个立方体是否相等\n",[105,16442,16443,16445,16447,16449,16451,16454,16456,16458,16461],{"class":107,"line":9804},[105,16444,1346],{"class":111},[105,16446,16299],{"class":1954},[105,16448,116],{"class":115},[105,16450,16304],{"class":1954},[105,16452,16453],{"class":5208}," c1",[105,16455,494],{"class":115},[105,16457,16304],{"class":1954},[105,16459,16460],{"class":5208}," c2",[105,16462,122],{"class":115},[105,16464,16465],{"class":107,"line":9809},[105,16466,1537],{"class":115},[105,16468,16469,16471,16474,16476,16478,16480,16483,16485,16488,16490,16492,16494,16496,16498,16500,16502,16504,16506,16508,16510,16512,16514,16516,16518],{"class":107,"line":9815},[105,16470,4081],{"class":111},[105,16472,16473],{"class":115}," (c1.",[105,16475,16322],{"class":1954},[105,16477,13042],{"class":115},[105,16479,2940],{"class":111},[105,16481,16482],{"class":115}," c2.",[105,16484,16322],{"class":1954},[105,16486,16487],{"class":115},"()) ",[105,16489,1706],{"class":111},[105,16491,16473],{"class":115},[105,16493,16337],{"class":1954},[105,16495,13042],{"class":115},[105,16497,2940],{"class":111},[105,16499,16482],{"class":115},[105,16501,16337],{"class":1954},[105,16503,16487],{"class":115},[105,16505,1706],{"class":111},[105,16507,16473],{"class":115},[105,16509,16351],{"class":1954},[105,16511,13042],{"class":115},[105,16513,2940],{"class":111},[105,16515,16482],{"class":115},[105,16517,16351],{"class":1954},[105,16519,16520],{"class":115},"());\n",[105,16522,16523],{"class":107,"line":9836},[105,16524,1556],{"class":115},[105,16526,16527,16529,16531],{"class":107,"line":9842},[105,16528,119],{"class":111},[105,16530,1964],{"class":1954},[105,16532,1967],{"class":115},[105,16534,16535],{"class":107,"line":9856},[105,16536,1537],{"class":115},[105,16538,16539],{"class":107,"line":9862},[105,16540,16541],{"class":115},"    Cube c1;\n",[105,16543,16544],{"class":107,"line":9889},[105,16545,16546],{"class":174},"    \u002F\u002F输入立方体的长宽高\n",[105,16548,16549,16551,16553,16556,16558],{"class":107,"line":9898},[105,16550,1542],{"class":115},[105,16552,1160],{"class":111},[105,16554,16555],{"class":220},"\"请输入第一个立方体的长、宽、高：\"",[105,16557,1160],{"class":111},[105,16559,1183],{"class":115},[105,16561,16562,16564],{"class":107,"line":9904},[105,16563,1976],{"class":111},[105,16565,16566],{"class":115}," l,w,h,l1,w1,h1;\n",[105,16568,16569,16571,16573,16575,16577,16579,16581],{"class":107,"line":9912},[105,16570,2003],{"class":115},[105,16572,1421],{"class":111},[105,16574,634],{"class":115},[105,16576,1421],{"class":111},[105,16578,911],{"class":115},[105,16580,1421],{"class":111},[105,16582,16119],{"class":115},[105,16584,16585,16588,16591],{"class":107,"line":9917},[105,16586,16587],{"class":115},"    c1.",[105,16589,16590],{"class":1954},"setLwh",[105,16592,16593],{"class":115},"(l,w,h);\n",[105,16595,16597],{"class":107,"line":16596},66,[105,16598,16599],{"class":174},"    \u002F\u002F面积\n",[105,16601,16603,16605,16607,16610,16612,16614,16617,16619,16621],{"class":107,"line":16602},67,[105,16604,1542],{"class":115},[105,16606,1160],{"class":111},[105,16608,16609],{"class":220},"\"立方体的表面积为：\"",[105,16611,1160],{"class":111},[105,16613,14822],{"class":115},[105,16615,16616],{"class":1954},"mianji",[105,16618,2418],{"class":115},[105,16620,1160],{"class":111},[105,16622,1183],{"class":115},[105,16624,16626],{"class":107,"line":16625},68,[105,16627,16628],{"class":174},"    \u002F\u002F体积\n",[105,16630,16632,16634,16636,16639,16641,16643,16646,16648,16650],{"class":107,"line":16631},69,[105,16633,1542],{"class":115},[105,16635,1160],{"class":111},[105,16637,16638],{"class":220},"\"立方体的体积为：\"",[105,16640,1160],{"class":111},[105,16642,14822],{"class":115},[105,16644,16645],{"class":1954},"tiji",[105,16647,2418],{"class":115},[105,16649,1160],{"class":111},[105,16651,1183],{"class":115},[105,16653,16655,16657,16659,16662,16664],{"class":107,"line":16654},70,[105,16656,1542],{"class":115},[105,16658,1160],{"class":111},[105,16660,16661],{"class":220},"\"请输入第二个立方体的长、宽、高：\"",[105,16663,1160],{"class":111},[105,16665,1183],{"class":115},[105,16667,16669,16671,16673,16676,16678,16681,16683],{"class":107,"line":16668},71,[105,16670,2003],{"class":115},[105,16672,1421],{"class":111},[105,16674,16675],{"class":115},"l1",[105,16677,1421],{"class":111},[105,16679,16680],{"class":115},"w1",[105,16682,1421],{"class":111},[105,16684,16685],{"class":115},"h1;\n",[105,16687,16689],{"class":107,"line":16688},72,[105,16690,16691],{"class":115},"    Cube c2;\n",[105,16693,16695,16698,16700],{"class":107,"line":16694},73,[105,16696,16697],{"class":115},"    c2.",[105,16699,16590],{"class":1954},[105,16701,16702],{"class":115},"(l1,w1,h1);\n",[105,16704,16706,16708,16710,16713,16715,16718,16720,16722,16724],{"class":107,"line":16705},74,[105,16707,1542],{"class":115},[105,16709,1160],{"class":111},[105,16711,16712],{"class":220},"\"第二个立方体的表面积为：\"",[105,16714,1160],{"class":111},[105,16716,16717],{"class":115},"c2.",[105,16719,16616],{"class":1954},[105,16721,2418],{"class":115},[105,16723,1160],{"class":111},[105,16725,1183],{"class":115},[105,16727,16729,16731,16733,16736,16738,16740,16742,16744,16746],{"class":107,"line":16728},75,[105,16730,1542],{"class":115},[105,16732,1160],{"class":111},[105,16734,16735],{"class":220},"\"第二个立方体的体积为：\"",[105,16737,1160],{"class":111},[105,16739,16717],{"class":115},[105,16741,16645],{"class":1954},[105,16743,2418],{"class":115},[105,16745,1160],{"class":111},[105,16747,1183],{"class":115},[105,16749,16751],{"class":107,"line":16750},76,[105,16752,2391],{"emptyLinePlaceholder":32},[105,16754,16756],{"class":107,"line":16755},77,[105,16757,16758],{"class":174},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[105,16760,16762,16764,16766,16769,16771],{"class":107,"line":16761},78,[105,16763,1542],{"class":115},[105,16765,1160],{"class":111},[105,16767,16768],{"class":220},"\"内部函数判断结果：\"",[105,16770,1160],{"class":111},[105,16772,1183],{"class":115},[105,16774,16776,16778,16780,16783],{"class":107,"line":16775},79,[105,16777,3092],{"class":111},[105,16779,16473],{"class":115},[105,16781,16782],{"class":1954},"isEqual",[105,16784,16785],{"class":115},"(c2))\n",[105,16787,16789],{"class":107,"line":16788},80,[105,16790,2021],{"class":115},[105,16792,16794,16796,16798,16801,16803],{"class":107,"line":16793},81,[105,16795,3442],{"class":115},[105,16797,1160],{"class":111},[105,16799,16800],{"class":220},"\"两个立方体相等\"",[105,16802,1160],{"class":111},[105,16804,1183],{"class":115},[105,16806,16808],{"class":107,"line":16807},82,[105,16809,2178],{"class":115},[105,16811,16813],{"class":107,"line":16812},83,[105,16814,16815],{"class":111},"    else\n",[105,16817,16819],{"class":107,"line":16818},84,[105,16820,2021],{"class":115},[105,16822,16824,16826,16828,16831,16833],{"class":107,"line":16823},85,[105,16825,3442],{"class":115},[105,16827,1160],{"class":111},[105,16829,16830],{"class":220},"\"两个立方体不相等\"",[105,16832,1160],{"class":111},[105,16834,1183],{"class":115},[105,16836,16838],{"class":107,"line":16837},86,[105,16839,2178],{"class":115},[105,16841,16843],{"class":107,"line":16842},87,[105,16844,2391],{"emptyLinePlaceholder":32},[105,16846,16848,16850,16852,16855,16857],{"class":107,"line":16847},88,[105,16849,1542],{"class":115},[105,16851,1160],{"class":111},[105,16853,16854],{"class":220},"\"全局函数判断结果：\"",[105,16856,1160],{"class":111},[105,16858,1183],{"class":115},[105,16860,16862,16864,16866,16868],{"class":107,"line":16861},89,[105,16863,3092],{"class":111},[105,16865,1649],{"class":115},[105,16867,16782],{"class":1954},[105,16869,16870],{"class":115},"(c1, c2))\n",[105,16872,16874],{"class":107,"line":16873},90,[105,16875,2021],{"class":115},[105,16877,16879,16881,16883,16885,16887],{"class":107,"line":16878},91,[105,16880,3442],{"class":115},[105,16882,1160],{"class":111},[105,16884,16800],{"class":220},[105,16886,1160],{"class":111},[105,16888,1183],{"class":115},[105,16890,16892],{"class":107,"line":16891},92,[105,16893,2178],{"class":115},[105,16895,16897],{"class":107,"line":16896},93,[105,16898,16815],{"class":111},[105,16900,16902],{"class":107,"line":16901},94,[105,16903,2021],{"class":115},[105,16905,16907,16909,16911,16913,16915],{"class":107,"line":16906},95,[105,16908,3442],{"class":115},[105,16910,1160],{"class":111},[105,16912,16830],{"class":220},[105,16914,1160],{"class":111},[105,16916,1183],{"class":115},[105,16918,16920],{"class":107,"line":16919},96,[105,16921,2178],{"class":115},[105,16923,16925],{"class":107,"line":16924},97,[105,16926,1556],{"class":115},[59,16928,16929],{"start":28},[62,16930,16931],{},[265,16932,16933],{},"练习案例2：点和圆的关系",[1123,16935,16936],{},[62,16937,16938],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[96,16940,16942],{"className":98,"code":16941,"language":100,"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",[102,16943,16944,16950,16960,16967,16974,16978,16982,16987,17021,17026,17042,17056,17060,17064,17071,17078,17082,17088,17092,17096,17100,17122,17145,17150,17164,17179,17183,17187,17193,17198,17203,17207,17233,17237,17267,17295,17323,17340,17344,17357,17361,17365,17369,17382,17386,17390,17398,17402,17406,17410,17415,17419,17430,17437,17446,17456,17467,17474,17487,17498,17508,17519,17526,17540,17545,17555,17563],{"__ignoreMap":22},[105,16945,16946,16948],{"class":107,"line":108},[105,16947,1940],{"class":111},[105,16949,1943],{"class":220},[105,16951,16952,16954,16956,16958],{"class":107,"line":28},[105,16953,1948],{"class":111},[105,16955,1951],{"class":111},[105,16957,1955],{"class":1954},[105,16959,1282],{"class":115},[105,16961,16962,16964],{"class":107,"line":1171},[105,16963,1940],{"class":111},[105,16965,16966],{"class":220},"\u003Ccmath>\n",[105,16968,16969,16971],{"class":107,"line":1186},[105,16970,14686],{"class":111},[105,16972,16973],{"class":1954}," Point\n",[105,16975,16976],{"class":107,"line":1192},[105,16977,1537],{"class":115},[105,16979,16980],{"class":107,"line":1206},[105,16981,14708],{"class":111},[105,16983,16984],{"class":107,"line":1212},[105,16985,16986],{"class":174},"    \u002F\u002F赋值\n",[105,16988,16989,16991,16994,16996,16998,17001,17003,17005,17008,17011,17013,17016,17018],{"class":107,"line":1303},[105,16990,14901],{"class":111},[105,16992,16993],{"class":1954}," setPoint",[105,16995,116],{"class":115},[105,16997,14029],{"class":111},[105,16999,17000],{"class":5208}," x",[105,17002,12427],{"class":115},[105,17004,14029],{"class":111},[105,17006,17007],{"class":5208}," y",[105,17009,17010],{"class":115},") { m_x ",[105,17012,161],{"class":111},[105,17014,17015],{"class":115}," x; m_y ",[105,17017,161],{"class":111},[105,17019,17020],{"class":115}," y; }\n",[105,17022,17023],{"class":107,"line":1309},[105,17024,17025],{"class":174},"    \u002F\u002F获取坐标\n",[105,17027,17028,17030,17033,17036,17039],{"class":107,"line":1321},[105,17029,14730],{"class":111},[105,17031,17032],{"class":1954}," getX",[105,17034,17035],{"class":115},"() { ",[105,17037,17038],{"class":111},"return",[105,17040,17041],{"class":115}," m_x; }\n",[105,17043,17044,17046,17049,17051,17053],{"class":107,"line":1603},[105,17045,14730],{"class":111},[105,17047,17048],{"class":1954}," getY",[105,17050,17035],{"class":115},[105,17052,17038],{"class":111},[105,17054,17055],{"class":115}," m_y; }\n",[105,17057,17058],{"class":107,"line":1608},[105,17059,2391],{"emptyLinePlaceholder":32},[105,17061,17062],{"class":107,"line":1614},[105,17063,15214],{"class":111},[105,17065,17066,17068],{"class":107,"line":1619},[105,17067,14730],{"class":111},[105,17069,17070],{"class":115}," m_x;\n",[105,17072,17073,17075],{"class":107,"line":1633},[105,17074,14730],{"class":111},[105,17076,17077],{"class":115}," m_y;\n",[105,17079,17080],{"class":107,"line":1638},[105,17081,3986],{"class":115},[105,17083,17084,17086],{"class":107,"line":1644},[105,17085,14686],{"class":111},[105,17087,14689],{"class":1954},[105,17089,17090],{"class":107,"line":1665},[105,17091,1537],{"class":115},[105,17093,17094],{"class":107,"line":1670},[105,17095,14708],{"class":111},[105,17097,17098],{"class":107,"line":1684},[105,17099,16986],{"class":174},[105,17101,17102,17104,17107,17109,17111,17114,17117,17119],{"class":107,"line":1689},[105,17103,14901],{"class":111},[105,17105,17106],{"class":1954}," setRadius",[105,17108,116],{"class":115},[105,17110,14029],{"class":111},[105,17112,17113],{"class":5208}," r",[105,17115,17116],{"class":115},") { m_r ",[105,17118,161],{"class":111},[105,17120,17121],{"class":115}," r; }\n",[105,17123,17124,17126,17129,17131,17134,17137,17140,17142],{"class":107,"line":1718},[105,17125,14901],{"class":111},[105,17127,17128],{"class":1954}," setCenter",[105,17130,116],{"class":115},[105,17132,17133],{"class":1954},"Point",[105,17135,17136],{"class":5208}," center",[105,17138,17139],{"class":115},") { m_center ",[105,17141,161],{"class":111},[105,17143,17144],{"class":115}," center; }\n",[105,17146,17147],{"class":107,"line":1723},[105,17148,17149],{"class":174},"    \u002F\u002F获取属性\n",[105,17151,17152,17154,17157,17159,17161],{"class":107,"line":1740},[105,17153,14730],{"class":111},[105,17155,17156],{"class":1954}," getRadius",[105,17158,17035],{"class":115},[105,17160,17038],{"class":111},[105,17162,17163],{"class":115}," m_r; }\n",[105,17165,17166,17169,17172,17174,17176],{"class":107,"line":1745},[105,17167,17168],{"class":1954},"    Point",[105,17170,17171],{"class":1954}," getCenter",[105,17173,17035],{"class":115},[105,17175,17038],{"class":111},[105,17177,17178],{"class":115}," m_center; }\n",[105,17180,17181],{"class":107,"line":1750},[105,17182,2391],{"emptyLinePlaceholder":32},[105,17184,17185],{"class":107,"line":1755},[105,17186,15214],{"class":111},[105,17188,17189,17191],{"class":107,"line":1769},[105,17190,14730],{"class":111},[105,17192,14720],{"class":115},[105,17194,17195],{"class":107,"line":1774},[105,17196,17197],{"class":174},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[105,17199,17200],{"class":107,"line":2568},[105,17201,17202],{"class":115},"    Point m_center;\n",[105,17204,17205],{"class":107,"line":2582},[105,17206,3986],{"class":115},[105,17208,17209,17211,17214,17216,17219,17221,17223,17225,17227,17229,17231],{"class":107,"line":2590},[105,17210,5356],{"class":111},[105,17212,17213],{"class":1954}," isInCircle",[105,17215,116],{"class":115},[105,17217,17218],{"class":1954},"Circle",[105,17220,10576],{"class":111},[105,17222,404],{"class":5208},[105,17224,494],{"class":115},[105,17226,17133],{"class":1954},[105,17228,10576],{"class":111},[105,17230,14],{"class":5208},[105,17232,122],{"class":115},[105,17234,17235],{"class":107,"line":2595},[105,17236,1537],{"class":115},[105,17238,17239,17241,17244,17246,17248,17251,17254,17257,17259,17261,17263,17265],{"class":107,"line":2601},[105,17240,14730],{"class":111},[105,17242,17243],{"class":115}," dx ",[105,17245,161],{"class":111},[105,17247,16334],{"class":115},[105,17249,17250],{"class":1954},"getCenter",[105,17252,17253],{"class":115},"().",[105,17255,17256],{"class":1954},"getX",[105,17258,13042],{"class":115},[105,17260,648],{"class":111},[105,17262,15880],{"class":115},[105,17264,17256],{"class":1954},[105,17266,5628],{"class":115},[105,17268,17269,17271,17274,17276,17278,17280,17282,17285,17287,17289,17291,17293],{"class":107,"line":2607},[105,17270,14730],{"class":111},[105,17272,17273],{"class":115}," dy ",[105,17275,161],{"class":111},[105,17277,16334],{"class":115},[105,17279,17250],{"class":1954},[105,17281,17253],{"class":115},[105,17283,17284],{"class":1954},"getY",[105,17286,13042],{"class":115},[105,17288,648],{"class":111},[105,17290,15880],{"class":115},[105,17292,17284],{"class":1954},[105,17294,5628],{"class":115},[105,17296,17297,17299,17302,17304,17307,17310,17312,17314,17316,17318,17320],{"class":107,"line":2612},[105,17298,14730],{"class":111},[105,17300,17301],{"class":115}," distance ",[105,17303,161],{"class":111},[105,17305,17306],{"class":1954}," sqrt",[105,17308,17309],{"class":115},"(dx ",[105,17311,571],{"class":111},[105,17313,17243],{"class":115},[105,17315,597],{"class":111},[105,17317,17273],{"class":115},[105,17319,571],{"class":111},[105,17321,17322],{"class":115}," dy);\n",[105,17324,17325,17327,17330,17332,17334,17337],{"class":107,"line":7940},[105,17326,3092],{"class":111},[105,17328,17329],{"class":115}," (distance ",[105,17331,1026],{"class":111},[105,17333,16334],{"class":115},[105,17335,17336],{"class":1954},"getRadius",[105,17338,17339],{"class":115},"())\n",[105,17341,17342],{"class":107,"line":7964},[105,17343,2021],{"class":115},[105,17345,17346,17348,17350,17353,17355],{"class":107,"line":7969},[105,17347,9661],{"class":115},[105,17349,1160],{"class":111},[105,17351,17352],{"class":220}," \"点在圆内\"",[105,17354,1436],{"class":111},[105,17356,8832],{"class":115},[105,17358,17359],{"class":107,"line":7975},[105,17360,2178],{"class":115},[105,17362,17363],{"class":107,"line":8002},[105,17364,16815],{"class":111},[105,17366,17367],{"class":107,"line":8007},[105,17368,2021],{"class":115},[105,17370,17371,17373,17375,17378,17380],{"class":107,"line":8013},[105,17372,9661],{"class":115},[105,17374,1160],{"class":111},[105,17376,17377],{"class":220}," \"点在圆外\"",[105,17379,1436],{"class":111},[105,17381,8832],{"class":115},[105,17383,17384],{"class":107,"line":8025},[105,17385,2178],{"class":115},[105,17387,17388],{"class":107,"line":8037},[105,17389,1556],{"class":115},[105,17391,17392,17394,17396],{"class":107,"line":8049},[105,17393,119],{"class":111},[105,17395,1964],{"class":1954},[105,17397,1967],{"class":115},[105,17399,17400],{"class":107,"line":9708},[105,17401,1537],{"class":115},[105,17403,17404],{"class":107,"line":9733},[105,17405,15045],{"class":174},[105,17407,17408],{"class":107,"line":9756},[105,17409,14792],{"class":115},[105,17411,17412],{"class":107,"line":9780},[105,17413,17414],{"class":115},"    Point p1;\n",[105,17416,17417],{"class":107,"line":9785},[105,17418,16986],{"class":174},[105,17420,17421,17423,17425,17428],{"class":107,"line":9790},[105,17422,1542],{"class":115},[105,17424,1160],{"class":111},[105,17426,17427],{"class":220},"\"请输入圆的半径：\"",[105,17429,1282],{"class":115},[105,17431,17432,17434],{"class":107,"line":9795},[105,17433,14730],{"class":111},[105,17435,17436],{"class":115}," r;\n",[105,17438,17439,17441,17443],{"class":107,"line":9804},[105,17440,2003],{"class":115},[105,17442,1421],{"class":111},[105,17444,17445],{"class":115},"r;\n",[105,17447,17448,17450,17453],{"class":107,"line":9809},[105,17449,16587],{"class":115},[105,17451,17452],{"class":1954},"setRadius",[105,17454,17455],{"class":115},"(r);\n",[105,17457,17458,17460,17462,17465],{"class":107,"line":9815},[105,17459,1542],{"class":115},[105,17461,1160],{"class":111},[105,17463,17464],{"class":220},"\"请输入圆心坐标：\"",[105,17466,1282],{"class":115},[105,17468,17469,17471],{"class":107,"line":9836},[105,17470,14730],{"class":111},[105,17472,17473],{"class":115}," x, y;\n",[105,17475,17476,17478,17480,17482,17484],{"class":107,"line":9842},[105,17477,2003],{"class":115},[105,17479,1421],{"class":111},[105,17481,936],{"class":115},[105,17483,1421],{"class":111},[105,17485,17486],{"class":115},"y;\n",[105,17488,17489,17492,17495],{"class":107,"line":9856},[105,17490,17491],{"class":115},"    p1.",[105,17493,17494],{"class":1954},"setPoint",[105,17496,17497],{"class":115},"(x, y);\n",[105,17499,17500,17502,17505],{"class":107,"line":9862},[105,17501,16587],{"class":115},[105,17503,17504],{"class":1954},"setCenter",[105,17506,17507],{"class":115},"(p1);\n",[105,17509,17510,17512,17514,17517],{"class":107,"line":9889},[105,17511,1542],{"class":115},[105,17513,1160],{"class":111},[105,17515,17516],{"class":220},"\"请输入测试点坐标：\"",[105,17518,1282],{"class":115},[105,17520,17521,17523],{"class":107,"line":9898},[105,17522,14730],{"class":111},[105,17524,17525],{"class":115}," x1, y1;\n",[105,17527,17528,17530,17532,17535,17537],{"class":107,"line":9904},[105,17529,2003],{"class":115},[105,17531,1421],{"class":111},[105,17533,17534],{"class":115},"x1",[105,17536,1421],{"class":111},[105,17538,17539],{"class":115},"y1;\n",[105,17541,17542],{"class":107,"line":9912},[105,17543,17544],{"class":115},"    Point p2;\n",[105,17546,17547,17550,17552],{"class":107,"line":9917},[105,17548,17549],{"class":115},"    p2.",[105,17551,17494],{"class":1954},[105,17553,17554],{"class":115},"(x1, y1);\n",[105,17556,17557,17560],{"class":107,"line":16596},[105,17558,17559],{"class":1954},"    isInCircle",[105,17561,17562],{"class":115},"(c1, p2);\n",[105,17564,17565],{"class":107,"line":16602},[105,17566,1556],{"class":115},[14,17568,17569],{},"在类中可以让另一个类作为本来的成员",[14,17571,17572],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17574,17575],{},"创建point.h",[96,17577,17579],{"className":98,"code":17578,"language":100,"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",[102,17580,17581,17592,17598,17608,17614,17618,17623,17627,17631,17651,17655,17663,17671,17675,17679,17685,17691],{"__ignoreMap":22},[105,17582,17583,17586,17589],{"class":107,"line":108},[105,17584,17585],{"class":111},"#pragma",[105,17587,17588],{"class":1954}," once",[105,17590,17591],{"class":174}," \u002F\u002F防止头文件重复包含\n",[105,17593,17594,17596],{"class":107,"line":28},[105,17595,1940],{"class":111},[105,17597,1943],{"class":220},[105,17599,17600,17602,17604,17606],{"class":107,"line":1171},[105,17601,1948],{"class":111},[105,17603,1951],{"class":111},[105,17605,1955],{"class":1954},[105,17607,1282],{"class":115},[105,17609,17610,17612],{"class":107,"line":1186},[105,17611,14686],{"class":111},[105,17613,16973],{"class":1954},[105,17615,17616],{"class":107,"line":1192},[105,17617,1537],{"class":115},[105,17619,17620],{"class":107,"line":1206},[105,17621,17622],{"class":174},"\u002F\u002F做好声明与变量定义就可以\n",[105,17624,17625],{"class":107,"line":1212},[105,17626,14708],{"class":111},[105,17628,17629],{"class":107,"line":1303},[105,17630,16986],{"class":174},[105,17632,17633,17635,17637,17639,17641,17643,17645,17647,17649],{"class":107,"line":1309},[105,17634,14901],{"class":111},[105,17636,16993],{"class":1954},[105,17638,116],{"class":115},[105,17640,14029],{"class":111},[105,17642,17000],{"class":5208},[105,17644,12427],{"class":115},[105,17646,14029],{"class":111},[105,17648,17007],{"class":5208},[105,17650,2710],{"class":115},[105,17652,17653],{"class":107,"line":1321},[105,17654,17025],{"class":174},[105,17656,17657,17659,17661],{"class":107,"line":1603},[105,17658,14730],{"class":111},[105,17660,17032],{"class":1954},[105,17662,5628],{"class":115},[105,17664,17665,17667,17669],{"class":107,"line":1608},[105,17666,14730],{"class":111},[105,17668,17048],{"class":1954},[105,17670,5628],{"class":115},[105,17672,17673],{"class":107,"line":1614},[105,17674,2391],{"emptyLinePlaceholder":32},[105,17676,17677],{"class":107,"line":1619},[105,17678,15214],{"class":111},[105,17680,17681,17683],{"class":107,"line":1633},[105,17682,14730],{"class":111},[105,17684,17070],{"class":115},[105,17686,17687,17689],{"class":107,"line":1638},[105,17688,14730],{"class":111},[105,17690,17077],{"class":115},[105,17692,17693],{"class":107,"line":1644},[105,17694,3986],{"class":115},[14,17696,17697],{},"创建point.cpp",[96,17699,17701],{"className":98,"code":17700,"language":100,"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",[102,17702,17703,17710,17715,17749,17753,17769],{"__ignoreMap":22},[105,17704,17705,17707],{"class":107,"line":108},[105,17706,1940],{"class":111},[105,17708,17709],{"class":220},"\u003Cpoint.h>\n",[105,17711,17712],{"class":107,"line":28},[105,17713,17714],{"class":174},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[105,17716,17717,17719,17722,17725,17727,17729,17731,17733,17735,17737,17739,17741,17743,17745,17747],{"class":107,"line":1171},[105,17718,14901],{"class":111},[105,17720,17721],{"class":1954}," Point",[105,17723,17724],{"class":115},"::",[105,17726,17494],{"class":1954},[105,17728,116],{"class":115},[105,17730,14029],{"class":111},[105,17732,17000],{"class":5208},[105,17734,12427],{"class":115},[105,17736,14029],{"class":111},[105,17738,17007],{"class":5208},[105,17740,17010],{"class":115},[105,17742,161],{"class":111},[105,17744,17015],{"class":115},[105,17746,161],{"class":111},[105,17748,17020],{"class":115},[105,17750,17751],{"class":107,"line":1186},[105,17752,17025],{"class":174},[105,17754,17755,17757,17759,17761,17763,17765,17767],{"class":107,"line":1192},[105,17756,14730],{"class":111},[105,17758,17721],{"class":1954},[105,17760,17724],{"class":115},[105,17762,17256],{"class":1954},[105,17764,17035],{"class":115},[105,17766,17038],{"class":111},[105,17768,17041],{"class":115},[105,17770,17771,17773,17775,17777,17779,17781,17783],{"class":107,"line":1206},[105,17772,14730],{"class":111},[105,17774,17721],{"class":1954},[105,17776,17724],{"class":115},[105,17778,17284],{"class":1954},[105,17780,17035],{"class":115},[105,17782,17038],{"class":111},[105,17784,17055],{"class":115},[14,17786,17787],{},"创建circle.h",[96,17789,17791],{"className":98,"code":17790,"language":100,"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",[102,17792,17793,17800,17806,17816,17822,17828,17832,17836,17840,17854,17868,17872,17880,17888,17892,17896,17902,17906,17910],{"__ignoreMap":22},[105,17794,17795,17797],{"class":107,"line":108},[105,17796,17585],{"class":111},[105,17798,17799],{"class":1954}," once\n",[105,17801,17802,17804],{"class":107,"line":28},[105,17803,1940],{"class":111},[105,17805,1943],{"class":220},[105,17807,17808,17810,17812,17814],{"class":107,"line":1171},[105,17809,1948],{"class":111},[105,17811,1951],{"class":111},[105,17813,1955],{"class":1954},[105,17815,1282],{"class":115},[105,17817,17818,17820],{"class":107,"line":1186},[105,17819,1940],{"class":111},[105,17821,17709],{"class":220},[105,17823,17824,17826],{"class":107,"line":1192},[105,17825,14686],{"class":111},[105,17827,14689],{"class":1954},[105,17829,17830],{"class":107,"line":1206},[105,17831,1537],{"class":115},[105,17833,17834],{"class":107,"line":1212},[105,17835,14708],{"class":111},[105,17837,17838],{"class":107,"line":1303},[105,17839,16986],{"class":174},[105,17841,17842,17844,17846,17848,17850,17852],{"class":107,"line":1309},[105,17843,14901],{"class":111},[105,17845,17106],{"class":1954},[105,17847,116],{"class":115},[105,17849,14029],{"class":111},[105,17851,17113],{"class":5208},[105,17853,2710],{"class":115},[105,17855,17856,17858,17860,17862,17864,17866],{"class":107,"line":1321},[105,17857,14901],{"class":111},[105,17859,17128],{"class":1954},[105,17861,116],{"class":115},[105,17863,17133],{"class":1954},[105,17865,17136],{"class":5208},[105,17867,2710],{"class":115},[105,17869,17870],{"class":107,"line":1603},[105,17871,17149],{"class":174},[105,17873,17874,17876,17878],{"class":107,"line":1608},[105,17875,14730],{"class":111},[105,17877,17156],{"class":1954},[105,17879,5628],{"class":115},[105,17881,17882,17884,17886],{"class":107,"line":1614},[105,17883,17168],{"class":1954},[105,17885,17171],{"class":1954},[105,17887,5628],{"class":115},[105,17889,17890],{"class":107,"line":1619},[105,17891,2391],{"emptyLinePlaceholder":32},[105,17893,17894],{"class":107,"line":1633},[105,17895,15214],{"class":111},[105,17897,17898,17900],{"class":107,"line":1638},[105,17899,14730],{"class":111},[105,17901,14720],{"class":115},[105,17903,17904],{"class":107,"line":1644},[105,17905,17197],{"class":174},[105,17907,17908],{"class":107,"line":1665},[105,17909,17202],{"class":115},[105,17911,17912],{"class":107,"line":1670},[105,17913,3986],{"class":115},[14,17915,17916],{},"创建circle.cpp",[96,17918,17920],{"className":98,"code":17919,"language":100,"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",[102,17921,17922,17929,17952,17974,17979,17995],{"__ignoreMap":22},[105,17923,17924,17926],{"class":107,"line":108},[105,17925,1940],{"class":111},[105,17927,17928],{"class":220},"\u003Ccircle.h>\n",[105,17930,17931,17933,17936,17938,17940,17942,17944,17946,17948,17950],{"class":107,"line":28},[105,17932,5356],{"class":111},[105,17934,17935],{"class":1954}," Circle",[105,17937,17724],{"class":115},[105,17939,17452],{"class":1954},[105,17941,116],{"class":115},[105,17943,14029],{"class":111},[105,17945,17113],{"class":5208},[105,17947,17116],{"class":115},[105,17949,161],{"class":111},[105,17951,17121],{"class":115},[105,17953,17954,17956,17958,17960,17962,17964,17966,17968,17970,17972],{"class":107,"line":1171},[105,17955,5356],{"class":111},[105,17957,17935],{"class":1954},[105,17959,17724],{"class":115},[105,17961,17504],{"class":1954},[105,17963,116],{"class":115},[105,17965,17133],{"class":1954},[105,17967,17136],{"class":5208},[105,17969,17139],{"class":115},[105,17971,161],{"class":111},[105,17973,17144],{"class":115},[105,17975,17976],{"class":107,"line":1186},[105,17977,17978],{"class":174},"\u002F\u002F获取属性\n",[105,17980,17981,17983,17985,17987,17989,17991,17993],{"class":107,"line":1192},[105,17982,14029],{"class":111},[105,17984,17935],{"class":1954},[105,17986,17724],{"class":115},[105,17988,17336],{"class":1954},[105,17990,17035],{"class":115},[105,17992,17038],{"class":111},[105,17994,17163],{"class":115},[105,17996,17997,17999,18001,18003,18005,18007,18009],{"class":107,"line":1206},[105,17998,17133],{"class":1954},[105,18000,17935],{"class":1954},[105,18002,17724],{"class":115},[105,18004,17250],{"class":1954},[105,18006,17035],{"class":115},[105,18008,17038],{"class":111},[105,18010,17178],{"class":115},[14,18012,18013],{},"使用封装的类",[96,18015,18017],{"className":98,"code":18016,"language":100,"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",[102,18018,18019,18025,18035,18041,18047,18071,18075,18101,18127,18151,18165,18169,18181,18185,18189,18193,18205,18209,18213,18221,18225,18229,18233,18237,18241,18251,18257,18265,18273,18283,18289,18301,18309,18317,18327,18333,18345,18349,18357,18363],{"__ignoreMap":22},[105,18020,18021,18023],{"class":107,"line":108},[105,18022,1940],{"class":111},[105,18024,1943],{"class":220},[105,18026,18027,18029,18031,18033],{"class":107,"line":28},[105,18028,1948],{"class":111},[105,18030,1951],{"class":111},[105,18032,1955],{"class":1954},[105,18034,1282],{"class":115},[105,18036,18037,18039],{"class":107,"line":1171},[105,18038,1940],{"class":111},[105,18040,17928],{"class":220},[105,18042,18043,18045],{"class":107,"line":1186},[105,18044,1940],{"class":111},[105,18046,17709],{"class":220},[105,18048,18049,18051,18053,18055,18057,18059,18061,18063,18065,18067,18069],{"class":107,"line":1192},[105,18050,5356],{"class":111},[105,18052,17213],{"class":1954},[105,18054,116],{"class":115},[105,18056,17218],{"class":1954},[105,18058,10576],{"class":111},[105,18060,404],{"class":5208},[105,18062,494],{"class":115},[105,18064,17133],{"class":1954},[105,18066,10576],{"class":111},[105,18068,14],{"class":5208},[105,18070,122],{"class":115},[105,18072,18073],{"class":107,"line":1206},[105,18074,1537],{"class":115},[105,18076,18077,18079,18081,18083,18085,18087,18089,18091,18093,18095,18097,18099],{"class":107,"line":1212},[105,18078,14730],{"class":111},[105,18080,17243],{"class":115},[105,18082,161],{"class":111},[105,18084,16334],{"class":115},[105,18086,17250],{"class":1954},[105,18088,17253],{"class":115},[105,18090,17256],{"class":1954},[105,18092,13042],{"class":115},[105,18094,648],{"class":111},[105,18096,15880],{"class":115},[105,18098,17256],{"class":1954},[105,18100,5628],{"class":115},[105,18102,18103,18105,18107,18109,18111,18113,18115,18117,18119,18121,18123,18125],{"class":107,"line":1303},[105,18104,14730],{"class":111},[105,18106,17273],{"class":115},[105,18108,161],{"class":111},[105,18110,16334],{"class":115},[105,18112,17250],{"class":1954},[105,18114,17253],{"class":115},[105,18116,17284],{"class":1954},[105,18118,13042],{"class":115},[105,18120,648],{"class":111},[105,18122,15880],{"class":115},[105,18124,17284],{"class":1954},[105,18126,5628],{"class":115},[105,18128,18129,18131,18133,18135,18137,18139,18141,18143,18145,18147,18149],{"class":107,"line":1309},[105,18130,14730],{"class":111},[105,18132,17301],{"class":115},[105,18134,161],{"class":111},[105,18136,17306],{"class":1954},[105,18138,17309],{"class":115},[105,18140,571],{"class":111},[105,18142,17243],{"class":115},[105,18144,597],{"class":111},[105,18146,17273],{"class":115},[105,18148,571],{"class":111},[105,18150,17322],{"class":115},[105,18152,18153,18155,18157,18159,18161,18163],{"class":107,"line":1321},[105,18154,3092],{"class":111},[105,18156,17329],{"class":115},[105,18158,1026],{"class":111},[105,18160,16334],{"class":115},[105,18162,17336],{"class":1954},[105,18164,17339],{"class":115},[105,18166,18167],{"class":107,"line":1603},[105,18168,2021],{"class":115},[105,18170,18171,18173,18175,18177,18179],{"class":107,"line":1608},[105,18172,9661],{"class":115},[105,18174,1160],{"class":111},[105,18176,17352],{"class":220},[105,18178,1436],{"class":111},[105,18180,8832],{"class":115},[105,18182,18183],{"class":107,"line":1614},[105,18184,2178],{"class":115},[105,18186,18187],{"class":107,"line":1619},[105,18188,16815],{"class":111},[105,18190,18191],{"class":107,"line":1633},[105,18192,2021],{"class":115},[105,18194,18195,18197,18199,18201,18203],{"class":107,"line":1638},[105,18196,9661],{"class":115},[105,18198,1160],{"class":111},[105,18200,17377],{"class":220},[105,18202,1436],{"class":111},[105,18204,8832],{"class":115},[105,18206,18207],{"class":107,"line":1644},[105,18208,2178],{"class":115},[105,18210,18211],{"class":107,"line":1665},[105,18212,1556],{"class":115},[105,18214,18215,18217,18219],{"class":107,"line":1670},[105,18216,119],{"class":111},[105,18218,1964],{"class":1954},[105,18220,1967],{"class":115},[105,18222,18223],{"class":107,"line":1684},[105,18224,1537],{"class":115},[105,18226,18227],{"class":107,"line":1689},[105,18228,15045],{"class":174},[105,18230,18231],{"class":107,"line":1718},[105,18232,14792],{"class":115},[105,18234,18235],{"class":107,"line":1723},[105,18236,17414],{"class":115},[105,18238,18239],{"class":107,"line":1740},[105,18240,16986],{"class":174},[105,18242,18243,18245,18247,18249],{"class":107,"line":1745},[105,18244,1542],{"class":115},[105,18246,1160],{"class":111},[105,18248,17427],{"class":220},[105,18250,1282],{"class":115},[105,18252,18253,18255],{"class":107,"line":1750},[105,18254,14730],{"class":111},[105,18256,17436],{"class":115},[105,18258,18259,18261,18263],{"class":107,"line":1755},[105,18260,2003],{"class":115},[105,18262,1421],{"class":111},[105,18264,17445],{"class":115},[105,18266,18267,18269,18271],{"class":107,"line":1769},[105,18268,16587],{"class":115},[105,18270,17452],{"class":1954},[105,18272,17455],{"class":115},[105,18274,18275,18277,18279,18281],{"class":107,"line":1774},[105,18276,1542],{"class":115},[105,18278,1160],{"class":111},[105,18280,17464],{"class":220},[105,18282,1282],{"class":115},[105,18284,18285,18287],{"class":107,"line":2568},[105,18286,14730],{"class":111},[105,18288,17473],{"class":115},[105,18290,18291,18293,18295,18297,18299],{"class":107,"line":2582},[105,18292,2003],{"class":115},[105,18294,1421],{"class":111},[105,18296,936],{"class":115},[105,18298,1421],{"class":111},[105,18300,17486],{"class":115},[105,18302,18303,18305,18307],{"class":107,"line":2590},[105,18304,17491],{"class":115},[105,18306,17494],{"class":1954},[105,18308,17497],{"class":115},[105,18310,18311,18313,18315],{"class":107,"line":2595},[105,18312,16587],{"class":115},[105,18314,17504],{"class":1954},[105,18316,17507],{"class":115},[105,18318,18319,18321,18323,18325],{"class":107,"line":2601},[105,18320,1542],{"class":115},[105,18322,1160],{"class":111},[105,18324,17516],{"class":220},[105,18326,1282],{"class":115},[105,18328,18329,18331],{"class":107,"line":2607},[105,18330,14730],{"class":111},[105,18332,17525],{"class":115},[105,18334,18335,18337,18339,18341,18343],{"class":107,"line":2612},[105,18336,2003],{"class":115},[105,18338,1421],{"class":111},[105,18340,17534],{"class":115},[105,18342,1421],{"class":111},[105,18344,17539],{"class":115},[105,18346,18347],{"class":107,"line":7940},[105,18348,17544],{"class":115},[105,18350,18351,18353,18355],{"class":107,"line":7964},[105,18352,17549],{"class":115},[105,18354,17494],{"class":1954},[105,18356,17554],{"class":115},[105,18358,18359,18361],{"class":107,"line":7969},[105,18360,17559],{"class":1954},[105,18362,17562],{"class":115},[105,18364,18365],{"class":107,"line":7975},[105,18366,1556],{"class":115},[47,18368,18370],{"id":18369},"_82对象的初始化清理","8.2对象的初始化清理",[1123,18372,18373,18376],{},[62,18374,18375],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[62,18377,18378],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[76,18380,18382],{"id":18381},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18384,18385,18386,18389],{},"对象的",[265,18387,18388],{},"初始化和清理","也是两个非常重要的安全问题",[14,18391,18392],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18394,18395],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18397,18398,18399,18402,18403,18406],{},"c++利用了",[265,18400,18401],{},"构造函数","和",[265,18404,18405],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18408,18409,18410],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[265,18411,18412],{},"我们不提供构造和析构，编译器会提供",[14,18414,18415],{},[265,18416,18417],{},"编译器提供的构造函数和析构函数是空实现。",[1123,18419,18420,18423],{},[62,18421,18422],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[62,18424,18425,18426,18429],{},"析构函数：主要作用在于对象",[265,18427,18428],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18431,18432,18435],{},[265,18433,18434],{},"构造函数语法：",[102,18436,18437],{},"类名(){}",[59,18439,18440,18443,18446,18449,18452],{},[62,18441,18442],{},"构造函数，没有返回值也不写void",[62,18444,18445],{},"函数名称与类名相同",[62,18447,18448],{},"构造函数可以有参数，因此可以发生重载",[62,18450,18451],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[62,18453,18454,18455,545],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[102,18456,18457],{},"Person(){}",[14,18459,18460,13787,18463],{},[265,18461,18462],{},"析构函数语法：",[102,18464,18465],{},"~类名(){}",[59,18467,18468,18471,18474,18480],{},[62,18469,18470],{},"析构函数，没有返回值也不写void",[62,18472,18473],{},"函数名称与类名相同,在名称前加上符号  ~",[62,18475,18476,18477],{},"析构函数不可以有参数，因此",[265,18478,18479],{},"不可以发生重载",[62,18481,18482],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[96,18484,18486],{"className":98,"code":18485,"language":100,"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",[102,18487,18488,18494,18498,18502,18507,18514,18518,18531,18535,18540,18547,18551,18564,18568,18572,18576,18580,18588,18592,18600,18604,18608,18616,18620,18625,18629,18636,18640,18653,18657,18665],{"__ignoreMap":22},[105,18489,18490,18492],{"class":107,"line":108},[105,18491,14686],{"class":111},[105,18493,15163],{"class":1954},[105,18495,18496],{"class":107,"line":28},[105,18497,1537],{"class":115},[105,18499,18500],{"class":107,"line":1171},[105,18501,14708],{"class":111},[105,18503,18504],{"class":107,"line":1186},[105,18505,18506],{"class":174},"    \u002F\u002F构造函数\n",[105,18508,18509,18512],{"class":107,"line":1192},[105,18510,18511],{"class":1954},"    Person",[105,18513,1967],{"class":115},[105,18515,18516],{"class":107,"line":1206},[105,18517,2021],{"class":115},[105,18519,18520,18522,18524,18527,18529],{"class":107,"line":1212},[105,18521,9661],{"class":115},[105,18523,1160],{"class":111},[105,18525,18526],{"class":220}," \"Person的构造函数调用\"",[105,18528,1436],{"class":111},[105,18530,8832],{"class":115},[105,18532,18533],{"class":107,"line":1303},[105,18534,2178],{"class":115},[105,18536,18537],{"class":107,"line":1309},[105,18538,18539],{"class":174},"    \u002F\u002F析构函数\n",[105,18541,18542,18545],{"class":107,"line":1321},[105,18543,18544],{"class":1954},"    ~Person",[105,18546,1967],{"class":115},[105,18548,18549],{"class":107,"line":1603},[105,18550,2021],{"class":115},[105,18552,18553,18555,18557,18560,18562],{"class":107,"line":1608},[105,18554,9661],{"class":115},[105,18556,1160],{"class":111},[105,18558,18559],{"class":220}," \"Person的析构函数调用\"",[105,18561,1436],{"class":111},[105,18563,8832],{"class":115},[105,18565,18566],{"class":107,"line":1614},[105,18567,2178],{"class":115},[105,18569,18570],{"class":107,"line":1619},[105,18571,2391],{"emptyLinePlaceholder":32},[105,18573,18574],{"class":107,"line":1633},[105,18575,3986],{"class":115},[105,18577,18578],{"class":107,"line":1638},[105,18579,2391],{"emptyLinePlaceholder":32},[105,18581,18582,18584,18586],{"class":107,"line":1644},[105,18583,5356],{"class":111},[105,18585,5580],{"class":1954},[105,18587,1967],{"class":115},[105,18589,18590],{"class":107,"line":1665},[105,18591,1537],{"class":115},[105,18593,18594,18597],{"class":107,"line":1670},[105,18595,18596],{"class":115},"    Person p;",[105,18598,18599],{"class":174},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[105,18601,18602],{"class":107,"line":1684},[105,18603,1556],{"class":115},[105,18605,18606],{"class":107,"line":1689},[105,18607,2391],{"emptyLinePlaceholder":32},[105,18609,18610,18612,18614],{"class":107,"line":1718},[105,18611,119],{"class":111},[105,18613,1964],{"class":1954},[105,18615,10845],{"class":115},[105,18617,18618],{"class":107,"line":1723},[105,18619,13202],{"class":115},[105,18621,18622],{"class":107,"line":1740},[105,18623,18624],{"class":174},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[105,18626,18627],{"class":107,"line":1745},[105,18628,2391],{"emptyLinePlaceholder":32},[105,18630,18631,18633],{"class":107,"line":1750},[105,18632,18596],{"class":115},[105,18634,18635],{"class":174},"\u002F\u002F只有构造函数\n",[105,18637,18638],{"class":107,"line":1755},[105,18639,2391],{"emptyLinePlaceholder":32},[105,18641,18642,18644,18646,18648,18650],{"class":107,"line":1769},[105,18643,2294],{"class":1954},[105,18645,116],{"class":115},[105,18647,2299],{"class":220},[105,18649,5958],{"class":115},[105,18651,18652],{"class":174},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[105,18654,18655],{"class":107,"line":1774},[105,18656,2391],{"emptyLinePlaceholder":32},[105,18658,18659,18661,18663],{"class":107,"line":2568},[105,18660,4081],{"class":111},[105,18662,4084],{"class":164},[105,18664,1282],{"class":115},[105,18666,18667],{"class":107,"line":2582},[105,18668,1556],{"class":115},[14,18670,18671],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[76,18673,18675],{"id":18674},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18677,18678],{},"两种分类方式：",[14,18680,18681],{},"​\t按参数分为： 有参构造和无参构造",[14,18683,18684],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18686,18687],{},"三种调用方式：",[14,18689,18690],{},"​\t括号法",[14,18692,18693],{},"​\t显示法",[14,18695,18696],{},"​\t隐式转换法",[96,18698,18700],{"className":98,"code":18699,"language":100,"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",[102,18701,18702,18708,18718,18723,18728,18733,18738,18742,18750,18754,18758,18762,18768,18772,18785,18789,18801,18805,18814,18827,18831,18835,18841,18845,18858,18862,18867,18883,18887,18892,18901,18914,18918,18924,18928,18933,18941,18945,18950,18954,18962,18966,18971,18976,18981,18986,18991,18995,19000,19005,19010,19015,19019,19024,19029,19045,19057,19062,19066,19071,19076,19081,19085,19090,19104,19117,19121,19129,19133,19139,19145,19153],{"__ignoreMap":22},[105,18703,18704,18706],{"class":107,"line":108},[105,18705,1940],{"class":111},[105,18707,1943],{"class":220},[105,18709,18710,18712,18714,18716],{"class":107,"line":28},[105,18711,1948],{"class":111},[105,18713,1951],{"class":111},[105,18715,1955],{"class":1954},[105,18717,1282],{"class":115},[105,18719,18720],{"class":107,"line":1171},[105,18721,18722],{"class":174},"\u002F\u002F1.构造函数的分类及调用\n",[105,18724,18725],{"class":107,"line":1186},[105,18726,18727],{"class":174},"\u002F\u002F分类\n",[105,18729,18730],{"class":107,"line":1192},[105,18731,18732],{"class":174},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[105,18734,18735],{"class":107,"line":1206},[105,18736,18737],{"class":174},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[105,18739,18740],{"class":107,"line":1212},[105,18741,2391],{"emptyLinePlaceholder":32},[105,18743,18744,18746,18748],{"class":107,"line":1303},[105,18745,14686],{"class":111},[105,18747,15561],{"class":1954},[105,18749,2665],{"class":115},[105,18751,18752],{"class":107,"line":1309},[105,18753,1537],{"class":115},[105,18755,18756],{"class":107,"line":1321},[105,18757,14708],{"class":111},[105,18759,18760],{"class":107,"line":1603},[105,18761,18506],{"class":174},[105,18763,18764,18766],{"class":107,"line":1608},[105,18765,18511],{"class":1954},[105,18767,1967],{"class":115},[105,18769,18770],{"class":107,"line":1614},[105,18771,2021],{"class":115},[105,18773,18774,18776,18778,18781,18783],{"class":107,"line":1619},[105,18775,3442],{"class":115},[105,18777,1160],{"class":111},[105,18779,18780],{"class":220},"\"Person构造函数无参构造\"",[105,18782,1160],{"class":111},[105,18784,1183],{"class":115},[105,18786,18787],{"class":107,"line":1633},[105,18788,2178],{"class":115},[105,18790,18791,18793,18795,18797,18799],{"class":107,"line":1638},[105,18792,18511],{"class":1954},[105,18794,116],{"class":115},[105,18796,119],{"class":111},[105,18798,1390],{"class":5208},[105,18800,122],{"class":115},[105,18802,18803],{"class":107,"line":1644},[105,18804,2021],{"class":115},[105,18806,18807,18810,18812],{"class":107,"line":1665},[105,18808,18809],{"class":115},"        age",[105,18811,161],{"class":111},[105,18813,6189],{"class":115},[105,18815,18816,18818,18820,18823,18825],{"class":107,"line":1670},[105,18817,3442],{"class":115},[105,18819,1160],{"class":111},[105,18821,18822],{"class":220},"\"Person构造函数有参构造\"",[105,18824,1160],{"class":111},[105,18826,1183],{"class":115},[105,18828,18829],{"class":107,"line":1684},[105,18830,2178],{"class":115},[105,18832,18833],{"class":107,"line":1689},[105,18834,18539],{"class":174},[105,18836,18837,18839],{"class":107,"line":1718},[105,18838,18544],{"class":1954},[105,18840,1967],{"class":115},[105,18842,18843],{"class":107,"line":1723},[105,18844,2021],{"class":115},[105,18846,18847,18849,18851,18854,18856],{"class":107,"line":1740},[105,18848,3442],{"class":115},[105,18850,1160],{"class":111},[105,18852,18853],{"class":220},"\"Person析构函数被调用\"",[105,18855,1160],{"class":111},[105,18857,1183],{"class":115},[105,18859,18860],{"class":107,"line":1745},[105,18861,2178],{"class":115},[105,18863,18864],{"class":107,"line":1750},[105,18865,18866],{"class":174},"    \u002F\u002F拷贝构造函数\n",[105,18868,18869,18871,18873,18875,18877,18879,18881],{"class":107,"line":1755},[105,18870,18511],{"class":1954},[105,18872,116],{"class":115},[105,18874,6784],{"class":111},[105,18876,15561],{"class":1954},[105,18878,10576],{"class":111},[105,18880,14],{"class":5208},[105,18882,122],{"class":115},[105,18884,18885],{"class":107,"line":1769},[105,18886,2021],{"class":115},[105,18888,18889],{"class":107,"line":1774},[105,18890,18891],{"class":174},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[105,18893,18894,18896,18898],{"class":107,"line":2568},[105,18895,18809],{"class":115},[105,18897,161],{"class":111},[105,18899,18900],{"class":115},"p.age;\n",[105,18902,18903,18905,18907,18910,18912],{"class":107,"line":2582},[105,18904,3442],{"class":115},[105,18906,1160],{"class":111},[105,18908,18909],{"class":220},"\"Person拷贝构造函数被调用\"",[105,18911,1160],{"class":111},[105,18913,1183],{"class":115},[105,18915,18916],{"class":107,"line":2590},[105,18917,2178],{"class":115},[105,18919,18920,18922],{"class":107,"line":2595},[105,18921,1976],{"class":111},[105,18923,7789],{"class":115},[105,18925,18926],{"class":107,"line":2601},[105,18927,3986],{"class":115},[105,18929,18930],{"class":107,"line":2607},[105,18931,18932],{"class":174},"\u002F\u002F调用\n",[105,18934,18935,18937,18939],{"class":107,"line":2612},[105,18936,5356],{"class":111},[105,18938,5580],{"class":1954},[105,18940,1967],{"class":115},[105,18942,18943],{"class":107,"line":7940},[105,18944,1537],{"class":115},[105,18946,18947],{"class":107,"line":7964},[105,18948,18949],{"class":174},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[105,18951,18952],{"class":107,"line":7969},[105,18953,1556],{"class":115},[105,18955,18956,18958,18960],{"class":107,"line":7975},[105,18957,5356],{"class":111},[105,18959,5649],{"class":1954},[105,18961,1967],{"class":115},[105,18963,18964],{"class":107,"line":8002},[105,18965,1537],{"class":115},[105,18967,18968],{"class":107,"line":8007},[105,18969,18970],{"class":174},"    \u002F\u002F1.括号法\n",[105,18972,18973],{"class":107,"line":8013},[105,18974,18975],{"class":174},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[105,18977,18978],{"class":107,"line":8025},[105,18979,18980],{"class":174},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[105,18982,18983],{"class":107,"line":8037},[105,18984,18985],{"class":174},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[105,18987,18988],{"class":107,"line":8049},[105,18989,18990],{"class":174},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[105,18992,18993],{"class":107,"line":9708},[105,18994,2391],{"emptyLinePlaceholder":32},[105,18996,18997],{"class":107,"line":9733},[105,18998,18999],{"class":174},"    \u002F\u002F注意事项\n",[105,19001,19002],{"class":107,"line":9756},[105,19003,19004],{"class":174},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[105,19006,19007],{"class":107,"line":9780},[105,19008,19009],{"class":174},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[105,19011,19012],{"class":107,"line":9785},[105,19013,19014],{"class":174},"    \u002F\u002F Person p4();\n",[105,19016,19017],{"class":107,"line":9790},[105,19018,2391],{"emptyLinePlaceholder":32},[105,19020,19021],{"class":107,"line":9795},[105,19022,19023],{"class":174},"    \u002F\u002F2.显示法\n",[105,19025,19026],{"class":107,"line":9804},[105,19027,19028],{"class":115},"    Person p1;\n",[105,19030,19031,19034,19036,19039,19041,19043],{"class":107,"line":9809},[105,19032,19033],{"class":115},"    Person p2",[105,19035,161],{"class":111},[105,19037,19038],{"class":1954},"Person",[105,19040,116],{"class":115},[105,19042,562],{"class":164},[105,19044,2710],{"class":115},[105,19046,19047,19050,19052,19054],{"class":107,"line":9815},[105,19048,19049],{"class":115},"    Person p3",[105,19051,161],{"class":111},[105,19053,19038],{"class":1954},[105,19055,19056],{"class":115},"(p2);\n",[105,19058,19059],{"class":107,"line":9836},[105,19060,19061],{"class":174},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[105,19063,19064],{"class":107,"line":9842},[105,19065,2391],{"emptyLinePlaceholder":32},[105,19067,19068],{"class":107,"line":9856},[105,19069,19070],{"class":174},"    \u002F\u002F 注意事项2\n",[105,19072,19073],{"class":107,"line":9862},[105,19074,19075],{"class":174},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[105,19077,19078],{"class":107,"line":9889},[105,19079,19080],{"class":174},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[105,19082,19083],{"class":107,"line":9898},[105,19084,2391],{"emptyLinePlaceholder":32},[105,19086,19087],{"class":107,"line":9904},[105,19088,19089],{"class":174},"    \u002F\u002F3.隐士转换法\n",[105,19091,19092,19095,19097,19099,19101],{"class":107,"line":9912},[105,19093,19094],{"class":115},"    Person p4",[105,19096,161],{"class":111},[105,19098,562],{"class":164},[105,19100,171],{"class":115},[105,19102,19103],{"class":174},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[105,19105,19106,19109,19111,19114],{"class":107,"line":9917},[105,19107,19108],{"class":115},"    Person p5",[105,19110,161],{"class":111},[105,19112,19113],{"class":115},"p4;",[105,19115,19116],{"class":174}," \u002F\u002F 这里会调用拷贝构造函数\n",[105,19118,19119],{"class":107,"line":16596},[105,19120,1556],{"class":115},[105,19122,19123,19125,19127],{"class":107,"line":16602},[105,19124,119],{"class":111},[105,19126,1964],{"class":1954},[105,19128,1967],{"class":115},[105,19130,19131],{"class":107,"line":16625},[105,19132,1537],{"class":115},[105,19134,19135,19137],{"class":107,"line":16631},[105,19136,5625],{"class":1954},[105,19138,5628],{"class":115},[105,19140,19141,19143],{"class":107,"line":16654},[105,19142,5694],{"class":1954},[105,19144,5628],{"class":115},[105,19146,19147,19149,19151],{"class":107,"line":16668},[105,19148,4081],{"class":111},[105,19150,4084],{"class":164},[105,19152,1282],{"class":115},[105,19154,19155],{"class":107,"line":16688},[105,19156,1556],{"class":115},[14,19158,19159,19162],{},[265,19160,19161],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[76,19164,19166],{"id":19165},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19168,19169],{},"C++中拷贝构造函数调用时机通常有三种情况",[1123,19171,19172,19175,19178],{},[62,19173,19174],{},"使用一个已经创建完毕的对象来初始化一个新对象",[62,19176,19177],{},"值传递的方式给函数参数传值",[62,19179,19180],{},"以值方式返回局部对象",[96,19182,19184],{"className":98,"code":19183,"language":100,"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",[102,19185,19186,19192,19202,19206,19211,19215,19220,19225,19230,19236,19240,19244,19250,19254,19267,19271,19276,19288,19292,19300,19313,19317,19321,19337,19341,19350,19363,19367,19373,19377,19389,19393,19399,19403,19407,19415,19419,19432,19440,19458,19462,19467,19472,19487,19491,19504,19508,19516,19520,19524,19532,19536,19541,19550,19554,19558,19583,19593,19597,19605,19609,19620,19645,19649,19653,19657,19665,19669,19674,19679,19686,19691,19696,19701,19706,19710,19715,19719,19724,19728,19733,19738,19742,19746,19751,19756,19764],{"__ignoreMap":22},[105,19187,19188,19190],{"class":107,"line":108},[105,19189,1940],{"class":111},[105,19191,1943],{"class":220},[105,19193,19194,19196,19198,19200],{"class":107,"line":28},[105,19195,1948],{"class":111},[105,19197,1951],{"class":111},[105,19199,1955],{"class":1954},[105,19201,1282],{"class":115},[105,19203,19204],{"class":107,"line":1171},[105,19205,2391],{"emptyLinePlaceholder":32},[105,19207,19208],{"class":107,"line":1186},[105,19209,19210],{"class":174},"\u002F\u002F拷贝构造函数调用时机\n",[105,19212,19213],{"class":107,"line":1192},[105,19214,2391],{"emptyLinePlaceholder":32},[105,19216,19217],{"class":107,"line":1206},[105,19218,19219],{"class":174},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[105,19221,19222],{"class":107,"line":1212},[105,19223,19224],{"class":174},"\u002F\u002F2.值传递的方式给函数参数传值\n",[105,19226,19227],{"class":107,"line":1303},[105,19228,19229],{"class":174},"\u002F\u002F3.以值方式返回局部对象\n",[105,19231,19232,19234],{"class":107,"line":1309},[105,19233,14686],{"class":111},[105,19235,15163],{"class":1954},[105,19237,19238],{"class":107,"line":1321},[105,19239,1537],{"class":115},[105,19241,19242],{"class":107,"line":1603},[105,19243,14708],{"class":111},[105,19245,19246,19248],{"class":107,"line":1608},[105,19247,18511],{"class":1954},[105,19249,1967],{"class":115},[105,19251,19252],{"class":107,"line":1614},[105,19253,2021],{"class":115},[105,19255,19256,19258,19260,19263,19265],{"class":107,"line":1619},[105,19257,9661],{"class":115},[105,19259,1160],{"class":111},[105,19261,19262],{"class":220}," \"Person的默认构造函数调用\"",[105,19264,1436],{"class":111},[105,19266,8832],{"class":115},[105,19268,19269],{"class":107,"line":1633},[105,19270,2178],{"class":115},[105,19272,19273],{"class":107,"line":1638},[105,19274,19275],{"class":174},"    \u002F\u002F有参构造\n",[105,19277,19278,19280,19282,19284,19286],{"class":107,"line":1644},[105,19279,18511],{"class":1954},[105,19281,116],{"class":115},[105,19283,119],{"class":111},[105,19285,15681],{"class":5208},[105,19287,122],{"class":115},[105,19289,19290],{"class":107,"line":1665},[105,19291,2021],{"class":115},[105,19293,19294,19296,19298],{"class":107,"line":1670},[105,19295,15735],{"class":115},[105,19297,161],{"class":111},[105,19299,7789],{"class":115},[105,19301,19302,19304,19306,19309,19311],{"class":107,"line":1684},[105,19303,9661],{"class":115},[105,19305,1160],{"class":111},[105,19307,19308],{"class":220}," \"Person的有参构造函数调用\"",[105,19310,1436],{"class":111},[105,19312,8832],{"class":115},[105,19314,19315],{"class":107,"line":1689},[105,19316,2178],{"class":115},[105,19318,19319],{"class":107,"line":1718},[105,19320,18866],{"class":174},[105,19322,19323,19325,19327,19329,19331,19333,19335],{"class":107,"line":1723},[105,19324,18511],{"class":1954},[105,19326,116],{"class":115},[105,19328,6784],{"class":111},[105,19330,15561],{"class":1954},[105,19332,10576],{"class":111},[105,19334,14],{"class":5208},[105,19336,122],{"class":115},[105,19338,19339],{"class":107,"line":1740},[105,19340,2021],{"class":115},[105,19342,19343,19345,19347],{"class":107,"line":1745},[105,19344,15735],{"class":115},[105,19346,161],{"class":111},[105,19348,19349],{"class":115}," p.m_Age;\n",[105,19351,19352,19354,19356,19359,19361],{"class":107,"line":1750},[105,19353,9661],{"class":115},[105,19355,1160],{"class":111},[105,19357,19358],{"class":220}," \"Person的拷贝构造函数调用\"",[105,19360,1436],{"class":111},[105,19362,8832],{"class":115},[105,19364,19365],{"class":107,"line":1755},[105,19366,2178],{"class":115},[105,19368,19369,19371],{"class":107,"line":1769},[105,19370,18544],{"class":1954},[105,19372,1967],{"class":115},[105,19374,19375],{"class":107,"line":1774},[105,19376,2021],{"class":115},[105,19378,19379,19381,19383,19385,19387],{"class":107,"line":2568},[105,19380,9661],{"class":115},[105,19382,1160],{"class":111},[105,19384,18559],{"class":220},[105,19386,1436],{"class":111},[105,19388,8832],{"class":115},[105,19390,19391],{"class":107,"line":2582},[105,19392,2178],{"class":115},[105,19394,19395,19397],{"class":107,"line":2590},[105,19396,1976],{"class":111},[105,19398,15658],{"class":115},[105,19400,19401],{"class":107,"line":2595},[105,19402,3986],{"class":115},[105,19404,19405],{"class":107,"line":2601},[105,19406,19219],{"class":174},[105,19408,19409,19411,19413],{"class":107,"line":2607},[105,19410,5356],{"class":111},[105,19412,5580],{"class":1954},[105,19414,1967],{"class":115},[105,19416,19417],{"class":107,"line":2612},[105,19418,1537],{"class":115},[105,19420,19421,19424,19426,19428,19430],{"class":107,"line":7940},[105,19422,19423],{"class":115},"    Person ",[105,19425,7122],{"class":1954},[105,19427,116],{"class":115},[105,19429,816],{"class":164},[105,19431,2710],{"class":115},[105,19433,19434,19436,19438],{"class":107,"line":7964},[105,19435,19423],{"class":115},[105,19437,7025],{"class":1954},[105,19439,17507],{"class":115},[105,19441,19442,19444,19446,19449,19451,19454,19456],{"class":107,"line":7969},[105,19443,1542],{"class":115},[105,19445,1160],{"class":111},[105,19447,19448],{"class":220},"\"P2的年龄为：\"",[105,19450,1160],{"class":111},[105,19452,19453],{"class":115},"p2.m_Age",[105,19455,1160],{"class":111},[105,19457,1183],{"class":115},[105,19459,19460],{"class":107,"line":7975},[105,19461,1556],{"class":115},[105,19463,19464],{"class":107,"line":8002},[105,19465,19466],{"class":174},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[105,19468,19469],{"class":107,"line":8007},[105,19470,19471],{"class":174},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[105,19473,19474,19476,19479,19481,19483,19485],{"class":107,"line":8013},[105,19475,5356],{"class":111},[105,19477,19478],{"class":1954}," doWork",[105,19480,116],{"class":115},[105,19482,19038],{"class":1954},[105,19484,6817],{"class":5208},[105,19486,122],{"class":115},[105,19488,19489],{"class":107,"line":8025},[105,19490,1537],{"class":115},[105,19492,19493,19495,19497,19500,19502],{"class":107,"line":8037},[105,19494,6521],{"class":115},[105,19496,1160],{"class":111},[105,19498,19499],{"class":220}," \"doWork函数调用\"",[105,19501,1436],{"class":111},[105,19503,8832],{"class":115},[105,19505,19506],{"class":107,"line":8049},[105,19507,1556],{"class":115},[105,19509,19510,19512,19514],{"class":107,"line":9708},[105,19511,5356],{"class":111},[105,19513,5649],{"class":1954},[105,19515,1967],{"class":115},[105,19517,19518],{"class":107,"line":9733},[105,19519,1537],{"class":115},[105,19521,19522],{"class":107,"line":9756},[105,19523,15305],{"class":115},[105,19525,19526,19529],{"class":107,"line":9780},[105,19527,19528],{"class":1954},"    doWork",[105,19530,19531],{"class":115},"(p);\n",[105,19533,19534],{"class":107,"line":9785},[105,19535,1556],{"class":115},[105,19537,19538],{"class":107,"line":9790},[105,19539,19540],{"class":174},"\u002F\u002F 3.以值方式返回局部对象\n",[105,19542,19543,19545,19548],{"class":107,"line":9795},[105,19544,19038],{"class":1954},[105,19546,19547],{"class":1954}," doWork2",[105,19549,1967],{"class":115},[105,19551,19552],{"class":107,"line":9804},[105,19553,1537],{"class":115},[105,19555,19556],{"class":107,"line":9809},[105,19557,19028],{"class":115},[105,19559,19560,19562,19564,19566,19568,19570,19572,19574,19576,19578,19580],{"class":107,"line":9815},[105,19561,1542],{"class":115},[105,19563,1160],{"class":111},[105,19565,116],{"class":115},[105,19567,119],{"class":111},[105,19569,6510],{"class":111},[105,19571,545],{"class":115},[105,19573,469],{"class":111},[105,19575,7122],{"class":115},[105,19577,1160],{"class":111},[105,19579,1230],{"class":115},[105,19581,19582],{"class":174},"\u002F\u002F打印p1的地址\n",[105,19584,19585,19587,19590],{"class":107,"line":9836},[105,19586,4081],{"class":111},[105,19588,19589],{"class":115}," p1;",[105,19591,19592],{"class":174},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[105,19594,19595],{"class":107,"line":9842},[105,19596,1556],{"class":115},[105,19598,19599,19601,19603],{"class":107,"line":9856},[105,19600,5356],{"class":111},[105,19602,5721],{"class":1954},[105,19604,1967],{"class":115},[105,19606,19607],{"class":107,"line":9862},[105,19608,1537],{"class":115},[105,19610,19611,19614,19616,19618],{"class":107,"line":9889},[105,19612,19613],{"class":115},"    Person p ",[105,19615,161],{"class":111},[105,19617,19547],{"class":1954},[105,19619,5628],{"class":115},[105,19621,19622,19624,19626,19628,19630,19632,19634,19636,19638,19640,19642],{"class":107,"line":9898},[105,19623,1542],{"class":115},[105,19625,1160],{"class":111},[105,19627,116],{"class":115},[105,19629,119],{"class":111},[105,19631,6510],{"class":111},[105,19633,545],{"class":115},[105,19635,469],{"class":111},[105,19637,14],{"class":115},[105,19639,1160],{"class":111},[105,19641,1230],{"class":115},[105,19643,19644],{"class":174},"\u002F\u002F打印p的地址\n",[105,19646,19647],{"class":107,"line":9904},[105,19648,1556],{"class":115},[105,19650,19651],{"class":107,"line":9912},[105,19652,2391],{"emptyLinePlaceholder":32},[105,19654,19655],{"class":107,"line":9917},[105,19656,2391],{"emptyLinePlaceholder":32},[105,19658,19659,19661,19663],{"class":107,"line":16596},[105,19660,119],{"class":111},[105,19662,1964],{"class":1954},[105,19664,1967],{"class":115},[105,19666,19667],{"class":107,"line":16602},[105,19668,1537],{"class":115},[105,19670,19671],{"class":107,"line":16625},[105,19672,19673],{"class":174},"    \u002F\u002F test01();\n",[105,19675,19676],{"class":107,"line":16631},[105,19677,19678],{"class":174},"    \u002F\u002F test02();\n",[105,19680,19681,19684],{"class":107,"line":16654},[105,19682,19683],{"class":1954},"    test03",[105,19685,5628],{"class":115},[105,19687,19688],{"class":107,"line":16668},[105,19689,19690],{"class":174},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[105,19692,19693],{"class":107,"line":16688},[105,19694,19695],{"class":174},"\u002F\u002F 输出结果如下：\n",[105,19697,19698],{"class":107,"line":16694},[105,19699,19700],{"class":174},"\u002F\u002F Person的默认构造函数调用\n",[105,19702,19703],{"class":107,"line":16705},[105,19704,19705],{"class":174},"\u002F\u002F 0x7fffffffceec\n",[105,19707,19708],{"class":107,"line":16728},[105,19709,19705],{"class":174},[105,19711,19712],{"class":107,"line":16750},[105,19713,19714],{"class":174},"\u002F\u002F Person的析构函数调用\n",[105,19716,19717],{"class":107,"line":16755},[105,19718,2391],{"emptyLinePlaceholder":32},[105,19720,19721],{"class":107,"line":16761},[105,19722,19723],{"class":174},"\u002F\u002F 之前的输出结果如下：\n",[105,19725,19726],{"class":107,"line":16775},[105,19727,19700],{"class":174},[105,19729,19730],{"class":107,"line":16788},[105,19731,19732],{"class":174},"\u002F\u002F 地址\n",[105,19734,19735],{"class":107,"line":16793},[105,19736,19737],{"class":174},"\u002F\u002F Person的拷贝构造函数调用\n",[105,19739,19740],{"class":107,"line":16807},[105,19741,19714],{"class":174},[105,19743,19744],{"class":107,"line":16812},[105,19745,19732],{"class":174},[105,19747,19748],{"class":107,"line":16818},[105,19749,19750],{"class":174},"\u002F\u002F (这两次输出的地址也是不同的) \n",[105,19752,19753],{"class":107,"line":16823},[105,19754,19755],{"class":174},"\u002F\u002F Person的析构函数调用     \n",[105,19757,19758,19760,19762],{"class":107,"line":16837},[105,19759,4081],{"class":111},[105,19761,4084],{"class":164},[105,19763,1282],{"class":115},[105,19765,19766],{"class":107,"line":16842},[105,19767,1556],{"class":115},[14,19769,19770],{},"简化版理解",[96,19772,19774],{"className":98,"code":19773,"language":100,"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",[102,19775,19776,19784,19788,19794,19807,19818,19822,19834,19847,19855,19859,19875,19888,19897,19901,19906,19912,19925,19929,19933,19940,19944,19948,19953,19961,19965,19981,19994,20007,20011,20016,20024,20028,20032,20037,20042,20058,20066,20073,20079,20083,20087,20092,20100,20104,20108,20131,20138,20142,20146,20154,20158,20168,20190,20194,20198,20202,20210,20214,20219,20224,20230,20234,20244,20248,20256],{"__ignoreMap":22},[105,19777,19778,19780,19782],{"class":107,"line":108},[105,19779,14686],{"class":111},[105,19781,15561],{"class":1954},[105,19783,15564],{"class":115},[105,19785,19786],{"class":107,"line":28},[105,19787,14708],{"class":111},[105,19789,19790,19792],{"class":107,"line":1171},[105,19791,18511],{"class":1954},[105,19793,10845],{"class":115},[105,19795,19796,19798,19800,19803,19805],{"class":107,"line":1186},[105,19797,9661],{"class":115},[105,19799,1160],{"class":111},[105,19801,19802],{"class":220}," \"无参构造函数!\"",[105,19804,1436],{"class":111},[105,19806,8832],{"class":115},[105,19808,19809,19812,19814,19816],{"class":107,"line":1192},[105,19810,19811],{"class":115},"        mAge ",[105,19813,161],{"class":111},[105,19815,4084],{"class":164},[105,19817,1282],{"class":115},[105,19819,19820],{"class":107,"line":1206},[105,19821,2178],{"class":115},[105,19823,19824,19826,19828,19830,19832],{"class":107,"line":1212},[105,19825,18511],{"class":1954},[105,19827,116],{"class":115},[105,19829,119],{"class":111},[105,19831,15681],{"class":5208},[105,19833,12434],{"class":115},[105,19835,19836,19838,19840,19843,19845],{"class":107,"line":1303},[105,19837,9661],{"class":115},[105,19839,1160],{"class":111},[105,19841,19842],{"class":220}," \"有参构造函数!\"",[105,19844,1436],{"class":111},[105,19846,8832],{"class":115},[105,19848,19849,19851,19853],{"class":107,"line":1309},[105,19850,19811],{"class":115},[105,19852,161],{"class":111},[105,19854,7789],{"class":115},[105,19856,19857],{"class":107,"line":1321},[105,19858,2178],{"class":115},[105,19860,19861,19863,19865,19867,19869,19871,19873],{"class":107,"line":1603},[105,19862,18511],{"class":1954},[105,19864,116],{"class":115},[105,19866,6784],{"class":111},[105,19868,15561],{"class":1954},[105,19870,469],{"class":111},[105,19872,6817],{"class":5208},[105,19874,12434],{"class":115},[105,19876,19877,19879,19881,19884,19886],{"class":107,"line":1608},[105,19878,9661],{"class":115},[105,19880,1160],{"class":111},[105,19882,19883],{"class":220}," \"拷贝构造函数!\"",[105,19885,1436],{"class":111},[105,19887,8832],{"class":115},[105,19889,19890,19892,19894],{"class":107,"line":1614},[105,19891,19811],{"class":115},[105,19893,161],{"class":111},[105,19895,19896],{"class":115}," p.mAge;\n",[105,19898,19899],{"class":107,"line":1619},[105,19900,2178],{"class":115},[105,19902,19903],{"class":107,"line":1633},[105,19904,19905],{"class":174},"    \u002F\u002F析构函数在释放内存之前调用\n",[105,19907,19908,19910],{"class":107,"line":1638},[105,19909,18544],{"class":1954},[105,19911,10845],{"class":115},[105,19913,19914,19916,19918,19921,19923],{"class":107,"line":1644},[105,19915,9661],{"class":115},[105,19917,1160],{"class":111},[105,19919,19920],{"class":220}," \"析构函数!\"",[105,19922,1436],{"class":111},[105,19924,8832],{"class":115},[105,19926,19927],{"class":107,"line":1665},[105,19928,2178],{"class":115},[105,19930,19931],{"class":107,"line":1670},[105,19932,14708],{"class":111},[105,19934,19935,19937],{"class":107,"line":1684},[105,19936,1976],{"class":111},[105,19938,19939],{"class":115}," mAge;\n",[105,19941,19942],{"class":107,"line":1689},[105,19943,3986],{"class":115},[105,19945,19946],{"class":107,"line":1718},[105,19947,2391],{"emptyLinePlaceholder":32},[105,19949,19950],{"class":107,"line":1723},[105,19951,19952],{"class":174},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[105,19954,19955,19957,19959],{"class":107,"line":1740},[105,19956,5356],{"class":111},[105,19958,5580],{"class":1954},[105,19960,10845],{"class":115},[105,19962,19963],{"class":107,"line":1745},[105,19964,2391],{"emptyLinePlaceholder":32},[105,19966,19967,19969,19972,19974,19976,19978],{"class":107,"line":1750},[105,19968,19423],{"class":115},[105,19970,19971],{"class":1954},"man",[105,19973,116],{"class":115},[105,19975,427],{"class":164},[105,19977,5958],{"class":115},[105,19979,19980],{"class":174}," \u002F\u002Fp对象已经创建完毕\n",[105,19982,19983,19985,19988,19991],{"class":107,"line":1755},[105,19984,19423],{"class":115},[105,19986,19987],{"class":1954},"newman",[105,19989,19990],{"class":115},"(man);",[105,19992,19993],{"class":174}," \u002F\u002F调用拷贝构造函数\n",[105,19995,19996,19999,20001,20004],{"class":107,"line":1769},[105,19997,19998],{"class":115},"    Person newman2 ",[105,20000,161],{"class":111},[105,20002,20003],{"class":115}," man;",[105,20005,20006],{"class":174}," \u002F\u002F拷贝构造\n",[105,20008,20009],{"class":107,"line":1774},[105,20010,2391],{"emptyLinePlaceholder":32},[105,20012,20013],{"class":107,"line":2568},[105,20014,20015],{"class":174},"    \u002F\u002FPerson newman3;\n",[105,20017,20018,20021],{"class":107,"line":2582},[105,20019,20020],{"class":174},"    \u002F\u002Fnewman3 = man;",[105,20022,20023],{"class":174}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[105,20025,20026],{"class":107,"line":2590},[105,20027,1556],{"class":115},[105,20029,20030],{"class":107,"line":2595},[105,20031,2391],{"emptyLinePlaceholder":32},[105,20033,20034],{"class":107,"line":2601},[105,20035,20036],{"class":174},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[105,20038,20039],{"class":107,"line":2607},[105,20040,20041],{"class":174},"\u002F\u002F相当于Person p1 = p;\n",[105,20043,20044,20046,20048,20050,20052,20055],{"class":107,"line":2612},[105,20045,5356],{"class":111},[105,20047,19478],{"class":1954},[105,20049,116],{"class":115},[105,20051,19038],{"class":1954},[105,20053,20054],{"class":5208}," p1",[105,20056,20057],{"class":115},") {}\n",[105,20059,20060,20062,20064],{"class":107,"line":7940},[105,20061,5356],{"class":111},[105,20063,5649],{"class":1954},[105,20065,10845],{"class":115},[105,20067,20068,20070],{"class":107,"line":7964},[105,20069,18596],{"class":115},[105,20071,20072],{"class":174}," \u002F\u002F无参构造函数\n",[105,20074,20075,20077],{"class":107,"line":7969},[105,20076,19528],{"class":1954},[105,20078,19531],{"class":115},[105,20080,20081],{"class":107,"line":7975},[105,20082,1556],{"class":115},[105,20084,20085],{"class":107,"line":8002},[105,20086,2391],{"emptyLinePlaceholder":32},[105,20088,20089],{"class":107,"line":8007},[105,20090,20091],{"class":174},"\u002F\u002F3. 以值方式返回局部对象\n",[105,20093,20094,20096,20098],{"class":107,"line":8013},[105,20095,19038],{"class":1954},[105,20097,19547],{"class":1954},[105,20099,1967],{"class":115},[105,20101,20102],{"class":107,"line":8025},[105,20103,1537],{"class":115},[105,20105,20106],{"class":107,"line":8037},[105,20107,19028],{"class":115},[105,20109,20110,20112,20114,20116,20118,20120,20122,20124,20127,20129],{"class":107,"line":8049},[105,20111,6521],{"class":115},[105,20113,1160],{"class":111},[105,20115,1649],{"class":115},[105,20117,119],{"class":111},[105,20119,6510],{"class":111},[105,20121,545],{"class":115},[105,20123,469],{"class":111},[105,20125,20126],{"class":115},"p1 ",[105,20128,1160],{"class":111},[105,20130,8832],{"class":115},[105,20132,20133,20135],{"class":107,"line":9708},[105,20134,4081],{"class":111},[105,20136,20137],{"class":115}," p1;\n",[105,20139,20140],{"class":107,"line":9733},[105,20141,1556],{"class":115},[105,20143,20144],{"class":107,"line":9756},[105,20145,2391],{"emptyLinePlaceholder":32},[105,20147,20148,20150,20152],{"class":107,"line":9780},[105,20149,5356],{"class":111},[105,20151,5721],{"class":1954},[105,20153,1967],{"class":115},[105,20155,20156],{"class":107,"line":9785},[105,20157,1537],{"class":115},[105,20159,20160,20162,20164,20166],{"class":107,"line":9790},[105,20161,19613],{"class":115},[105,20163,161],{"class":111},[105,20165,19547],{"class":1954},[105,20167,5628],{"class":115},[105,20169,20170,20172,20174,20176,20178,20180,20182,20184,20186,20188],{"class":107,"line":9795},[105,20171,6521],{"class":115},[105,20173,1160],{"class":111},[105,20175,1649],{"class":115},[105,20177,119],{"class":111},[105,20179,6510],{"class":111},[105,20181,545],{"class":115},[105,20183,469],{"class":111},[105,20185,11440],{"class":115},[105,20187,1160],{"class":111},[105,20189,8832],{"class":115},[105,20191,20192],{"class":107,"line":9804},[105,20193,1556],{"class":115},[105,20195,20196],{"class":107,"line":9809},[105,20197,2391],{"emptyLinePlaceholder":32},[105,20199,20200],{"class":107,"line":9815},[105,20201,2391],{"emptyLinePlaceholder":32},[105,20203,20204,20206,20208],{"class":107,"line":9836},[105,20205,119],{"class":111},[105,20207,1964],{"class":1954},[105,20209,10845],{"class":115},[105,20211,20212],{"class":107,"line":9842},[105,20213,2391],{"emptyLinePlaceholder":32},[105,20215,20216],{"class":107,"line":9856},[105,20217,20218],{"class":174},"    \u002F\u002Ftest01();\n",[105,20220,20221],{"class":107,"line":9862},[105,20222,20223],{"class":174},"    \u002F\u002Ftest02();\n",[105,20225,20226,20228],{"class":107,"line":9889},[105,20227,19683],{"class":1954},[105,20229,5628],{"class":115},[105,20231,20232],{"class":107,"line":9898},[105,20233,2391],{"emptyLinePlaceholder":32},[105,20235,20236,20238,20240,20242],{"class":107,"line":9904},[105,20237,2294],{"class":1954},[105,20239,116],{"class":115},[105,20241,2299],{"class":220},[105,20243,2710],{"class":115},[105,20245,20246],{"class":107,"line":9912},[105,20247,2391],{"emptyLinePlaceholder":32},[105,20249,20250,20252,20254],{"class":107,"line":9917},[105,20251,4081],{"class":111},[105,20253,4084],{"class":164},[105,20255,1282],{"class":115},[105,20257,20258],{"class":107,"line":16596},[105,20259,1556],{"class":115},[76,20261,20263],{"id":20262},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20265,20266],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20268,20269],{},"1．默认构造函数(无参，函数体为空)",[14,20271,20272],{},"2．默认析构函数(无参，函数体为空)",[14,20274,20275],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20277,20278],{},"构造函数调用规则如下：",[1123,20280,20281,20284],{},[62,20282,20283],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[62,20285,20286],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[96,20288,20290],{"className":98,"code":20289,"language":100,"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",[102,20291,20292,20300,20304,20309,20315,20327,20331,20336,20348,20357,20369,20373,20377,20393,20402,20414,20418,20422,20428,20440,20444,20448,20454,20458,20462,20470,20474,20486,20491,20499,20503,20521,20525,20529,20537,20541,20546,20554,20569,20582,20586,20591,20598,20614,20627,20631,20635,20643,20647,20653,20657,20667,20671,20679],{"__ignoreMap":22},[105,20293,20294,20296,20298],{"class":107,"line":108},[105,20295,14686],{"class":111},[105,20297,15561],{"class":1954},[105,20299,15564],{"class":115},[105,20301,20302],{"class":107,"line":28},[105,20303,14708],{"class":111},[105,20305,20306],{"class":107,"line":1171},[105,20307,20308],{"class":174},"    \u002F\u002F无参（默认）构造函数\n",[105,20310,20311,20313],{"class":107,"line":1186},[105,20312,18511],{"class":1954},[105,20314,10845],{"class":115},[105,20316,20317,20319,20321,20323,20325],{"class":107,"line":1192},[105,20318,9661],{"class":115},[105,20320,1160],{"class":111},[105,20322,19802],{"class":220},[105,20324,1436],{"class":111},[105,20326,8832],{"class":115},[105,20328,20329],{"class":107,"line":1206},[105,20330,2178],{"class":115},[105,20332,20333],{"class":107,"line":1212},[105,20334,20335],{"class":174},"    \u002F\u002F有参构造函数\n",[105,20337,20338,20340,20342,20344,20346],{"class":107,"line":1303},[105,20339,18511],{"class":1954},[105,20341,116],{"class":115},[105,20343,119],{"class":111},[105,20345,1390],{"class":5208},[105,20347,12434],{"class":115},[105,20349,20350,20353,20355],{"class":107,"line":1309},[105,20351,20352],{"class":115},"        age ",[105,20354,161],{"class":111},[105,20356,1424],{"class":115},[105,20358,20359,20361,20363,20365,20367],{"class":107,"line":1321},[105,20360,9661],{"class":115},[105,20362,1160],{"class":111},[105,20364,19842],{"class":220},[105,20366,1436],{"class":111},[105,20368,8832],{"class":115},[105,20370,20371],{"class":107,"line":1603},[105,20372,2178],{"class":115},[105,20374,20375],{"class":107,"line":1608},[105,20376,18866],{"class":174},[105,20378,20379,20381,20383,20385,20387,20389,20391],{"class":107,"line":1614},[105,20380,18511],{"class":1954},[105,20382,116],{"class":115},[105,20384,6784],{"class":111},[105,20386,15561],{"class":1954},[105,20388,469],{"class":111},[105,20390,6817],{"class":5208},[105,20392,12434],{"class":115},[105,20394,20395,20397,20399],{"class":107,"line":1619},[105,20396,20352],{"class":115},[105,20398,161],{"class":111},[105,20400,20401],{"class":115}," p.age;\n",[105,20403,20404,20406,20408,20410,20412],{"class":107,"line":1633},[105,20405,9661],{"class":115},[105,20407,1160],{"class":111},[105,20409,19883],{"class":220},[105,20411,1436],{"class":111},[105,20413,8832],{"class":115},[105,20415,20416],{"class":107,"line":1638},[105,20417,2178],{"class":115},[105,20419,20420],{"class":107,"line":1644},[105,20421,18539],{"class":174},[105,20423,20424,20426],{"class":107,"line":1665},[105,20425,18544],{"class":1954},[105,20427,10845],{"class":115},[105,20429,20430,20432,20434,20436,20438],{"class":107,"line":1670},[105,20431,9661],{"class":115},[105,20433,1160],{"class":111},[105,20435,19920],{"class":220},[105,20437,1436],{"class":111},[105,20439,8832],{"class":115},[105,20441,20442],{"class":107,"line":1684},[105,20443,2178],{"class":115},[105,20445,20446],{"class":107,"line":1689},[105,20447,14708],{"class":111},[105,20449,20450,20452],{"class":107,"line":1718},[105,20451,1976],{"class":111},[105,20453,7789],{"class":115},[105,20455,20456],{"class":107,"line":1723},[105,20457,3986],{"class":115},[105,20459,20460],{"class":107,"line":1740},[105,20461,2391],{"emptyLinePlaceholder":32},[105,20463,20464,20466,20468],{"class":107,"line":1745},[105,20465,5356],{"class":111},[105,20467,5580],{"class":1954},[105,20469,1967],{"class":115},[105,20471,20472],{"class":107,"line":1750},[105,20473,1537],{"class":115},[105,20475,20476,20478,20480,20482,20484],{"class":107,"line":1755},[105,20477,19423],{"class":115},[105,20479,7122],{"class":1954},[105,20481,116],{"class":115},[105,20483,766],{"class":164},[105,20485,2710],{"class":115},[105,20487,20488],{"class":107,"line":1769},[105,20489,20490],{"class":174},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[105,20492,20493,20495,20497],{"class":107,"line":1774},[105,20494,19423],{"class":115},[105,20496,7025],{"class":1954},[105,20498,17507],{"class":115},[105,20500,20501],{"class":107,"line":2568},[105,20502,2391],{"emptyLinePlaceholder":32},[105,20504,20505,20507,20509,20512,20514,20517,20519],{"class":107,"line":2582},[105,20506,6521],{"class":115},[105,20508,1160],{"class":111},[105,20510,20511],{"class":220}," \"p2的年龄为： \"",[105,20513,1436],{"class":111},[105,20515,20516],{"class":115}," p2.age ",[105,20518,1160],{"class":111},[105,20520,8832],{"class":115},[105,20522,20523],{"class":107,"line":2590},[105,20524,1556],{"class":115},[105,20526,20527],{"class":107,"line":2595},[105,20528,2391],{"emptyLinePlaceholder":32},[105,20530,20531,20533,20535],{"class":107,"line":2601},[105,20532,5356],{"class":111},[105,20534,5649],{"class":1954},[105,20536,1967],{"class":115},[105,20538,20539],{"class":107,"line":2607},[105,20540,1537],{"class":115},[105,20542,20543],{"class":107,"line":2612},[105,20544,20545],{"class":174},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[105,20547,20548,20551],{"class":107,"line":7940},[105,20549,20550],{"class":115},"    Person p1;",[105,20552,20553],{"class":174}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[105,20555,20556,20558,20560,20562,20564,20566],{"class":107,"line":7964},[105,20557,19423],{"class":115},[105,20559,7025],{"class":1954},[105,20561,116],{"class":115},[105,20563,562],{"class":164},[105,20565,5958],{"class":115},[105,20567,20568],{"class":174}," \u002F\u002F用户提供的有参\n",[105,20570,20571,20573,20576,20579],{"class":107,"line":7969},[105,20572,19423],{"class":115},[105,20574,20575],{"class":1954},"p3",[105,20577,20578],{"class":115},"(p2);",[105,20580,20581],{"class":174}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[105,20583,20584],{"class":107,"line":7975},[105,20585,2391],{"emptyLinePlaceholder":32},[105,20587,20588],{"class":107,"line":8002},[105,20589,20590],{"class":174},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[105,20592,20593,20596],{"class":107,"line":8007},[105,20594,20595],{"class":115},"    Person p4;",[105,20597,20553],{"class":174},[105,20599,20600,20602,20605,20607,20609,20611],{"class":107,"line":8013},[105,20601,19423],{"class":115},[105,20603,20604],{"class":1954},"p5",[105,20606,116],{"class":115},[105,20608,562],{"class":164},[105,20610,5958],{"class":115},[105,20612,20613],{"class":174}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[105,20615,20616,20618,20621,20624],{"class":107,"line":8025},[105,20617,19423],{"class":115},[105,20619,20620],{"class":1954},"p6",[105,20622,20623],{"class":115},"(p5);",[105,20625,20626],{"class":174}," \u002F\u002F用户自己提供拷贝构造\n",[105,20628,20629],{"class":107,"line":8037},[105,20630,1556],{"class":115},[105,20632,20633],{"class":107,"line":8049},[105,20634,2391],{"emptyLinePlaceholder":32},[105,20636,20637,20639,20641],{"class":107,"line":9708},[105,20638,119],{"class":111},[105,20640,1964],{"class":1954},[105,20642,10845],{"class":115},[105,20644,20645],{"class":107,"line":9733},[105,20646,2391],{"emptyLinePlaceholder":32},[105,20648,20649,20651],{"class":107,"line":9756},[105,20650,5625],{"class":1954},[105,20652,5628],{"class":115},[105,20654,20655],{"class":107,"line":9780},[105,20656,2391],{"emptyLinePlaceholder":32},[105,20658,20659,20661,20663,20665],{"class":107,"line":9785},[105,20660,2294],{"class":1954},[105,20662,116],{"class":115},[105,20664,2299],{"class":220},[105,20666,2710],{"class":115},[105,20668,20669],{"class":107,"line":9790},[105,20670,2391],{"emptyLinePlaceholder":32},[105,20672,20673,20675,20677],{"class":107,"line":9795},[105,20674,4081],{"class":111},[105,20676,4084],{"class":164},[105,20678,1282],{"class":115},[105,20680,20681],{"class":107,"line":9804},[105,20682,1556],{"class":115},[76,20684,20686],{"id":20685},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20688,20689],{},"浅拷贝：简单的赋值拷贝操作",[14,20691,20692],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[96,20694,20696],{"className":98,"code":20695,"language":100,"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",[102,20697,20698,20704,20714,20720,20724,20728,20733,20739,20743,20756,20760,20764,20771,20775,20785,20800,20813,20817,20822,20827,20843,20847,20860,20865,20870,20875,20884,20889,20904,20908,20912,20916,20922,20926,20931,20946,20950,20961,20975,20979,20988,20992,20998,21010,21014,21022,21026,21043,21074,21082,21110,21114,21118,21126,21130,21136],{"__ignoreMap":22},[105,20699,20700,20702],{"class":107,"line":108},[105,20701,1940],{"class":111},[105,20703,1943],{"class":220},[105,20705,20706,20708,20710,20712],{"class":107,"line":28},[105,20707,1948],{"class":111},[105,20709,1951],{"class":111},[105,20711,1955],{"class":1954},[105,20713,1282],{"class":115},[105,20715,20716,20718],{"class":107,"line":1171},[105,20717,14686],{"class":111},[105,20719,15163],{"class":1954},[105,20721,20722],{"class":107,"line":1186},[105,20723,1537],{"class":115},[105,20725,20726],{"class":107,"line":1192},[105,20727,14708],{"class":111},[105,20729,20730],{"class":107,"line":1206},[105,20731,20732],{"class":174},"    \u002F\u002F默认构造函数\n",[105,20734,20735,20737],{"class":107,"line":1212},[105,20736,18511],{"class":1954},[105,20738,1967],{"class":115},[105,20740,20741],{"class":107,"line":1303},[105,20742,2021],{"class":115},[105,20744,20745,20747,20749,20752,20754],{"class":107,"line":1309},[105,20746,3442],{"class":115},[105,20748,1160],{"class":111},[105,20750,20751],{"class":220},"\"默认构造函数\"",[105,20753,1160],{"class":111},[105,20755,1183],{"class":115},[105,20757,20758],{"class":107,"line":1321},[105,20759,2178],{"class":115},[105,20761,20762],{"class":107,"line":1603},[105,20763,20335],{"class":174},[105,20765,20766,20768],{"class":107,"line":1608},[105,20767,18544],{"class":1954},[105,20769,20770],{"class":115},"(int age,int height)\n",[105,20772,20773],{"class":107,"line":1614},[105,20774,2021],{"class":115},[105,20776,20777,20780,20782],{"class":107,"line":1619},[105,20778,20779],{"class":115},"        m_Age",[105,20781,161],{"class":111},[105,20783,20784],{"class":115},"age;\n",[105,20786,20787,20790,20792,20794,20797],{"class":107,"line":1633},[105,20788,20789],{"class":115},"        m_Height",[105,20791,11709],{"class":111},[105,20793,2373],{"class":111},[105,20795,20796],{"class":115},"(height);",[105,20798,20799],{"class":174},"\u002F\u002F放到堆区\n",[105,20801,20802,20804,20806,20809,20811],{"class":107,"line":1638},[105,20803,3442],{"class":115},[105,20805,1160],{"class":111},[105,20807,20808],{"class":220},"\"有参构造函数\"",[105,20810,1160],{"class":111},[105,20812,1183],{"class":115},[105,20814,20815],{"class":107,"line":1644},[105,20816,2178],{"class":115},[105,20818,20819],{"class":107,"line":1665},[105,20820,20821],{"class":174},"    \u002F\u002F深拷贝解决上述问题\n",[105,20823,20824],{"class":107,"line":1670},[105,20825,20826],{"class":174},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[105,20828,20829,20831,20833,20835,20837,20839,20841],{"class":107,"line":1684},[105,20830,18511],{"class":1954},[105,20832,116],{"class":115},[105,20834,6784],{"class":111},[105,20836,15561],{"class":1954},[105,20838,10576],{"class":111},[105,20840,14],{"class":5208},[105,20842,122],{"class":115},[105,20844,20845],{"class":107,"line":1689},[105,20846,2021],{"class":115},[105,20848,20849,20851,20853,20856,20858],{"class":107,"line":1718},[105,20850,3442],{"class":115},[105,20852,1160],{"class":111},[105,20854,20855],{"class":220},"\"拷贝构造函数\"",[105,20857,1160],{"class":111},[105,20859,1183],{"class":115},[105,20861,20862],{"class":107,"line":1723},[105,20863,20864],{"class":174},"        \u002F\u002F编译器默认的写如下注释部分\n",[105,20866,20867],{"class":107,"line":1740},[105,20868,20869],{"class":174},"        \u002F\u002Fm_Age=p.m_Age;\n",[105,20871,20872],{"class":107,"line":1745},[105,20873,20874],{"class":174},"        \u002F\u002Fm_Height=p.m_Height;\n",[105,20876,20877,20879,20881],{"class":107,"line":1750},[105,20878,20779],{"class":115},[105,20880,161],{"class":111},[105,20882,20883],{"class":115},"p.m_Age;\n",[105,20885,20886],{"class":107,"line":1755},[105,20887,20888],{"class":174},"        \u002F\u002F深拷贝操作\n",[105,20890,20891,20893,20895,20897,20899,20901],{"class":107,"line":1769},[105,20892,20789],{"class":115},[105,20894,11709],{"class":111},[105,20896,2373],{"class":111},[105,20898,116],{"class":115},[105,20900,571],{"class":111},[105,20902,20903],{"class":115},"p.m_Height);\n",[105,20905,20906],{"class":107,"line":1774},[105,20907,2178],{"class":115},[105,20909,20910],{"class":107,"line":2568},[105,20911,2391],{"emptyLinePlaceholder":32},[105,20913,20914],{"class":107,"line":2582},[105,20915,18539],{"class":174},[105,20917,20918,20920],{"class":107,"line":2590},[105,20919,18544],{"class":1954},[105,20921,1967],{"class":115},[105,20923,20924],{"class":107,"line":2595},[105,20925,2021],{"class":115},[105,20927,20928],{"class":107,"line":2601},[105,20929,20930],{"class":174},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[105,20932,20933,20935,20938,20941,20944],{"class":107,"line":2607},[105,20934,2488],{"class":111},[105,20936,20937],{"class":115},"(m_Height ",[105,20939,20940],{"class":111},"!=",[105,20942,20943],{"class":164}," NULL",[105,20945,122],{"class":115},[105,20947,20948],{"class":107,"line":2612},[105,20949,2501],{"class":115},[105,20951,20952,20955,20958],{"class":107,"line":7940},[105,20953,20954],{"class":111},"            delete",[105,20956,20957],{"class":115}," m_Height;",[105,20959,20960],{"class":174}," \u002F\u002F释放堆区内存\n",[105,20962,20963,20966,20968,20970,20972],{"class":107,"line":7964},[105,20964,20965],{"class":115},"            m_Height",[105,20967,161],{"class":111},[105,20969,2383],{"class":164},[105,20971,171],{"class":115},[105,20973,20974],{"class":174}," \u002F\u002F防止野指针\n",[105,20976,20977],{"class":107,"line":7969},[105,20978,2520],{"class":115},[105,20980,20981,20983,20985],{"class":107,"line":7975},[105,20982,3442],{"class":115},[105,20984,1160],{"class":111},[105,20986,20987],{"class":220},"\"Person的析构函数调用\"\n",[105,20989,20990],{"class":107,"line":8002},[105,20991,2178],{"class":115},[105,20993,20994,20996],{"class":107,"line":8007},[105,20995,1976],{"class":111},[105,20997,15658],{"class":115},[105,20999,21000,21002,21004,21007],{"class":107,"line":8013},[105,21001,1976],{"class":111},[105,21003,6510],{"class":111},[105,21005,21006],{"class":115},"m_Height;",[105,21008,21009],{"class":174}," \u002F\u002F定义一个指针，指向身高\n",[105,21011,21012],{"class":107,"line":8025},[105,21013,3986],{"class":115},[105,21015,21016,21018,21020],{"class":107,"line":8037},[105,21017,5356],{"class":111},[105,21019,5580],{"class":1954},[105,21021,1967],{"class":115},[105,21023,21024],{"class":107,"line":8049},[105,21025,1537],{"class":115},[105,21027,21028,21030,21032,21034,21036,21038,21041],{"class":107,"line":9708},[105,21029,19423],{"class":115},[105,21031,7122],{"class":1954},[105,21033,116],{"class":115},[105,21035,766],{"class":164},[105,21037,494],{"class":115},[105,21039,21040],{"class":164},"160",[105,21042,2710],{"class":115},[105,21044,21045,21047,21049,21052,21054,21057,21059,21062,21064,21067,21069,21071],{"class":107,"line":9733},[105,21046,1542],{"class":115},[105,21048,1160],{"class":111},[105,21050,21051],{"class":220},"\"p1的年龄为:\"",[105,21053,1160],{"class":111},[105,21055,21056],{"class":115},"p1.m_Age",[105,21058,1160],{"class":111},[105,21060,21061],{"class":220},"\"身高为：\"",[105,21063,6411],{"class":111},[105,21065,21066],{"class":115},"p1.m_Height",[105,21068,1160],{"class":111},[105,21070,1230],{"class":115},[105,21072,21073],{"class":174},"  \u002F\u002F18\n",[105,21075,21076,21078,21080],{"class":107,"line":9756},[105,21077,19423],{"class":115},[105,21079,7025],{"class":1954},[105,21081,17507],{"class":115},[105,21083,21084,21086,21088,21091,21093,21095,21097,21099,21101,21104,21106,21108],{"class":107,"line":9780},[105,21085,1542],{"class":115},[105,21087,1160],{"class":111},[105,21089,21090],{"class":220},"\"p2的年龄为：\"",[105,21092,1160],{"class":111},[105,21094,19453],{"class":115},[105,21096,1160],{"class":111},[105,21098,21061],{"class":220},[105,21100,6411],{"class":111},[105,21102,21103],{"class":115},"p2.m_Height",[105,21105,1160],{"class":111},[105,21107,1230],{"class":115},[105,21109,21073],{"class":174},[105,21111,21112],{"class":107,"line":9785},[105,21113,13202],{"class":115},[105,21115,21116],{"class":107,"line":9790},[105,21117,1556],{"class":115},[105,21119,21120,21122,21124],{"class":107,"line":9795},[105,21121,119],{"class":111},[105,21123,1964],{"class":1954},[105,21125,1967],{"class":115},[105,21127,21128],{"class":107,"line":9804},[105,21129,1537],{"class":115},[105,21131,21132,21134],{"class":107,"line":9809},[105,21133,5625],{"class":1954},[105,21135,5628],{"class":115},[105,21137,21138],{"class":107,"line":9815},[105,21139,1556],{"class":115},[14,21141,21142],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21144,21145],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21147,21148],{},[20,21149],{"alt":22,"src":21150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21152,21153],{},"浅拷贝问题要使用深拷贝来解决",[14,21155,21156],{},[20,21157],{"alt":22,"src":21158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21160,21161],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[76,21163,21165],{"id":21164},"_826初始化列表","8.2.6初始化列表",[14,21167,21168],{},"作用：初始化属性",[14,21170,5173],{},[96,21172,21175],{"className":21173,"code":21174,"language":5179},[5177],"构造函数():属性1(值1),属性2(值2).....{}\n",[102,21176,21174],{"__ignoreMap":22},[14,21178,21179],{},"例子",[96,21181,21183],{"className":98,"code":21182,"language":100,"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",[102,21184,21185,21191,21201,21207,21211,21216,21220,21225,21230,21235,21240,21245,21250,21254,21259,21264,21307,21316,21334,21352,21370,21374,21378,21385,21392,21399,21403,21407,21415,21419,21423,21443,21452,21456,21460,21470,21474,21482],{"__ignoreMap":22},[105,21186,21187,21189],{"class":107,"line":108},[105,21188,1940],{"class":111},[105,21190,1943],{"class":220},[105,21192,21193,21195,21197,21199],{"class":107,"line":28},[105,21194,1948],{"class":111},[105,21196,1951],{"class":111},[105,21198,1955],{"class":1954},[105,21200,1282],{"class":115},[105,21202,21203,21205],{"class":107,"line":1171},[105,21204,14686],{"class":111},[105,21206,15163],{"class":1954},[105,21208,21209],{"class":107,"line":1186},[105,21210,1537],{"class":115},[105,21212,21213],{"class":107,"line":1192},[105,21214,21215],{"class":111},"    public:\n",[105,21217,21218],{"class":107,"line":1206},[105,21219,2391],{"emptyLinePlaceholder":32},[105,21221,21222],{"class":107,"line":1212},[105,21223,21224],{"class":174},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[105,21226,21227],{"class":107,"line":1303},[105,21228,21229],{"class":174},"    \u002F\u002FPerson(int a, int b, int c) {\n",[105,21231,21232],{"class":107,"line":1309},[105,21233,21234],{"class":174},"    \u002F\u002F  m_A = a;\n",[105,21236,21237],{"class":107,"line":1321},[105,21238,21239],{"class":174},"    \u002F\u002F  m_B = b;\n",[105,21241,21242],{"class":107,"line":1603},[105,21243,21244],{"class":174},"    \u002F\u002F  m_C = c;\n",[105,21246,21247],{"class":107,"line":1608},[105,21248,21249],{"class":174},"    \u002F\u002F}\n",[105,21251,21252],{"class":107,"line":1614},[105,21253,2391],{"emptyLinePlaceholder":32},[105,21255,21256],{"class":107,"line":1619},[105,21257,21258],{"class":174},"    \u002F\u002F初始化列表方式初始化\n",[105,21260,21261],{"class":107,"line":1633},[105,21262,21263],{"class":174},"    \u002F\u002F使用有参构造函数\n",[105,21265,21266,21268,21270,21272,21274,21276,21278,21280,21282,21284,21286,21289,21292,21295,21298,21301,21304],{"class":107,"line":1638},[105,21267,18511],{"class":1954},[105,21269,116],{"class":115},[105,21271,119],{"class":111},[105,21273,1390],{"class":5208},[105,21275,12427],{"class":115},[105,21277,119],{"class":111},[105,21279,2824],{"class":5208},[105,21281,12427],{"class":115},[105,21283,119],{"class":111},[105,21285,2840],{"class":5208},[105,21287,21288],{"class":115},") :",[105,21290,21291],{"class":1954},"m_A",[105,21293,21294],{"class":115},"(a), ",[105,21296,21297],{"class":1954},"m_B",[105,21299,21300],{"class":115},"(b), ",[105,21302,21303],{"class":1954},"m_C",[105,21305,21306],{"class":115},"(c) {}\n",[105,21308,21309,21311,21314],{"class":107,"line":1644},[105,21310,14901],{"class":111},[105,21312,21313],{"class":1954}," PrintPerson",[105,21315,10845],{"class":115},[105,21317,21318,21320,21322,21325,21327,21330,21332],{"class":107,"line":1665},[105,21319,9661],{"class":115},[105,21321,1160],{"class":111},[105,21323,21324],{"class":220}," \"mA:\"",[105,21326,1436],{"class":111},[105,21328,21329],{"class":115}," m_A ",[105,21331,1160],{"class":111},[105,21333,8832],{"class":115},[105,21335,21336,21338,21340,21343,21345,21348,21350],{"class":107,"line":1670},[105,21337,9661],{"class":115},[105,21339,1160],{"class":111},[105,21341,21342],{"class":220}," \"mB:\"",[105,21344,1436],{"class":111},[105,21346,21347],{"class":115}," m_B ",[105,21349,1160],{"class":111},[105,21351,8832],{"class":115},[105,21353,21354,21356,21358,21361,21363,21366,21368],{"class":107,"line":1684},[105,21355,9661],{"class":115},[105,21357,1160],{"class":111},[105,21359,21360],{"class":220}," \"mC:\"",[105,21362,1436],{"class":111},[105,21364,21365],{"class":115}," m_C ",[105,21367,1160],{"class":111},[105,21369,8832],{"class":115},[105,21371,21372],{"class":107,"line":1689},[105,21373,2178],{"class":115},[105,21375,21376],{"class":107,"line":1718},[105,21377,15214],{"class":111},[105,21379,21380,21382],{"class":107,"line":1723},[105,21381,1976],{"class":111},[105,21383,21384],{"class":115}," m_A;\n",[105,21386,21387,21389],{"class":107,"line":1740},[105,21388,1976],{"class":111},[105,21390,21391],{"class":115}," m_B;\n",[105,21393,21394,21396],{"class":107,"line":1745},[105,21395,1976],{"class":111},[105,21397,21398],{"class":115}," m_C;\n",[105,21400,21401],{"class":107,"line":1750},[105,21402,3986],{"class":115},[105,21404,21405],{"class":107,"line":1755},[105,21406,2391],{"emptyLinePlaceholder":32},[105,21408,21409,21411,21413],{"class":107,"line":1769},[105,21410,119],{"class":111},[105,21412,1964],{"class":1954},[105,21414,5970],{"class":115},[105,21416,21417],{"class":107,"line":1774},[105,21418,1537],{"class":115},[105,21420,21421],{"class":107,"line":2568},[105,21422,2391],{"emptyLinePlaceholder":32},[105,21424,21425,21427,21429,21431,21433,21435,21437,21439,21441],{"class":107,"line":2582},[105,21426,19423],{"class":115},[105,21428,14],{"class":1954},[105,21430,116],{"class":115},[105,21432,333],{"class":164},[105,21434,12427],{"class":115},[105,21436,193],{"class":164},[105,21438,12427],{"class":115},[105,21440,187],{"class":164},[105,21442,2710],{"class":115},[105,21444,21445,21447,21450],{"class":107,"line":2590},[105,21446,15858],{"class":115},[105,21448,21449],{"class":1954},"PrintPerson",[105,21451,5628],{"class":115},[105,21453,21454],{"class":107,"line":2595},[105,21455,2391],{"emptyLinePlaceholder":32},[105,21457,21458],{"class":107,"line":2601},[105,21459,2391],{"emptyLinePlaceholder":32},[105,21461,21462,21464,21466,21468],{"class":107,"line":2607},[105,21463,2294],{"class":1954},[105,21465,116],{"class":115},[105,21467,2299],{"class":220},[105,21469,2710],{"class":115},[105,21471,21472],{"class":107,"line":2612},[105,21473,2391],{"emptyLinePlaceholder":32},[105,21475,21476,21478,21480],{"class":107,"line":7940},[105,21477,4081],{"class":111},[105,21479,4084],{"class":164},[105,21481,1282],{"class":115},[105,21483,21484],{"class":107,"line":7964},[105,21485,1556],{"class":115},[14,21487,21488,21489,21492,21493],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[265,21490,21491],{},"参数名就是定义的对象属性","，",[265,21494,21495],{},"属性后面的值为有参构造函数的形参",[96,21497,21499],{"className":98,"code":21498,"language":100,"meta":22,"style":22},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[102,21500,21501],{"__ignoreMap":22},[105,21502,21503,21505,21507,21509,21512,21514,21517,21519,21522,21524,21527,21529,21532,21534],{"class":107,"line":108},[105,21504,19038],{"class":1954},[105,21506,116],{"class":115},[105,21508,119],{"class":111},[105,21510,21511],{"class":115}," a.",[105,21513,119],{"class":111},[105,21515,21516],{"class":115}," b,",[105,21518,119],{"class":111},[105,21520,21521],{"class":115}," b):",[105,21523,21291],{"class":1954},[105,21525,21526],{"class":115},"(a),",[105,21528,21297],{"class":1954},[105,21530,21531],{"class":115},"(c),",[105,21533,21303],{"class":1954},[105,21535,21536],{"class":115},"(b) {}\n",[76,21538,21540],{"id":21539},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21542,21543],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21545,14625],{},[96,21547,21549],{"className":98,"code":21548,"language":100,"meta":22,"style":22},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[102,21550,21551,21556,21561,21565,21570,21574],{"__ignoreMap":22},[105,21552,21553],{"class":107,"line":108},[105,21554,21555],{"class":115},"A{};\n",[105,21557,21558],{"class":107,"line":28},[105,21559,21560],{"class":115},"B\n",[105,21562,21563],{"class":107,"line":1171},[105,21564,1537],{"class":115},[105,21566,21567],{"class":107,"line":1186},[105,21568,21569],{"class":115},"    A a;\n",[105,21571,21572],{"class":107,"line":1192},[105,21573,1556],{"class":115},[105,21575,21576],{"class":107,"line":1206},[105,21577,21578],{"class":174},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21580,21581],{},"案例",[96,21583,21585],{"className":98,"code":21584,"language":100,"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",[102,21586,21587,21592,21599,21603,21608,21613,21627,21631,21641,21652,21656,21663,21667,21680,21684,21689,21694,21698,21704,21708,21712,21716,21747,21751,21762,21766,21772,21776,21789,21793,21797,21801,21806,21811,21815,21823,21827,21844,21863,21867,21875,21879,21885],{"__ignoreMap":22},[105,21588,21589],{"class":107,"line":108},[105,21590,21591],{"class":174},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[105,21593,21594,21596],{"class":107,"line":28},[105,21595,14686],{"class":111},[105,21597,21598],{"class":1954}," Phone\n",[105,21600,21601],{"class":107,"line":1171},[105,21602,1537],{"class":115},[105,21604,21605],{"class":107,"line":1186},[105,21606,21607],{"class":115},"public：\n",[105,21609,21610],{"class":107,"line":1192},[105,21611,21612],{"class":174},"    \u002F\u002F 赋值(构造函数)\n",[105,21614,21615,21618,21620,21622,21625],{"class":107,"line":1206},[105,21616,21617],{"class":1954},"    Phone",[105,21619,116],{"class":115},[105,21621,14909],{"class":1954},[105,21623,21624],{"class":5208}," pName",[105,21626,122],{"class":115},[105,21628,21629],{"class":107,"line":1212},[105,21630,2021],{"class":115},[105,21632,21633,21636,21638],{"class":107,"line":1303},[105,21634,21635],{"class":115},"        m_pName",[105,21637,161],{"class":111},[105,21639,21640],{"class":115},"pName;\n",[105,21642,21643,21645,21647,21650],{"class":107,"line":1309},[105,21644,3442],{"class":115},[105,21646,1160],{"class":111},[105,21648,21649],{"class":220},"\"Phone的构造函数调用\"",[105,21651,1282],{"class":115},[105,21653,21654],{"class":107,"line":1321},[105,21655,2178],{"class":115},[105,21657,21658,21661],{"class":107,"line":1603},[105,21659,21660],{"class":1954},"    ~Phone",[105,21662,1967],{"class":115},[105,21664,21665],{"class":107,"line":1608},[105,21666,2021],{"class":115},[105,21668,21669,21671,21673,21676,21678],{"class":107,"line":1614},[105,21670,3442],{"class":115},[105,21672,1160],{"class":111},[105,21674,21675],{"class":220},"\"Phone析构函数调用\"",[105,21677,1160],{"class":111},[105,21679,1183],{"class":115},[105,21681,21682],{"class":107,"line":1619},[105,21683,2178],{"class":115},[105,21685,21686],{"class":107,"line":1633},[105,21687,21688],{"class":174},"    \u002F\u002F\n",[105,21690,21691],{"class":107,"line":1638},[105,21692,21693],{"class":115},"    string m_PName;\n",[105,21695,21696],{"class":107,"line":1644},[105,21697,3986],{"class":115},[105,21699,21700,21702],{"class":107,"line":1665},[105,21701,14686],{"class":111},[105,21703,15163],{"class":1954},[105,21705,21706],{"class":107,"line":1670},[105,21707,1537],{"class":115},[105,21709,21710],{"class":107,"line":1684},[105,21711,14708],{"class":111},[105,21713,21714],{"class":107,"line":1689},[105,21715,16986],{"class":174},[105,21717,21718,21720,21722,21724,21726,21728,21730,21733,21736,21738,21741,21744],{"class":107,"line":1718},[105,21719,18511],{"class":1954},[105,21721,116],{"class":115},[105,21723,14909],{"class":1954},[105,21725,14912],{"class":5208},[105,21727,494],{"class":115},[105,21729,14909],{"class":1954},[105,21731,21732],{"class":5208}," pname",[105,21734,21735],{"class":115},"):",[105,21737,15002],{"class":1954},[105,21739,21740],{"class":115},"(name),m_phone.",[105,21742,21743],{"class":1954},"m_PName",[105,21745,21746],{"class":115},"(pname) \n",[105,21748,21749],{"class":107,"line":1723},[105,21750,2021],{"class":115},[105,21752,21753,21755,21757,21760],{"class":107,"line":1740},[105,21754,3442],{"class":115},[105,21756,1160],{"class":111},[105,21758,21759],{"class":220},"\"Person的构造函数调用\"",[105,21761,1282],{"class":115},[105,21763,21764],{"class":107,"line":1745},[105,21765,2178],{"class":115},[105,21767,21768,21770],{"class":107,"line":1750},[105,21769,18544],{"class":1954},[105,21771,1967],{"class":115},[105,21773,21774],{"class":107,"line":1755},[105,21775,2021],{"class":115},[105,21777,21778,21780,21782,21785,21787],{"class":107,"line":1769},[105,21779,3442],{"class":115},[105,21781,1160],{"class":111},[105,21783,21784],{"class":220},"\"Person析构函数调用\"",[105,21786,1160],{"class":111},[105,21788,1183],{"class":115},[105,21790,21791],{"class":107,"line":1774},[105,21792,2178],{"class":115},[105,21794,21795],{"class":107,"line":2568},[105,21796,7772],{"class":174},[105,21798,21799],{"class":107,"line":2582},[105,21800,14884],{"class":115},[105,21802,21803],{"class":107,"line":2590},[105,21804,21805],{"class":174},"    \u002F\u002F手机\n",[105,21807,21808],{"class":107,"line":2595},[105,21809,21810],{"class":115},"    Phone m_Phone;\n",[105,21812,21813],{"class":107,"line":2601},[105,21814,3986],{"class":115},[105,21816,21817,21819,21821],{"class":107,"line":2607},[105,21818,5356],{"class":111},[105,21820,5580],{"class":1954},[105,21822,1967],{"class":115},[105,21824,21825],{"class":107,"line":2612},[105,21826,1537],{"class":115},[105,21828,21829,21831,21833,21835,21837,21839,21842],{"class":107,"line":7940},[105,21830,19423],{"class":115},[105,21832,14],{"class":1954},[105,21834,116],{"class":115},[105,21836,7908],{"class":220},[105,21838,494],{"class":115},[105,21840,21841],{"class":220},"\"安卓\"",[105,21843,2710],{"class":115},[105,21845,21846,21848,21850,21853,21855,21858,21860],{"class":107,"line":7964},[105,21847,1542],{"class":115},[105,21849,1160],{"class":111},[105,21851,21852],{"class":115},"p.Name",[105,21854,1160],{"class":111},[105,21856,21857],{"class":220},"\"拿着：\"",[105,21859,1160],{"class":111},[105,21861,21862],{"class":115},"p.m_phone.m_PName;\n",[105,21864,21865],{"class":107,"line":7969},[105,21866,1556],{"class":115},[105,21868,21869,21871,21873],{"class":107,"line":7975},[105,21870,119],{"class":111},[105,21872,1964],{"class":1954},[105,21874,1967],{"class":115},[105,21876,21877],{"class":107,"line":8002},[105,21878,1537],{"class":115},[105,21880,21881,21883],{"class":107,"line":8007},[105,21882,5625],{"class":1954},[105,21884,5628],{"class":115},[105,21886,21887],{"class":107,"line":8013},[105,21888,1556],{"class":115},[14,21890,9017],{},[96,21892,21894],{"className":98,"code":21893,"language":100,"meta":22,"style":22},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[102,21895,21896,21901],{"__ignoreMap":22},[105,21897,21898],{"class":107,"line":108},[105,21899,21900],{"class":174},"    \u002F\u002F不需要写这个：\n",[105,21902,21903],{"class":107,"line":28},[105,21904,21905],{"class":174},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21907,21908],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[96,21910,21912],{"className":98,"code":21911,"language":100,"meta":22,"style":22},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[102,21913,21914],{"__ignoreMap":22},[105,21915,21916,21918,21921,21923,21926,21929],{"class":107,"line":108},[105,21917,19038],{"class":1954},[105,21919,21920],{"class":115},"(string name.string pname):",[105,21922,15002],{"class":1954},[105,21924,21925],{"class":115},"(name),",[105,21927,21928],{"class":1954},"m_phone",[105,21930,21931],{"class":115},"(pname) {}\n",[14,21933,21934,21935,161,21938],{},"采用的是隐式转换法，实际为如下：\n",[102,21936,21937],{},"m_phone(pname)",[102,21939,21940],{},"Phone m_phone=pname",[14,21942,21943,21946],{},[265,21944,21945],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,21948,21949],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[76,21951,21953],{"id":21952},"_828静态对象","8.2.8静态对象",[14,21955,21956],{},"静态对象在成员对象前static，称为静态对象",[14,21958,21959],{},"静态对象分为两类：",[59,21961,21962],{},[62,21963,21964],{},"静态成员变量",[1123,21966,21967,21970,21973],{},[62,21968,21969],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[62,21971,21972],{},"②在编译阶段分配内存",[62,21974,21975],{},"③类内声明，类外初始化",[59,21977,21978],{"start":28},[62,21979,21980],{},"静态成员函数",[1123,21982,21983,21986],{},[62,21984,21985],{},"①所有对象共享同一个函数",[62,21987,21988],{},"②静态成员函数只能访问静态成员变量",[21990,21991,21993],"h4",{"id":21992},"_8281静态成员变量","8.2.8.1静态成员变量",[96,21995,21997],{"className":98,"code":21996,"language":100,"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",[102,21998,21999,22005,22015,22021,22025,22029,22034,22039,22044,22052,22056,22060,22064,22072,22076,22080,22085,22098,22102,22110,22114,22120],{"__ignoreMap":22},[105,22000,22001,22003],{"class":107,"line":108},[105,22002,1940],{"class":111},[105,22004,1943],{"class":220},[105,22006,22007,22009,22011,22013],{"class":107,"line":28},[105,22008,1948],{"class":111},[105,22010,1951],{"class":111},[105,22012,1955],{"class":1954},[105,22014,1282],{"class":115},[105,22016,22017,22019],{"class":107,"line":1171},[105,22018,14686],{"class":111},[105,22020,15163],{"class":1954},[105,22022,22023],{"class":107,"line":1186},[105,22024,1537],{"class":115},[105,22026,22027],{"class":107,"line":1192},[105,22028,14708],{"class":111},[105,22030,22031],{"class":107,"line":1206},[105,22032,22033],{"class":174},"    \u002F\u002F非静态成员变量\n",[105,22035,22036],{"class":107,"line":1212},[105,22037,22038],{"class":174},"    \u002F\u002F int m_A;\n",[105,22040,22041],{"class":107,"line":1303},[105,22042,22043],{"class":174},"    \u002F\u002F定义静态成员变量\n",[105,22045,22046,22048,22050],{"class":107,"line":1309},[105,22047,11012],{"class":111},[105,22049,2373],{"class":111},[105,22051,21384],{"class":115},[105,22053,22054],{"class":107,"line":1321},[105,22055,2391],{"emptyLinePlaceholder":32},[105,22057,22058],{"class":107,"line":1603},[105,22059,2391],{"emptyLinePlaceholder":32},[105,22061,22062],{"class":107,"line":1608},[105,22063,3986],{"class":115},[105,22065,22066,22068,22070],{"class":107,"line":1614},[105,22067,5356],{"class":111},[105,22069,5580],{"class":1954},[105,22071,1967],{"class":115},[105,22073,22074],{"class":107,"line":1619},[105,22075,1537],{"class":115},[105,22077,22078],{"class":107,"line":1633},[105,22079,15305],{"class":115},[105,22081,22082],{"class":107,"line":1638},[105,22083,22084],{"class":174},"    \u002F\u002F输出类成员变量这块内存\n",[105,22086,22087,22089,22091,22094,22096],{"class":107,"line":1644},[105,22088,1542],{"class":115},[105,22090,1160],{"class":111},[105,22092,22093],{"class":115},"p.m_A",[105,22095,1160],{"class":111},[105,22097,1183],{"class":115},[105,22099,22100],{"class":107,"line":1665},[105,22101,1556],{"class":115},[105,22103,22104,22106,22108],{"class":107,"line":1670},[105,22105,119],{"class":111},[105,22107,1964],{"class":1954},[105,22109,1967],{"class":115},[105,22111,22112],{"class":107,"line":1684},[105,22113,1537],{"class":115},[105,22115,22116,22118],{"class":107,"line":1689},[105,22117,5625],{"class":1954},[105,22119,1967],{"class":115},[105,22121,22122],{"class":107,"line":1718},[105,22123,1556],{"class":115},[14,22125,22126],{},"此时输出是报错的：无法解析外部命令",[14,22128,22129],{},"解决这一问题：必须用到类内声明，类外初始化操作",[96,22131,22133],{"className":98,"code":22132,"language":100,"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",[102,22134,22135,22141,22151,22157,22161,22165,22170,22178,22182,22187,22202,22210,22214,22218,22223,22228,22240,22245,22256,22261,22266,22279,22283,22291,22295,22301],{"__ignoreMap":22},[105,22136,22137,22139],{"class":107,"line":108},[105,22138,1940],{"class":111},[105,22140,1943],{"class":220},[105,22142,22143,22145,22147,22149],{"class":107,"line":28},[105,22144,1948],{"class":111},[105,22146,1951],{"class":111},[105,22148,1955],{"class":1954},[105,22150,1282],{"class":115},[105,22152,22153,22155],{"class":107,"line":1171},[105,22154,14686],{"class":111},[105,22156,15163],{"class":1954},[105,22158,22159],{"class":107,"line":1186},[105,22160,1537],{"class":115},[105,22162,22163],{"class":107,"line":1192},[105,22164,14708],{"class":111},[105,22166,22167],{"class":107,"line":1206},[105,22168,22169],{"class":174},"    \u002F\u002F类内声明\n",[105,22171,22172,22174,22176],{"class":107,"line":1212},[105,22173,11012],{"class":111},[105,22175,2373],{"class":111},[105,22177,21384],{"class":115},[105,22179,22180],{"class":107,"line":1303},[105,22181,3986],{"class":115},[105,22183,22184],{"class":107,"line":1309},[105,22185,22186],{"class":174},"\u002F\u002F类外初始化\n",[105,22188,22189,22191,22193,22196,22198,22200],{"class":107,"line":1321},[105,22190,119],{"class":111},[105,22192,15561],{"class":1954},[105,22194,22195],{"class":115},"::m_A",[105,22197,161],{"class":111},[105,22199,562],{"class":164},[105,22201,1282],{"class":115},[105,22203,22204,22206,22208],{"class":107,"line":1603},[105,22205,5356],{"class":111},[105,22207,5580],{"class":1954},[105,22209,1967],{"class":115},[105,22211,22212],{"class":107,"line":1608},[105,22213,1537],{"class":115},[105,22215,22216],{"class":107,"line":1614},[105,22217,15305],{"class":115},[105,22219,22220],{"class":107,"line":1619},[105,22221,22222],{"class":174},"    \u002F\u002F访问变量的原内存空间\n",[105,22224,22225],{"class":107,"line":1633},[105,22226,22227],{"class":174},"    \u002F\u002F100\n",[105,22229,22230,22232,22234,22236,22238],{"class":107,"line":1638},[105,22231,1542],{"class":115},[105,22233,1160],{"class":111},[105,22235,22093],{"class":115},[105,22237,1160],{"class":111},[105,22239,1183],{"class":115},[105,22241,22242],{"class":107,"line":1644},[105,22243,22244],{"class":115},"    Person p2;\n",[105,22246,22247,22250,22252,22254],{"class":107,"line":1665},[105,22248,22249],{"class":115},"    p2.m_A",[105,22251,161],{"class":111},[105,22253,1713],{"class":164},[105,22255,1282],{"class":115},[105,22257,22258],{"class":107,"line":1670},[105,22259,22260],{"class":174},"    \u002F\u002F继续访问这片空间\n",[105,22262,22263],{"class":107,"line":1684},[105,22264,22265],{"class":174},"    \u002F\u002F200\n",[105,22267,22268,22270,22272,22275,22277],{"class":107,"line":1689},[105,22269,1542],{"class":115},[105,22271,1160],{"class":111},[105,22273,22274],{"class":115},"p2.m_A",[105,22276,1160],{"class":111},[105,22278,1183],{"class":115},[105,22280,22281],{"class":107,"line":1718},[105,22282,1556],{"class":115},[105,22284,22285,22287,22289],{"class":107,"line":1723},[105,22286,119],{"class":111},[105,22288,1964],{"class":1954},[105,22290,1967],{"class":115},[105,22292,22293],{"class":107,"line":1740},[105,22294,1537],{"class":115},[105,22296,22297,22299],{"class":107,"line":1745},[105,22298,5625],{"class":1954},[105,22300,5628],{"class":115},[105,22302,22303],{"class":107,"line":1750},[105,22304,1556],{"class":115},[14,22306,22307],{},[265,22308,22309],{},"静态变量的访问",[96,22311,22313],{"className":98,"code":22312,"language":100,"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",[102,22314,22315,22321,22331,22337,22341,22345,22349,22357,22361,22366,22374,22378,22382,22396,22411,22419,22423,22428,22433,22438,22443,22455,22460,22465,22479,22496,22500,22508,22512,22518],{"__ignoreMap":22},[105,22316,22317,22319],{"class":107,"line":108},[105,22318,1940],{"class":111},[105,22320,1943],{"class":220},[105,22322,22323,22325,22327,22329],{"class":107,"line":28},[105,22324,1948],{"class":111},[105,22326,1951],{"class":111},[105,22328,1955],{"class":1954},[105,22330,1282],{"class":115},[105,22332,22333,22335],{"class":107,"line":1171},[105,22334,14686],{"class":111},[105,22336,15163],{"class":1954},[105,22338,22339],{"class":107,"line":1186},[105,22340,1537],{"class":115},[105,22342,22343],{"class":107,"line":1192},[105,22344,14708],{"class":111},[105,22346,22347],{"class":107,"line":1206},[105,22348,22169],{"class":174},[105,22350,22351,22353,22355],{"class":107,"line":1212},[105,22352,11012],{"class":111},[105,22354,2373],{"class":111},[105,22356,21384],{"class":115},[105,22358,22359],{"class":107,"line":1303},[105,22360,15214],{"class":111},[105,22362,22363],{"class":107,"line":1309},[105,22364,22365],{"class":174},"    \u002F\u002F静态成员变量也是有访问权限的\n",[105,22367,22368,22370,22372],{"class":107,"line":1321},[105,22369,11012],{"class":111},[105,22371,2373],{"class":111},[105,22373,21391],{"class":115},[105,22375,22376],{"class":107,"line":1603},[105,22377,3986],{"class":115},[105,22379,22380],{"class":107,"line":1608},[105,22381,22186],{"class":174},[105,22383,22384,22386,22388,22390,22392,22394],{"class":107,"line":1614},[105,22385,119],{"class":111},[105,22387,15561],{"class":1954},[105,22389,22195],{"class":115},[105,22391,161],{"class":111},[105,22393,562],{"class":164},[105,22395,1282],{"class":115},[105,22397,22398,22400,22402,22405,22407,22409],{"class":107,"line":1619},[105,22399,119],{"class":111},[105,22401,15561],{"class":1954},[105,22403,22404],{"class":115},"::m_B",[105,22406,161],{"class":111},[105,22408,816],{"class":164},[105,22410,1282],{"class":115},[105,22412,22413,22415,22417],{"class":107,"line":1633},[105,22414,5356],{"class":111},[105,22416,5649],{"class":1954},[105,22418,1967],{"class":115},[105,22420,22421],{"class":107,"line":1638},[105,22422,1537],{"class":115},[105,22424,22425],{"class":107,"line":1644},[105,22426,22427],{"class":174},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[105,22429,22430],{"class":107,"line":1665},[105,22431,22432],{"class":174},"    \u002F\u002F静态成员变量有两种访问方式：\n",[105,22434,22435],{"class":107,"line":1670},[105,22436,22437],{"class":174},"    \u002F\u002F1.通过对象进行访问\n",[105,22439,22440],{"class":107,"line":1684},[105,22441,22442],{"class":115},"    Person p;  \n",[105,22444,22445,22447,22449,22451,22453],{"class":107,"line":1689},[105,22446,1542],{"class":115},[105,22448,1160],{"class":111},[105,22450,22093],{"class":115},[105,22452,1160],{"class":111},[105,22454,1183],{"class":115},[105,22456,22457],{"class":107,"line":1718},[105,22458,22459],{"class":174},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[105,22461,22462],{"class":107,"line":1723},[105,22463,22464],{"class":174},"    \u002F\u002F2.通过类名进行访问\n",[105,22466,22467,22469,22471,22473,22475,22477],{"class":107,"line":1740},[105,22468,1542],{"class":115},[105,22470,1160],{"class":111},[105,22472,19038],{"class":1954},[105,22474,22195],{"class":115},[105,22476,1160],{"class":111},[105,22478,1183],{"class":115},[105,22480,22481,22483,22485,22487,22489,22491,22493],{"class":107,"line":1745},[105,22482,1542],{"class":115},[105,22484,1160],{"class":111},[105,22486,19038],{"class":1954},[105,22488,22404],{"class":115},[105,22490,1160],{"class":111},[105,22492,1230],{"class":115},[105,22494,22495],{"class":174}," \u002F\u002F没有访问权限，报错\n",[105,22497,22498],{"class":107,"line":1750},[105,22499,1556],{"class":115},[105,22501,22502,22504,22506],{"class":107,"line":1755},[105,22503,119],{"class":111},[105,22505,1964],{"class":1954},[105,22507,1967],{"class":115},[105,22509,22510],{"class":107,"line":1769},[105,22511,1537],{"class":115},[105,22513,22514,22516],{"class":107,"line":1774},[105,22515,5694],{"class":1954},[105,22517,5628],{"class":115},[105,22519,22520],{"class":107,"line":2568},[105,22521,1556],{"class":115},[21990,22523,22525],{"id":22524},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22527,22528],{},"1.静态成员函数定义与访问",[96,22530,22532],{"className":98,"code":22531,"language":100,"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",[102,22533,22534,22540,22544,22548,22553,22564,22568,22582,22586,22590,22598,22602,22607,22612,22616,22624,22629,22639],{"__ignoreMap":22},[105,22535,22536,22538],{"class":107,"line":108},[105,22537,14686],{"class":111},[105,22539,15163],{"class":1954},[105,22541,22542],{"class":107,"line":28},[105,22543,1537],{"class":115},[105,22545,22546],{"class":107,"line":1171},[105,22547,14708],{"class":111},[105,22549,22550],{"class":107,"line":1186},[105,22551,22552],{"class":174},"    \u002F\u002F在公共权限下定义静态成员函数\n",[105,22554,22555,22557,22560,22562],{"class":107,"line":1192},[105,22556,11012],{"class":111},[105,22558,22559],{"class":111}," void",[105,22561,11377],{"class":1954},[105,22563,1967],{"class":115},[105,22565,22566],{"class":107,"line":1206},[105,22567,2021],{"class":115},[105,22569,22570,22573,22575,22578,22580],{"class":107,"line":1212},[105,22571,22572],{"class":115},"        coout",[105,22574,1160],{"class":111},[105,22576,22577],{"class":220},"\"静态成员函数的调用\"",[105,22579,1160],{"class":111},[105,22581,1183],{"class":115},[105,22583,22584],{"class":107,"line":1303},[105,22585,2178],{"class":115},[105,22587,22588],{"class":107,"line":1309},[105,22589,3986],{"class":115},[105,22591,22592,22594,22596],{"class":107,"line":1321},[105,22593,5356],{"class":111},[105,22595,5580],{"class":1954},[105,22597,1967],{"class":115},[105,22599,22600],{"class":107,"line":1603},[105,22601,1537],{"class":115},[105,22603,22604],{"class":107,"line":1608},[105,22605,22606],{"class":174},"    \u002F\u002F静态成员函数的调用方式:\n",[105,22608,22609],{"class":107,"line":1614},[105,22610,22611],{"class":174},"    \u002F\u002F1.通过对象访问\n",[105,22613,22614],{"class":107,"line":1619},[105,22615,15305],{"class":115},[105,22617,22618,22620,22622],{"class":107,"line":1633},[105,22619,15858],{"class":115},[105,22621,11543],{"class":1954},[105,22623,5628],{"class":115},[105,22625,22626],{"class":107,"line":1638},[105,22627,22628],{"class":174},"    \u002F\u002F2.通过类名访问\n",[105,22630,22631,22633,22635,22637],{"class":107,"line":1644},[105,22632,18511],{"class":1954},[105,22634,17724],{"class":115},[105,22636,11543],{"class":1954},[105,22638,5628],{"class":115},[105,22640,22641],{"class":107,"line":1665},[105,22642,1556],{"class":115},[59,22644,22645],{"start":28},[62,22646,22647],{},"静态成员函数只能访问静态成员变量",[96,22649,22651],{"className":98,"code":22650,"language":100,"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",[102,22652,22653,22659,22663,22667,22671,22681,22685,22699,22704,22716,22720,22731,22741,22745,22749,22753,22763,22767,22780,22784,22788,22792,22796,22810,22818,22822,22826,22830,22834,22842,22846,22856,22861,22865,22873,22877,22883],{"__ignoreMap":22},[105,22654,22655,22657],{"class":107,"line":108},[105,22656,14686],{"class":111},[105,22658,15163],{"class":1954},[105,22660,22661],{"class":107,"line":28},[105,22662,1537],{"class":115},[105,22664,22665],{"class":107,"line":1171},[105,22666,14708],{"class":111},[105,22668,22669],{"class":107,"line":1186},[105,22670,22552],{"class":174},[105,22672,22673,22675,22677,22679],{"class":107,"line":1192},[105,22674,11012],{"class":111},[105,22676,22559],{"class":111},[105,22678,11377],{"class":1954},[105,22680,1967],{"class":115},[105,22682,22683],{"class":107,"line":1206},[105,22684,2021],{"class":115},[105,22686,22687,22690,22692,22694,22696],{"class":107,"line":1212},[105,22688,22689],{"class":115},"        m_A",[105,22691,161],{"class":111},[105,22693,427],{"class":164},[105,22695,171],{"class":115},[105,22697,22698],{"class":174}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[105,22700,22701],{"class":107,"line":1303},[105,22702,22703],{"class":174},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[105,22705,22706,22708,22710,22712,22714],{"class":107,"line":1309},[105,22707,22572],{"class":115},[105,22709,1160],{"class":111},[105,22711,22577],{"class":220},[105,22713,1160],{"class":111},[105,22715,1183],{"class":115},[105,22717,22718],{"class":107,"line":1321},[105,22719,2178],{"class":115},[105,22721,22722,22724,22726,22728],{"class":107,"line":1603},[105,22723,11012],{"class":111},[105,22725,2373],{"class":111},[105,22727,15440],{"class":115},[105,22729,22730],{"class":174}," \u002F\u002F静态成员变量\n",[105,22732,22733,22735,22738],{"class":107,"line":1608},[105,22734,1976],{"class":111},[105,22736,22737],{"class":115}," m_B;",[105,22739,22740],{"class":174}," \u002F\u002F非静态成员变量\n",[105,22742,22743],{"class":107,"line":1614},[105,22744,2391],{"emptyLinePlaceholder":32},[105,22746,22747],{"class":107,"line":1619},[105,22748,15214],{"class":111},[105,22750,22751],{"class":107,"line":1633},[105,22752,22365],{"class":174},[105,22754,22755,22757,22759,22761],{"class":107,"line":1638},[105,22756,11012],{"class":111},[105,22758,22559],{"class":111},[105,22760,13610],{"class":1954},[105,22762,1967],{"class":115},[105,22764,22765],{"class":107,"line":1644},[105,22766,2021],{"class":115},[105,22768,22769,22771,22773,22776,22778],{"class":107,"line":1665},[105,22770,3442],{"class":115},[105,22772,1160],{"class":111},[105,22774,22775],{"class":220},"\"这是私有权限下的静态函数调用\"",[105,22777,1160],{"class":111},[105,22779,1183],{"class":115},[105,22781,22782],{"class":107,"line":1670},[105,22783,2178],{"class":115},[105,22785,22786],{"class":107,"line":1684},[105,22787,2391],{"emptyLinePlaceholder":32},[105,22789,22790],{"class":107,"line":1689},[105,22791,2391],{"emptyLinePlaceholder":32},[105,22793,22794],{"class":107,"line":1718},[105,22795,3986],{"class":115},[105,22797,22798,22800,22802,22804,22806,22808],{"class":107,"line":1723},[105,22799,119],{"class":111},[105,22801,15561],{"class":1954},[105,22803,22195],{"class":115},[105,22805,161],{"class":111},[105,22807,307],{"class":164},[105,22809,1282],{"class":115},[105,22811,22812,22814,22816],{"class":107,"line":1740},[105,22813,5356],{"class":111},[105,22815,5580],{"class":1954},[105,22817,1967],{"class":115},[105,22819,22820],{"class":107,"line":1745},[105,22821,1537],{"class":115},[105,22823,22824],{"class":107,"line":1750},[105,22825,22606],{"class":174},[105,22827,22828],{"class":107,"line":1755},[105,22829,22611],{"class":174},[105,22831,22832],{"class":107,"line":1769},[105,22833,15305],{"class":115},[105,22835,22836,22838,22840],{"class":107,"line":1774},[105,22837,15858],{"class":115},[105,22839,11543],{"class":1954},[105,22841,5628],{"class":115},[105,22843,22844],{"class":107,"line":2568},[105,22845,22628],{"class":174},[105,22847,22848,22850,22852,22854],{"class":107,"line":2582},[105,22849,18511],{"class":1954},[105,22851,17724],{"class":115},[105,22853,11543],{"class":1954},[105,22855,5628],{"class":115},[105,22857,22858],{"class":107,"line":2590},[105,22859,22860],{"class":174},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[105,22862,22863],{"class":107,"line":2595},[105,22864,1556],{"class":115},[105,22866,22867,22869,22871],{"class":107,"line":2601},[105,22868,119],{"class":111},[105,22870,1964],{"class":1954},[105,22872,1967],{"class":115},[105,22874,22875],{"class":107,"line":2607},[105,22876,1537],{"class":115},[105,22878,22879,22881],{"class":107,"line":2612},[105,22880,5625],{"class":1954},[105,22882,5628],{"class":115},[105,22884,22885],{"class":107,"line":7940},[105,22886,1556],{"class":115},[76,22888,22890],{"id":22889},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21990,22892,22894],{"id":22893},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22896,22897],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22899,22900],{},"只有非静态成员变量才属于类的对象上",[22902,22903,22905],"h5",{"id":22904},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[96,22907,22909],{"className":98,"code":22908,"language":100,"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",[102,22910,22911,22918,22928,22934,22938,22942,22946,22954,22958,22962,22985,22989,22997,23001,23007],{"__ignoreMap":22},[105,22912,22913,22915],{"class":107,"line":108},[105,22914,1940],{"class":111},[105,22916,22917],{"class":220},"\u003Ciostraem>\n",[105,22919,22920,22922,22924,22926],{"class":107,"line":28},[105,22921,1948],{"class":111},[105,22923,1951],{"class":111},[105,22925,1955],{"class":1954},[105,22927,1282],{"class":115},[105,22929,22930,22932],{"class":107,"line":1171},[105,22931,14686],{"class":111},[105,22933,15163],{"class":1954},[105,22935,22936],{"class":107,"line":1186},[105,22937,1537],{"class":115},[105,22939,22940],{"class":107,"line":1192},[105,22941,2391],{"emptyLinePlaceholder":32},[105,22943,22944],{"class":107,"line":1206},[105,22945,3986],{"class":115},[105,22947,22948,22950,22952],{"class":107,"line":1212},[105,22949,5356],{"class":111},[105,22951,5580],{"class":1954},[105,22953,1967],{"class":115},[105,22955,22956],{"class":107,"line":1303},[105,22957,1537],{"class":115},[105,22959,22960],{"class":107,"line":1309},[105,22961,15305],{"class":115},[105,22963,22964,22966,22968,22971,22973,22976,22978,22980,22982],{"class":107,"line":1321},[105,22965,1542],{"class":115},[105,22967,1160],{"class":111},[105,22969,22970],{"class":220},"\"size of p=\"",[105,22972,1160],{"class":111},[105,22974,22975],{"class":1954},"sizeoif",[105,22977,6531],{"class":115},[105,22979,1160],{"class":111},[105,22981,1230],{"class":115},[105,22983,22984],{"class":174}," \u002F\u002F查看这个空类的占用的内存空间\n",[105,22986,22987],{"class":107,"line":1603},[105,22988,1556],{"class":115},[105,22990,22991,22993,22995],{"class":107,"line":1608},[105,22992,119],{"class":111},[105,22994,1964],{"class":1954},[105,22996,1967],{"class":115},[105,22998,22999],{"class":107,"line":1614},[105,23000,1537],{"class":115},[105,23002,23003,23005],{"class":107,"line":1619},[105,23004,5625],{"class":1954},[105,23006,5628],{"class":115},[105,23008,23009],{"class":107,"line":1633},[105,23010,1556],{"class":115},[14,23012,23013],{},"输出结果为：size of p=1",[14,23015,23016],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23018,23019],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22902,23021,23023],{"id":23022},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[96,23025,23027],{"className":98,"code":23026,"language":100,"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",[102,23028,23029,23035,23045,23053,23057,23066,23070,23078,23082,23086,23105,23109,23113,23121,23125,23131],{"__ignoreMap":22},[105,23030,23031,23033],{"class":107,"line":108},[105,23032,1940],{"class":111},[105,23034,1943],{"class":220},[105,23036,23037,23039,23041,23043],{"class":107,"line":28},[105,23038,1948],{"class":111},[105,23040,1951],{"class":111},[105,23042,1955],{"class":1954},[105,23044,1282],{"class":115},[105,23046,23047,23049,23051],{"class":107,"line":1171},[105,23048,14686],{"class":111},[105,23050,15561],{"class":1954},[105,23052,2665],{"class":115},[105,23054,23055],{"class":107,"line":1186},[105,23056,1537],{"class":115},[105,23058,23059,23061,23063],{"class":107,"line":1192},[105,23060,1976],{"class":111},[105,23062,15440],{"class":115},[105,23064,23065],{"class":174},"\u002F\u002F非静态成员变量\n",[105,23067,23068],{"class":107,"line":1206},[105,23069,3986],{"class":115},[105,23071,23072,23074,23076],{"class":107,"line":1212},[105,23073,5356],{"class":111},[105,23075,5580],{"class":1954},[105,23077,1967],{"class":115},[105,23079,23080],{"class":107,"line":1303},[105,23081,1537],{"class":115},[105,23083,23084],{"class":107,"line":1309},[105,23085,15305],{"class":115},[105,23087,23088,23090,23092,23094,23096,23098,23100,23102],{"class":107,"line":1321},[105,23089,1542],{"class":115},[105,23091,1160],{"class":111},[105,23093,22970],{"class":220},[105,23095,1364],{"class":111},[105,23097,6531],{"class":115},[105,23099,1160],{"class":111},[105,23101,1230],{"class":115},[105,23103,23104],{"class":174}," \u002F\u002F查看不是空对象时占用多少内存\n",[105,23106,23107],{"class":107,"line":1603},[105,23108,2391],{"emptyLinePlaceholder":32},[105,23110,23111],{"class":107,"line":1608},[105,23112,1556],{"class":115},[105,23114,23115,23117,23119],{"class":107,"line":1614},[105,23116,119],{"class":111},[105,23118,1964],{"class":1954},[105,23120,1967],{"class":115},[105,23122,23123],{"class":107,"line":1619},[105,23124,1537],{"class":115},[105,23126,23127,23129],{"class":107,"line":1633},[105,23128,5625],{"class":1954},[105,23130,5628],{"class":115},[105,23132,23133],{"class":107,"line":1638},[105,23134,1556],{"class":115},[14,23136,23137],{},"输出结果：size of p=4",[14,23139,23140],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[59,23142,23143],{},[62,23144,23145],{},"如果加上非静态成员变量，Person类修改如下",[96,23147,23149],{"className":98,"code":23148,"language":100,"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",[102,23150,23151,23157,23161,23167,23175,23179,23184],{"__ignoreMap":22},[105,23152,23153,23155],{"class":107,"line":108},[105,23154,14686],{"class":111},[105,23156,15163],{"class":1954},[105,23158,23159],{"class":107,"line":28},[105,23160,1537],{"class":115},[105,23162,23163,23165],{"class":107,"line":1171},[105,23164,1976],{"class":111},[105,23166,21384],{"class":115},[105,23168,23169,23171,23173],{"class":107,"line":1186},[105,23170,11012],{"class":111},[105,23172,2373],{"class":111},[105,23174,21391],{"class":115},[105,23176,23177],{"class":107,"line":1192},[105,23178,3986],{"class":115},[105,23180,23181],{"class":107,"line":1206},[105,23182,23183],{"class":174},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[105,23185,23186,23188,23190,23192,23194,23196],{"class":107,"line":1212},[105,23187,119],{"class":111},[105,23189,15561],{"class":1954},[105,23191,22404],{"class":115},[105,23193,161],{"class":111},[105,23195,307],{"class":164},[105,23197,1282],{"class":115},[14,23199,23200],{},"输出结果：4",[14,23202,23203],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[59,23205,23206],{"start":28},[62,23207,23208],{},"加上非静态成员函数",[96,23210,23212],{"className":98,"code":23211,"language":100,"meta":22,"style":22},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[102,23213,23214,23221,23225,23231,23239,23243,23247,23251],{"__ignoreMap":22},[105,23215,23216,23218],{"class":107,"line":108},[105,23217,14686],{"class":111},[105,23219,23220],{"class":1954},"  Person\n",[105,23222,23223],{"class":107,"line":28},[105,23224,1537],{"class":115},[105,23226,23227,23229],{"class":107,"line":1171},[105,23228,1976],{"class":111},[105,23230,21384],{"class":115},[105,23232,23233,23235,23237],{"class":107,"line":1186},[105,23234,14901],{"class":111},[105,23236,11377],{"class":1954},[105,23238,1967],{"class":115},[105,23240,23241],{"class":107,"line":1192},[105,23242,2021],{"class":115},[105,23244,23245],{"class":107,"line":1206},[105,23246,2391],{"emptyLinePlaceholder":32},[105,23248,23249],{"class":107,"line":1212},[105,23250,2178],{"class":115},[105,23252,23253],{"class":107,"line":1303},[105,23254,3986],{"class":115},[14,23256,23257],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[59,23259,23260],{"start":1171},[62,23261,23262],{},"加上静态成员函数",[96,23264,23266],{"className":98,"code":23265,"language":100,"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",[102,23267,23268,23274,23278,23284,23292,23296,23300,23304,23315,23319,23323,23327],{"__ignoreMap":22},[105,23269,23270,23272],{"class":107,"line":108},[105,23271,14686],{"class":111},[105,23273,23220],{"class":1954},[105,23275,23276],{"class":107,"line":28},[105,23277,1537],{"class":115},[105,23279,23280,23282],{"class":107,"line":1171},[105,23281,1976],{"class":111},[105,23283,21384],{"class":115},[105,23285,23286,23288,23290],{"class":107,"line":1186},[105,23287,14901],{"class":111},[105,23289,11377],{"class":1954},[105,23291,1967],{"class":115},[105,23293,23294],{"class":107,"line":1192},[105,23295,2021],{"class":115},[105,23297,23298],{"class":107,"line":1206},[105,23299,2391],{"emptyLinePlaceholder":32},[105,23301,23302],{"class":107,"line":1212},[105,23303,2178],{"class":115},[105,23305,23306,23308,23310,23313],{"class":107,"line":1303},[105,23307,11012],{"class":111},[105,23309,22559],{"class":111},[105,23311,23312],{"class":1954}," func1",[105,23314,1967],{"class":115},[105,23316,23317],{"class":107,"line":1309},[105,23318,2021],{"class":115},[105,23320,23321],{"class":107,"line":1321},[105,23322,2391],{"emptyLinePlaceholder":32},[105,23324,23325],{"class":107,"line":1603},[105,23326,2178],{"class":115},[105,23328,23329],{"class":107,"line":1608},[105,23330,3986],{"class":115},[14,23332,23200],{},[14,23334,23335],{},"解释：静态成员函数也不属于类上",[5118,23337,7666],{},{"title":22,"searchDepth":28,"depth":28,"links":23339},[23340,23346],{"id":14637,"depth":28,"text":14638,"children":23341},[23342,23343,23344,23345],{"id":14641,"depth":1171,"text":14642},{"id":15366,"depth":1171,"text":15367},{"id":15538,"depth":1171,"text":15539},{"id":15997,"depth":1171,"text":15998},{"id":18369,"depth":28,"text":18370,"children":23347},[23348,23349,23350,23351,23352,23353,23354,23355,23356],{"id":18381,"depth":1171,"text":18382},{"id":18674,"depth":1171,"text":18675},{"id":19165,"depth":1171,"text":19166},{"id":20262,"depth":1171,"text":20263},{"id":20685,"depth":1171,"text":20686},{"id":21164,"depth":1171,"text":21165},{"id":21539,"depth":1171,"text":21540},{"id":21952,"depth":1171,"text":21953},{"id":22889,"depth":1171,"text":22890},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14602,"description":23357},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23364,"title":100,"body":23365,"description":23369,"extension":30,"meta":23370,"navigation":32,"path":23372,"seo":23373,"stem":23374,"__hash__":23375},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23366,"toc":23367},[],{"title":22,"searchDepth":28,"depth":28,"links":23368},[],null,{"category":23371},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":100,"description":23369},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23377,"title":23378,"body":23379,"description":22,"extension":30,"meta":23970,"navigation":32,"path":23971,"seo":23972,"stem":23973,"__hash__":23974},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23380,"toc":23952},[23381,23384,23388,23391,23394,23397,23415,23420,23423,23426,23429,23432,23437,23440,23445,23448,23451,23455,23458,23461,23467,23470,23488,23492,23496,23499,23504,23507,23511,23514,23527,23530,23534,23537,23540,23543,23568,23571,23580,23591,23606,23638,23642,23649,23657,23661,23664,23667,23672,23676,23679,23682,23687,23690,23694,23697,23700,23705,23708,23712,23717,23721,23788,23792,23795,23798,23801,23804,23807,23813,23834,23837,23851,23860,23864,23867,23870,23875,23878,23883,23888,23891,23894,23899,23904,23907,23912,23917,23920,23925,23930,23933,23936,23941,23944,23949],[10,23382,23378],{"id":23383},"_1强化学习基本认识",[47,23385,23387],{"id":23386},"_11什么是强化学习","1.1.什么是强化学习",[14,23389,23390],{},"强化学习有两部分组成：智能体和环境；",[14,23392,23393],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23395,23396],{},"强化学习与监督学习的区别:",[59,23398,23399,23402,23405,23408],{},[62,23400,23401],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[62,23403,23404],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[62,23406,23407],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[62,23409,23410,23411,23414],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[265,23412,23413],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23416,23417],{},[20,23418],{"alt":22,"src":23419},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23421,23422],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23424,23425],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23427,23428],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23430,23431],{},"获取奖励",[14,23433,23434],{},[20,23435],{"alt":22,"src":23436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[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-003.png",[14,23446,23447],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23449,23450],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[47,23452,23454],{"id":23453},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23456,23457],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23459,23460],{},"具身智能中的应用",[14,23462,23463,23466],{},[265,23464,23465],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23468,23469],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23471,23472,23473,23476,23477,23480,23481,23484,23485],{},"机器人是",[265,23474,23475],{},"躯体","，深度学习是",[265,23478,23479],{},"神经元****网络","，VLA是",[265,23482,23483],{},"通用的行为逻辑","，而强化学习是",[265,23486,23487],{},"教练",[47,23489,23491],{"id":23490},"_13序列决策","1.3.序列决策",[76,23493,23495],{"id":23494},"_131智能体与环境","1.3.1.智能体与环境",[14,23497,23498],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23500,23501],{},[20,23502],{"alt":22,"src":23503},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23505,23506],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[76,23508,23510],{"id":23509},"_132奖励","1.3.2.奖励",[14,23512,23513],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23515,23516,23517,23526],{},"取某个策略的表现如何。强化学习的目的就是",[265,23518,23519,23520,23525],{},"最大化",[265,23521,23522],{},[265,23523,23524],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23528,23529],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[76,23531,23533],{"id":23532},"_133序列决策","1.3.3.序列决策",[14,23535,23536],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23538,23539],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23541,23542],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23544,23545,23549,23550,23552,23553,23555,23556,23558,23559,13787,23562,13787,23565],{},[23546,23547,23548],"em",{},"Ht"," = ",[23546,23551,712],{},"1*, a",[23546,23554,333],{},", r",[23546,23557,333],{},", . . . ,* ",[23546,23560,23561],{},"ot",[23546,23563,23564],{},", at ,",[23546,23566,23567],{},"rt",[14,23569,23570],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23572,23573,23549,23576,1649,23578,545],{},[23546,23574,23575],{},"st",[23546,23577,168],{},[23546,23579,23548],{},[14,23581,23582,23583,23586,23587,23590],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[265,23584,23585],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[265,23588,23589],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23592,23593,23594,23597,23598,23601,23602,23605],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[265,23595,23596],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[265,23599,23600],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23546,23603,23604],{},"S, A, T, R, Ω, O, γ",")。",[14,23607,23608,23609,23611,23612,23614,23615,116,23617,23620,23621,23623,23624,116,23627,23630,23631,23633,23634,23637],{},"其中 ",[23546,23610,805],{}," 表示状态空间，为隐变量，",[23546,23613,348],{}," 为动作空间，",[23546,23616,830],{},[23546,23618,23619],{},"s ′ |s, a",") 为状态转移概率，",[23546,23622,780],{}," 为奖励函数，",[23546,23625,23626],{},"Ω",[23546,23628,23629],{},"o|s, a",") 为观测概率，",[23546,23632,706],{}," 为观测空间，",[23546,23635,23636],{},"γ"," 为折扣因子。",[47,23639,23641],{"id":23640},"_14动作空间","1.4.动作空间",[14,23643,23644,23645,23648],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[265,23646,23647],{},"动作空间"," ，动作空间分为:",[59,23650,23651,23654],{},[62,23652,23653],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[62,23655,23656],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[47,23658,23660],{"id":23659},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23662,23663],{},"由策略、价值函数、模型三部分组成",[14,23665,23666],{},"这三者组成马尔可夫决策过程",[14,23668,23669],{},[20,23670],{"alt":22,"src":23671},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[76,23673,23675],{"id":23674},"_151策略","1.5.1.策略",[14,23677,23678],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23680,23681],{},"策略可分为两种：",[14,23683,23684],{},[20,23685],{"alt":22,"src":23686},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23688,23689],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[76,23691,23693],{"id":23692},"_152价值函数","1.5.2.价值函数",[14,23695,23696],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23698,23699],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23701,23702],{},[20,23703],{"alt":22,"src":23704},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23706,23707],{},"进入某个状态采取的最优动作可以通过Q函数得到",[76,23709,23711],{"id":23710},"_153模型","1.5.3.模型",[14,23713,23714],{},[20,23715],{"alt":22,"src":23716},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[47,23718,23720],{"id":23719},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[253,23722,23723,23734],{},[256,23724,23725],{},[259,23726,23727,23731],{},[262,23728,23730],{"align":23729},"left","类型",[262,23732,23733],{"align":23729},"特点",[300,23735,23736,23746,23756,23766,23778],{},[259,23737,23738,23743],{},[305,23739,23740],{"align":23729},[265,23741,23742],{},"基于价值的智能体",[305,23744,23745],{"align":23729},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[259,23747,23748,23753],{},[305,23749,23750],{"align":23729},[265,23751,23752],{},"基于策略的智能体",[305,23754,23755],{"align":23729},"直接学习策略，没有学习价值函数",[259,23757,23758,23763],{},[305,23759,23760],{"align":23729},[265,23761,23762],{},"演员-评论员智能体",[305,23764,23765],{"align":23729},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[259,23767,23768,23773],{},[305,23769,23770],{"align":23729},[265,23771,23772],{},"有模型强化学习智能体",[305,23774,23775],{"align":23729},[20,23776],{"alt":22,"src":23777},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[259,23779,23780,23785],{},[305,23781,23782],{"align":23729},[265,23783,23784],{},"免模型强化学习智能体",[305,23786,23787],{"align":23729},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[47,23789,23791],{"id":23790},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23793,23794],{},"学习和规划是序列决策的两个基本问题",[14,23796,23797],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23799,23800],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23802,23803],{},"强化学习用到的库：Gym",[14,23805,23806],{},"Gym可以检验强化学习算法的优劣",[14,23808,23809,23812],{},[265,23810,23811],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[96,23814,23818],{"className":23815,"code":23816,"language":23817,"meta":22,"style":22},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[102,23819,23820],{"__ignoreMap":22},[105,23821,23822,23825,23828,23831],{"class":107,"line":108},[105,23823,23824],{"class":1954},"pip",[105,23826,23827],{"class":220}," install",[105,23829,23830],{"class":220}," gym==",[105,23832,23833],{"class":164},"0.25.2\n",[14,23835,23836],{},"显示图形界面需要",[96,23838,23840],{"className":23815,"code":23839,"language":23817,"meta":22,"style":22},"pip install pygame\n",[102,23841,23842],{"__ignoreMap":22},[105,23843,23844,23846,23848],{"class":107,"line":108},[105,23845,23824],{"class":1954},[105,23847,23827],{"class":220},[105,23849,23850],{"class":220}," pygame\n",[14,23852,23853,23854],{},"有关Gym库的相关文档介绍：",[354,23855,23859],{"href":23856,"rel":23857},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23858],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[47,23861,23863],{"id":23862},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23865,23866],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23868,23869],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23871,23872],{},[20,23873],{"alt":22,"src":23874},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23876,23877],{},"折扣率需要自己来设定",[14,23879,23880],{},[20,23881],{"alt":22,"src":23882},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[59,23884,23885],{},[62,23886,23887],{},"状态转移函数：",[14,23889,23890],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23892,23893],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23895,23896],{},[20,23897],{"alt":22,"src":23898},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[59,23900,23901],{"start":28},[62,23902,23903],{},"动作价值函数：",[14,23905,23906],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23908,23909],{},[20,23910],{"alt":22,"src":23911},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[59,23913,23914],{"start":1171},[62,23915,23916],{},"最优动作价值函数：",[14,23918,23919],{},"这个函数是对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,23921,23922],{},[20,23923],{"alt":22,"src":23924},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[59,23926,23927],{"start":1186},[62,23928,23929],{},"状态价值函数:",[14,23931,23932],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,23934,23935],{},"它衡量的是“一个具体动作”的长期价值",[14,23937,23938],{},[20,23939],{"alt":22,"src":23940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,23942,23943],{},"几个价值函数之间的比较：",[14,23945,23946],{},[20,23947],{"alt":22,"src":23948},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5118,23950,23951],{},"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":28,"depth":28,"links":23953},[23954,23955,23956,23961,23962,23967,23968,23969],{"id":23386,"depth":28,"text":23387},{"id":23453,"depth":28,"text":23454},{"id":23490,"depth":28,"text":23491,"children":23957},[23958,23959,23960],{"id":23494,"depth":1171,"text":23495},{"id":23509,"depth":1171,"text":23510},{"id":23532,"depth":1171,"text":23533},{"id":23640,"depth":28,"text":23641},{"id":23659,"depth":28,"text":23660,"children":23963},[23964,23965,23966],{"id":23674,"depth":1171,"text":23675},{"id":23692,"depth":1171,"text":23693},{"id":23710,"depth":1171,"text":23711},{"id":23719,"depth":28,"text":23720},{"id":23790,"depth":28,"text":23791},{"id":23862,"depth":28,"text":23863},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23378,"description":22},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":4,"title":5,"body":23976,"description":16,"extension":30,"meta":23990,"navigation":32,"path":33,"seo":23991,"stem":35,"__hash__":36},{"type":7,"value":23977,"toc":23988},[23978,23980,23982,23986],[10,23979,5],{"id":12},[14,23981,16],{},[14,23983,23984],{},[20,23985],{"alt":22,"src":23},[14,23987,26],{},{"title":22,"searchDepth":28,"depth":28,"links":23989},[],{},{"title":5,"description":16},{"id":23993,"title":23994,"body":23995,"description":22,"extension":30,"meta":24111,"navigation":32,"path":24112,"seo":24113,"stem":24114,"__hash__":24115},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":23996,"toc":24106},[23997,24000,24004,24007,24012,24017,24020,24025,24028,24033,24036,24040,24045,24048,24053,24058,24063,24066,24070,24075,24078,24083,24088,24093,24098,24101],[10,23998,23994],{"id":23999},"_3动作价值函数",[47,24001,24003],{"id":24002},"_31dqn","3.1.DQN",[14,24005,24006],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24008,24009],{},[20,24010],{"alt":22,"src":24011},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24013,24014],{},[20,24015],{"alt":22,"src":24016},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24018,24019],{},"DQN算法的描述：",[14,24021,24022],{},[20,24023],{"alt":22,"src":24024},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24026,24027],{},"这里的Dense指的是全连接层",[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-021.png",[14,24034,24035],{},"当前观测的状态为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算法",[47,24037,24039],{"id":24038},"_32dqn的举例","3.2.DQN的举例",[14,24041,24042],{},[20,24043],{"alt":22,"src":24044},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24046,24047],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24049,24050],{},[20,24051],{"alt":22,"src":24052},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24054,24055],{},[20,24056],{"alt":22,"src":24057},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24059,24060],{},[20,24061],{"alt":22,"src":24062},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24064,24065],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[47,24067,24069],{"id":24068},"_33td算法","3.3.TD算法",[14,24071,24072],{},[20,24073],{"alt":22,"src":24074},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24076,24077],{},"强化学习TD算法公式的粗略解释：",[14,24079,24080],{},[20,24081],{"alt":22,"src":24082},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24084,24085],{},[20,24086],{"alt":22,"src":24087},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24089,24090],{},[20,24091],{"alt":22,"src":24092},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24094,24095],{},[20,24096],{"alt":22,"src":24097},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24099,24100],{},"TD算法总结：",[14,24102,24103],{},[20,24104],{"alt":22,"src":24105},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":22,"searchDepth":28,"depth":28,"links":24107},[24108,24109,24110],{"id":24002,"depth":28,"text":24003},{"id":24038,"depth":28,"text":24039},{"id":24068,"depth":28,"text":24069},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":23994,"description":22},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24117,"title":24118,"body":24119,"description":22,"extension":30,"meta":24352,"navigation":32,"path":24353,"seo":24354,"stem":24355,"__hash__":24356},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24120,"toc":24348},[24121,24124,24128,24131,24134,24139,24144,24147,24152,24157,24160,24165,24168,24173,24176,24181,24184,24189,24192,24197,24202,24205,24210,24213,24216,24221,24224,24229,24234,24238,24241,24244,24249,24254,24257,24262,24267,24270,24275,24278,24281,24286,24289,24294,24297,24302,24307,24310,24315,24320,24323,24328,24331,24336,24339],[10,24122,24118],{"id":24123},"_4策略学习",[47,24125,24127],{"id":24126},"_41概念描述","4.1.概念描述",[14,24129,24130],{},"用神经网络（策略网络）近似策略函数",[14,24132,24133],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24135,24136],{},[20,24137],{"alt":22,"src":24138},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24140,24141],{},[20,24142],{"alt":22,"src":24143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24145,24146],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24148,24149],{},[20,24150],{"alt":22,"src":24151},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24153,24154],{},[20,24155],{"alt":22,"src":24156},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24158,24159],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24161,24162],{},[20,24163],{"alt":22,"src":24164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24166,24167],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[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-037.png",[14,24174,24175],{},"改进theta要用到策略梯度算法",[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-038.png",[14,24182,24183],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[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-039.png",[14,24190,24191],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是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-040.png",[14,24198,24199],{},[20,24200],{"alt":22,"src":24201},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24203,24204],{},"梯度公式总结：",[14,24206,24207],{},[20,24208],{"alt":22,"src":24209},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24211,24212],{},"两个公式的分别应用场景：",[14,24214,24215],{},"对于离散的动作：",[14,24217,24218],{},[20,24219],{"alt":22,"src":24220},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24222,24223],{},"对于连续的动作：",[14,24225,24226],{},[20,24227],{"alt":22,"src":24228},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24230,24231],{},[20,24232],{"alt":22,"src":24233},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[47,24235,24237],{"id":24236},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24239,24240],{},"使用蒙特卡洛来近似计算策略梯度",[14,24242,24243],{},"蒙特卡洛法的解释如下：",[14,24245,24246],{},[20,24247],{"alt":22,"src":24248},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24250,24251],{},[20,24252],{"alt":22,"src":24253},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24255,24256],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[59,24258,24259],{},[62,24260,24261],{},"方法一：reinforce算法",[14,24263,24264],{},[20,24265],{"alt":22,"src":24266},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24268,24269],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[59,24271,24272],{"start":28},[62,24273,24274],{},"方法二：actor-critic算法",[14,24276,24277],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24279,24280],{},"两个网络的构建：",[14,24282,24283],{},[20,24284],{"alt":22,"src":24285},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24287,24288],{},"actor网路：",[14,24290,24291],{},[20,24292],{"alt":22,"src":24293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24295,24296],{},"critic网络",[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-051.png",[59,24303,24304],{"start":1171},[62,24305,24306],{},"网络的训练",[14,24308,24309],{},"网络描述",[14,24311,24312],{},[20,24313],{"alt":22,"src":24314},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24316,24317],{},[20,24318],{"alt":22,"src":24319},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24321,24322],{},"TD算法更新梯度：",[14,24324,24325],{},[20,24326],{"alt":22,"src":24327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24329,24330],{},"策略网络更新梯度：",[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-055.png",[14,24337,24338],{},"训练整个流程的具体描述：",[14,24340,24341,24344,24345],{},[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-056.png","\n4.  算法步骤总结：\n",[20,24346],{"alt":22,"src":24347},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":22,"searchDepth":28,"depth":28,"links":24349},[24350,24351],{"id":24126,"depth":28,"text":24127},{"id":24236,"depth":28,"text":24237},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24118,"description":22},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24358,"title":24359,"body":24360,"description":24367,"extension":30,"meta":24417,"navigation":32,"path":24418,"seo":24419,"stem":24420,"__hash__":24421},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24361,"toc":24413},[24362,24365,24368,24372,24375,24380,24384,24387,24392,24395,24400,24405,24408],[10,24363,24359],{"id":24364},"_5alphago算法",[14,24366,24367],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[47,24369,24371],{"id":24370},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24373,24374],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24376,24377],{},[20,24378],{"alt":22,"src":24379},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[47,24381,24383],{"id":24382},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24385,24386],{},"采用强化学习的方式训练策略网络",[14,24388,24389],{},[20,24390],{"alt":22,"src":24391},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24393,24394],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24396,24397],{},[20,24398],{"alt":22,"src":24399},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24401,24402],{},[20,24403],{"alt":22,"src":24404},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24406,24407],{},"强化学习训练策略网络的总结：",[14,24409,24410],{},[20,24411],{"alt":22,"src":24412},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":22,"searchDepth":28,"depth":28,"links":24414},[24415,24416],{"id":24370,"depth":28,"text":24371},{"id":24382,"depth":28,"text":24383},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24359,"description":24367},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24423,"title":24424,"body":24425,"description":24432,"extension":30,"meta":24435,"navigation":32,"path":24436,"seo":24437,"stem":24438,"__hash__":24439},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24426,"toc":24433},[24427,24430],[10,24428,24424],{"id":24429},"_6价值网络",[14,24431,24432],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":22,"searchDepth":28,"depth":28,"links":24434},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24424,"description":24432},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24441,"title":24442,"body":24443,"description":24447,"extension":30,"meta":24448,"navigation":32,"path":24449,"seo":24450,"stem":24451,"__hash__":24452},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24444,"toc":24445},[],{"title":22,"searchDepth":28,"depth":28,"links":24446},[],"记录自己的强化学习笔记。",{"category":23371},"\u002Fwiki\u002F2025-12-04",{"title":24442,"description":24447},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24454,"title":24455,"body":24456,"description":23369,"extension":30,"meta":24495,"navigation":32,"path":24496,"seo":24497,"stem":24498,"__hash__":24499},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24457,"toc":24493},[24458,24461,24464,24470,24473,24479,24482,24487,24490],[10,24459,24455],{"id":24460},"_1-项目概览与官方资源",[14,24462,24463],{},"官方文档：",[14,24465,24466],{},[354,24467,24468],{"href":24468,"rel":24469},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23858],[14,24471,24472],{},"官方代码仓库：",[14,24474,24475],{},[354,24476,24477],{"href":24477,"rel":24478},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23858],[14,24480,24481],{},"复现大体流程：",[14,24483,24484],{},[20,24485],{"alt":22,"src":24486},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24488,24489],{},"本教程的目标是打通这条链路：",[14,24491,24492],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":22,"searchDepth":28,"depth":28,"links":24494},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24455,"description":23369},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24501,"title":24502,"body":24503,"description":23369,"extension":30,"meta":24619,"navigation":32,"path":24620,"seo":24621,"stem":24622,"__hash__":24623},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24504,"toc":24614},[24505,24508,24512,24515,24522,24526,24529,24538,24548,24552,24582,24585,24611],[10,24506,24502],{"id":24507},"_2-环境准备与设备连接",[47,24509,24511],{"id":24510},"_21-系统与环境","2.1 系统与环境",[14,24513,24514],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24516,24517,24518,24521],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[102,24519,24520],{},"lerobot"," 依赖。",[47,24523,24525],{"id":24524},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24527,24528],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[96,24530,24532],{"className":23815,"code":24531,"language":23817,"meta":22,"style":22},"lerobot-find-out\n",[102,24533,24534],{"__ignoreMap":22},[105,24535,24536],{"class":107,"line":108},[105,24537,24531],{"class":1954},[14,24539,24540,24541,328,24544,24547],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[102,24542,24543],{},"\u002Fdev\u002FttyACM0",[102,24545,24546],{},"\u002Fdev\u002FttyACM1","）。",[47,24549,24551],{"id":24550},"_23-串口授权","2.3 串口授权",[96,24553,24555],{"className":23815,"code":24554,"language":23817,"meta":22,"style":22},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[102,24556,24557,24571],{"__ignoreMap":22},[105,24558,24559,24562,24565,24568],{"class":107,"line":108},[105,24560,24561],{"class":1954},"sudo",[105,24563,24564],{"class":220}," chmod",[105,24566,24567],{"class":164}," 666",[105,24569,24570],{"class":220}," \u002Fdev\u002FttyACM0\n",[105,24572,24573,24575,24577,24579],{"class":107,"line":28},[105,24574,24561],{"class":1954},[105,24576,24564],{"class":220},[105,24578,24567],{"class":164},[105,24580,24581],{"class":220}," \u002Fdev\u002FttyACM1\n",[14,24583,24584],{},"说明：",[1123,24586,24587,24592,24598,24608],{},[62,24588,24589,24591],{},[102,24590,24561],{},"：以 root 权限执行命令。",[62,24593,24594,24597],{},[102,24595,24596],{},"chmod","：修改设备节点权限。",[62,24599,24600,24603,24604,24607],{},[102,24601,24602],{},"666","：",[102,24605,24606],{},"rw-rw-rw-","，所有用户可读写。",[62,24609,24610],{},"串口号必须替换为你机器上的真实端口。",[5118,24612,24613],{},"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":28,"depth":28,"links":24615},[24616,24617,24618],{"id":24510,"depth":28,"text":24511},{"id":24524,"depth":28,"text":24525},{"id":24550,"depth":28,"text":24551},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24502,"description":23369},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24625,"title":24626,"body":24627,"description":23369,"extension":30,"meta":24788,"navigation":32,"path":24789,"seo":24790,"stem":24791,"__hash__":24792},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24628,"toc":24784},[24629,24633,24637,24643,24646,24703,24706,24710,24713,24781],[10,24630,24632],{"id":24631},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[47,24634,24636],{"id":24635},"_31-配置电机-id","3.1 配置电机 ID",[14,24638,24639,24640,24642],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[102,24641,333],{},"，需要改成机械臂链路里不冲突的编号。",[14,24644,24645],{},"方式一：用 LeRobot 命令逐步写入。",[96,24647,24649],{"className":23815,"code":24648,"language":23817,"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",[102,24650,24651,24656,24664,24671,24676,24680,24685,24691,24698],{"__ignoreMap":22},[105,24652,24653],{"class":107,"line":108},[105,24654,24655],{"class":174},"# 主臂舵机配置 ID\n",[105,24657,24658,24661],{"class":107,"line":28},[105,24659,24660],{"class":1954},"lerobot-setup-motors",[105,24662,24663],{"class":164}," \\\n",[105,24665,24666,24669],{"class":107,"line":1171},[105,24667,24668],{"class":164},"  --teleop.type=so101_leader",[105,24670,24663],{"class":164},[105,24672,24673],{"class":107,"line":1186},[105,24674,24675],{"class":164},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[105,24677,24678],{"class":107,"line":1192},[105,24679,2391],{"emptyLinePlaceholder":32},[105,24681,24682],{"class":107,"line":1206},[105,24683,24684],{"class":174},"# 从臂舵机配置 ID\n",[105,24686,24687,24689],{"class":107,"line":1212},[105,24688,24660],{"class":1954},[105,24690,24663],{"class":164},[105,24692,24693,24696],{"class":107,"line":1303},[105,24694,24695],{"class":164},"  --robot.type=so101_follower",[105,24697,24663],{"class":164},[105,24699,24700],{"class":107,"line":1309},[105,24701,24702],{"class":164},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24704,24705],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[47,24707,24709],{"id":24708},"_32-机械臂校准","3.2 机械臂校准",[14,24711,24712],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[96,24714,24716],{"className":23815,"code":24715,"language":23817,"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",[102,24717,24718,24723,24730,24736,24743,24748,24752,24757,24763,24769,24776],{"__ignoreMap":22},[105,24719,24720],{"class":107,"line":108},[105,24721,24722],{"class":174},"# 主臂校准\n",[105,24724,24725,24728],{"class":107,"line":28},[105,24726,24727],{"class":1954},"lerobot-calibrate",[105,24729,24663],{"class":164},[105,24731,24732,24734],{"class":107,"line":1171},[105,24733,24668],{"class":164},[105,24735,24663],{"class":164},[105,24737,24738,24741],{"class":107,"line":1186},[105,24739,24740],{"class":164},"  --teleop.port=\u002Fdev\u002FttyACM0",[105,24742,24663],{"class":164},[105,24744,24745],{"class":107,"line":1192},[105,24746,24747],{"class":164},"  --teleop.id=my_awesome_leader_arm\n",[105,24749,24750],{"class":107,"line":1206},[105,24751,2391],{"emptyLinePlaceholder":32},[105,24753,24754],{"class":107,"line":1212},[105,24755,24756],{"class":174},"# 从臂校准\n",[105,24758,24759,24761],{"class":107,"line":1303},[105,24760,24727],{"class":1954},[105,24762,24663],{"class":164},[105,24764,24765,24767],{"class":107,"line":1309},[105,24766,24695],{"class":164},[105,24768,24663],{"class":164},[105,24770,24771,24774],{"class":107,"line":1321},[105,24772,24773],{"class":164},"  --robot.port=\u002Fdev\u002FttyACM1",[105,24775,24663],{"class":164},[105,24777,24778],{"class":107,"line":1603},[105,24779,24780],{"class":164},"  --robot.id=my_awesome_follower_arm\n",[5118,24782,24783],{},"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":28,"depth":28,"links":24785},[24786,24787],{"id":24635,"depth":28,"text":24636},{"id":24708,"depth":28,"text":24709},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24626,"description":23369},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24794,"title":24795,"body":24796,"description":23369,"extension":30,"meta":24987,"navigation":32,"path":24988,"seo":24989,"stem":24990,"__hash__":24991},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24797,"toc":24983},[24798,24801,24805,24852,24856,24869,24932,24935,24980],[10,24799,24795],{"id":24800},"_4-遥操与相机接入",[47,24802,24804],{"id":24803},"_41-不带相机遥操","4.1 不带相机遥操",[96,24806,24808],{"className":23815,"code":24807,"language":23817,"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",[102,24809,24810,24817,24823,24829,24836,24842,24848],{"__ignoreMap":22},[105,24811,24812,24815],{"class":107,"line":108},[105,24813,24814],{"class":1954},"lerobot-teleoperate",[105,24816,24663],{"class":164},[105,24818,24819,24821],{"class":107,"line":28},[105,24820,24695],{"class":164},[105,24822,24663],{"class":164},[105,24824,24825,24827],{"class":107,"line":1171},[105,24826,24773],{"class":164},[105,24828,24663],{"class":164},[105,24830,24831,24834],{"class":107,"line":1186},[105,24832,24833],{"class":164},"  --robot.id=my_awesome_follower_arm",[105,24835,24663],{"class":164},[105,24837,24838,24840],{"class":107,"line":1192},[105,24839,24668],{"class":164},[105,24841,24663],{"class":164},[105,24843,24844,24846],{"class":107,"line":1206},[105,24845,24740],{"class":164},[105,24847,24663],{"class":164},[105,24849,24850],{"class":107,"line":1212},[105,24851,24747],{"class":164},[47,24853,24855],{"id":24854},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[96,24857,24859],{"className":23815,"code":24858,"language":23817,"meta":22,"style":22},"lerobot-find-cameras opencv\n",[102,24860,24861],{"__ignoreMap":22},[105,24862,24863,24866],{"class":107,"line":108},[105,24864,24865],{"class":1954},"lerobot-find-cameras",[105,24867,24868],{"class":220}," opencv\n",[96,24870,24872],{"className":23815,"code":24871,"language":23817,"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",[102,24873,24874,24880,24886,24892,24898,24908,24914,24920,24927],{"__ignoreMap":22},[105,24875,24876,24878],{"class":107,"line":108},[105,24877,24814],{"class":1954},[105,24879,24663],{"class":164},[105,24881,24882,24884],{"class":107,"line":28},[105,24883,24695],{"class":164},[105,24885,24663],{"class":164},[105,24887,24888,24890],{"class":107,"line":1171},[105,24889,24773],{"class":164},[105,24891,24663],{"class":164},[105,24893,24894,24896],{"class":107,"line":1186},[105,24895,24833],{"class":164},[105,24897,24663],{"class":164},[105,24899,24900,24903,24906],{"class":107,"line":1192},[105,24901,24902],{"class":164},"  --robot.cameras=",[105,24904,24905],{"class":220},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[105,24907,24663],{"class":164},[105,24909,24910,24912],{"class":107,"line":1206},[105,24911,24668],{"class":164},[105,24913,24663],{"class":164},[105,24915,24916,24918],{"class":107,"line":1212},[105,24917,24740],{"class":164},[105,24919,24663],{"class":164},[105,24921,24922,24925],{"class":107,"line":1303},[105,24923,24924],{"class":164},"  --teleop.id=my_awesome_leader_arm",[105,24926,24663],{"class":164},[105,24928,24929],{"class":107,"line":1309},[105,24930,24931],{"class":164},"  --display_data=true\n",[14,24933,24934],{},"相机参数说明：",[1123,24936,24937,24943,24949,24958,24968,24974],{},[62,24938,24939,24942],{},[102,24940,24941],{},"front","：相机名称。",[62,24944,24945,24948],{},[102,24946,24947],{},"type: opencv","：相机驱动类型。",[62,24950,24951,24954,24955,24547],{},[102,24952,24953],{},"index_or_path","：设备编号或设备路径（如 ",[102,24956,24957],{},"\u002Fdev\u002Fvideo4",[62,24959,24960,24963,24964,24967],{},[102,24961,24962],{},"width"," \u002F ",[102,24965,24966],{},"height","：图像分辨率。",[62,24969,24970,24973],{},[102,24971,24972],{},"fps","：采样帧率。",[62,24975,24976,24979],{},[102,24977,24978],{},"--display_data=true","：启用实时可视化。",[5118,24981,24982],{},"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":28,"depth":28,"links":24984},[24985,24986],{"id":24803,"depth":28,"text":24804},{"id":24854,"depth":28,"text":24855},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24795,"description":23369},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":24993,"title":24994,"body":24995,"description":23369,"extension":30,"meta":25167,"navigation":32,"path":25168,"seo":25169,"stem":25170,"__hash__":25171},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":24996,"toc":25162},[24997,25001,25005,25010,25015,25018,25060,25066,25070,25119,25124,25128,25131,25139,25144,25149,25154,25159],[10,24998,25000],{"id":24999},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[47,25002,25004],{"id":25003},"_51-生成访问令牌","5.1 生成访问令牌",[14,25006,25007],{},[20,25008],{"alt":22,"src":25009},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25011,25012],{},[20,25013],{"alt":22,"src":25014},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25016,25017],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[96,25019,25021],{"className":23815,"code":25020,"language":23817,"meta":22,"style":22},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[102,25022,25023,25036],{"__ignoreMap":22},[105,25024,25025,25028,25031,25033],{"class":107,"line":108},[105,25026,25027],{"class":111},"export",[105,25029,25030],{"class":115}," HF_TOKEN",[105,25032,161],{"class":111},[105,25034,25035],{"class":220},"\"your_huggingface_token\"\n",[105,25037,25038,25041,25044,25047,25050,25052,25055,25057],{"class":107,"line":28},[105,25039,25040],{"class":1954},"hf",[105,25042,25043],{"class":220}," auth",[105,25045,25046],{"class":220}," login",[105,25048,25049],{"class":164}," --token",[105,25051,9716],{"class":220},[105,25053,25054],{"class":115},"$HF_TOKEN",[105,25056,367],{"class":220},[105,25058,25059],{"class":164}," --add-to-git-credential\n",[14,25061,25062,25065],{},[102,25063,25064],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[47,25067,25069],{"id":25068},"_52-验证登录","5.2 验证登录",[96,25071,25073],{"className":23815,"code":25072,"language":23817,"meta":22,"style":22},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[102,25074,25075,25106],{"__ignoreMap":22},[105,25076,25077,25080,25082,25085,25087,25089,25092,25095,25098,25101,25104],{"class":107,"line":108},[105,25078,25079],{"class":115},"HF_USER",[105,25081,161],{"class":111},[105,25083,25084],{"class":115},"$(",[105,25086,25040],{"class":1954},[105,25088,25043],{"class":220},[105,25090,25091],{"class":220}," whoami",[105,25093,25094],{"class":111}," |",[105,25096,25097],{"class":1954}," head",[105,25099,25100],{"class":164}," -n",[105,25102,25103],{"class":164}," 1",[105,25105,122],{"class":115},[105,25107,25108,25111,25113,25116],{"class":107,"line":28},[105,25109,25110],{"class":164},"echo",[105,25112,9716],{"class":220},[105,25114,25115],{"class":115},"$HF_USER",[105,25117,25118],{"class":220},"\"\n",[14,25120,25121],{},[20,25122],{"alt":22,"src":25123},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[47,25125,25127],{"id":25126},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25129,25130],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1123,25132,25133,25136],{},[62,25134,25135],{},"Dataset Repo（用于上传演示数据）",[62,25137,25138],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25140,25141],{},[20,25142],{"alt":22,"src":25143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25145,25146],{},[20,25147],{"alt":22,"src":25148},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25150,25151],{},[20,25152],{"alt":22,"src":25153},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25155,25156],{},[20,25157],{"alt":22,"src":25158},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5118,25160,25161],{},"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":28,"depth":28,"links":25163},[25164,25165,25166],{"id":25003,"depth":28,"text":25004},{"id":25068,"depth":28,"text":25069},{"id":25126,"depth":28,"text":25127},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":24994,"description":23369},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25173,"title":25174,"body":25175,"description":23369,"extension":30,"meta":25372,"navigation":32,"path":25373,"seo":25374,"stem":25375,"__hash__":25376},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25176,"toc":25367},[25177,25181,25185,25281,25289,25294,25298,25314,25317,25321,25364],[10,25178,25180],{"id":25179},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[47,25182,25184],{"id":25183},"_61-录制示教数据","6.1 录制示教数据",[96,25186,25188],{"className":23815,"code":25187,"language":23817,"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",[102,25189,25190,25197,25203,25209,25215,25224,25230,25236,25242,25249,25259,25266,25276],{"__ignoreMap":22},[105,25191,25192,25195],{"class":107,"line":108},[105,25193,25194],{"class":1954},"lerobot-record",[105,25196,24663],{"class":164},[105,25198,25199,25201],{"class":107,"line":28},[105,25200,24695],{"class":164},[105,25202,24663],{"class":164},[105,25204,25205,25207],{"class":107,"line":1171},[105,25206,24773],{"class":164},[105,25208,24663],{"class":164},[105,25210,25211,25213],{"class":107,"line":1186},[105,25212,24833],{"class":164},[105,25214,24663],{"class":164},[105,25216,25217,25219,25222],{"class":107,"line":1192},[105,25218,24902],{"class":164},[105,25220,25221],{"class":220},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[105,25223,24663],{"class":164},[105,25225,25226,25228],{"class":107,"line":1206},[105,25227,24668],{"class":164},[105,25229,24663],{"class":164},[105,25231,25232,25234],{"class":107,"line":1212},[105,25233,24740],{"class":164},[105,25235,24663],{"class":164},[105,25237,25238,25240],{"class":107,"line":1303},[105,25239,24924],{"class":164},[105,25241,24663],{"class":164},[105,25243,25244,25247],{"class":107,"line":1309},[105,25245,25246],{"class":164},"  --display_data=true",[105,25248,24663],{"class":164},[105,25250,25251,25254,25257],{"class":107,"line":1321},[105,25252,25253],{"class":164},"  --dataset.repo_id=",[105,25255,25256],{"class":220},"\"Embodied-AI-6\u002Fso101_test\"",[105,25258,24663],{"class":164},[105,25260,25261,25264],{"class":107,"line":1603},[105,25262,25263],{"class":164},"  --dataset.num_episodes=10",[105,25265,24663],{"class":164},[105,25267,25268,25271,25274],{"class":107,"line":1608},[105,25269,25270],{"class":164},"  --dataset.single_task=",[105,25272,25273],{"class":220},"\"Grab the green cube\"",[105,25275,24663],{"class":164},[105,25277,25278],{"class":107,"line":1614},[105,25279,25280],{"class":164},"  --resume=true\n",[1123,25282,25283],{},[62,25284,25285,25288],{},[102,25286,25287],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25290,25291],{},[20,25292],{"alt":22,"src":25293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[47,25295,25297],{"id":25296},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[96,25299,25301],{"className":23815,"code":25300,"language":23817,"meta":22,"style":22},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[102,25302,25303],{"__ignoreMap":22},[105,25304,25305,25308,25311],{"class":107,"line":108},[105,25306,25307],{"class":1954},"rm",[105,25309,25310],{"class":164}," -rf",[105,25312,25313],{"class":220}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25315,25316],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[47,25318,25320],{"id":25319},"_63-回放指定-episode","6.3 回放指定 episode",[96,25322,25324],{"className":23815,"code":25323,"language":23817,"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",[102,25325,25326,25333,25339,25345,25351,25359],{"__ignoreMap":22},[105,25327,25328,25331],{"class":107,"line":108},[105,25329,25330],{"class":1954},"lerobot-replay",[105,25332,24663],{"class":164},[105,25334,25335,25337],{"class":107,"line":28},[105,25336,24695],{"class":164},[105,25338,24663],{"class":164},[105,25340,25341,25343],{"class":107,"line":1171},[105,25342,24773],{"class":164},[105,25344,24663],{"class":164},[105,25346,25347,25349],{"class":107,"line":1186},[105,25348,24833],{"class":164},[105,25350,24663],{"class":164},[105,25352,25353,25355,25357],{"class":107,"line":1192},[105,25354,25253],{"class":164},[105,25356,25256],{"class":220},[105,25358,24663],{"class":164},[105,25360,25361],{"class":107,"line":1206},[105,25362,25363],{"class":164},"  --dataset.episode=0\n",[5118,25365,25366],{},"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":28,"depth":28,"links":25368},[25369,25370,25371],{"id":25183,"depth":28,"text":25184},{"id":25296,"depth":28,"text":25297},{"id":25319,"depth":28,"text":25320},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25174,"description":23369},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25378,"title":25379,"body":25380,"description":23369,"extension":30,"meta":25508,"navigation":32,"path":25509,"seo":25510,"stem":25511,"__hash__":25512},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25381,"toc":25506},[25382,25386,25449,25452,25499,25504],[10,25383,25385],{"id":25384},"_7-act-模型训练","7. ACT 模型训练",[96,25387,25389],{"className":23815,"code":25388,"language":23817,"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",[102,25390,25391,25398,25406,25413,25420,25427,25434,25441],{"__ignoreMap":22},[105,25392,25393,25396],{"class":107,"line":108},[105,25394,25395],{"class":1954},"lerobot-train",[105,25397,24663],{"class":164},[105,25399,25400,25402,25404],{"class":107,"line":28},[105,25401,25253],{"class":164},[105,25403,25256],{"class":220},[105,25405,24663],{"class":164},[105,25407,25408,25411],{"class":107,"line":1171},[105,25409,25410],{"class":164},"  --policy.type=act",[105,25412,24663],{"class":164},[105,25414,25415,25418],{"class":107,"line":1186},[105,25416,25417],{"class":164},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[105,25419,24663],{"class":164},[105,25421,25422,25425],{"class":107,"line":1192},[105,25423,25424],{"class":164},"  --job_name=act_so101_test",[105,25426,24663],{"class":164},[105,25428,25429,25432],{"class":107,"line":1206},[105,25430,25431],{"class":164},"  --policy.device=cuda",[105,25433,24663],{"class":164},[105,25435,25436,25439],{"class":107,"line":1212},[105,25437,25438],{"class":164},"  --wandb.enable=false",[105,25440,24663],{"class":164},[105,25442,25443,25446],{"class":107,"line":1303},[105,25444,25445],{"class":164},"  --policy.repo_id=",[105,25447,25448],{"class":220},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25450,25451],{},"参数说明：",[1123,25453,25454,25460,25466,25472,25478,25487,25493],{},[62,25455,25456,25459],{},[102,25457,25458],{},"--dataset.repo_id","：训练数据集仓库。",[62,25461,25462,25465],{},[102,25463,25464],{},"--policy.type=act","：策略模型类型为 ACT。",[62,25467,25468,25471],{},[102,25469,25470],{},"--output_dir","：本地训练输出目录。",[62,25473,25474,25477],{},[102,25475,25476],{},"--job_name","：训练任务名称。",[62,25479,25480,25483,25484,24547],{},[102,25481,25482],{},"--policy.device","：训练设备（如 ",[102,25485,25486],{},"cuda",[62,25488,25489,25492],{},[102,25490,25491],{},"--wandb.enable","：是否启用 WandB 可视化。",[62,25494,25495,25498],{},[102,25496,25497],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25500,25501],{},[20,25502],{"alt":22,"src":25503},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5118,25505,25366],{},{"title":22,"searchDepth":28,"depth":28,"links":25507},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25379,"description":23369},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25514,"title":25515,"body":25516,"description":23369,"extension":30,"meta":25603,"navigation":32,"path":25604,"seo":25605,"stem":25606,"__hash__":25607},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25517,"toc":25601},[25518,25521,25524,25591,25599],[10,25519,25515],{"id":25520},"_8-策略部署与自动采集",[14,25522,25523],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[96,25525,25527],{"className":23815,"code":25526,"language":23817,"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",[102,25528,25529,25535,25541,25547,25555,25561,25568,25576,25584],{"__ignoreMap":22},[105,25530,25531,25533],{"class":107,"line":108},[105,25532,25194],{"class":1954},[105,25534,24663],{"class":164},[105,25536,25537,25539],{"class":107,"line":28},[105,25538,24695],{"class":164},[105,25540,24663],{"class":164},[105,25542,25543,25545],{"class":107,"line":1171},[105,25544,24773],{"class":164},[105,25546,24663],{"class":164},[105,25548,25549,25551,25553],{"class":107,"line":1186},[105,25550,24902],{"class":164},[105,25552,25221],{"class":220},[105,25554,24663],{"class":164},[105,25556,25557,25559],{"class":107,"line":1192},[105,25558,24833],{"class":164},[105,25560,24663],{"class":164},[105,25562,25563,25566],{"class":107,"line":1206},[105,25564,25565],{"class":164},"  --display_data=false",[105,25567,24663],{"class":164},[105,25569,25570,25572,25574],{"class":107,"line":1212},[105,25571,25253],{"class":164},[105,25573,25256],{"class":220},[105,25575,24663],{"class":164},[105,25577,25578,25580,25582],{"class":107,"line":1303},[105,25579,25270],{"class":164},[105,25581,25273],{"class":220},[105,25583,24663],{"class":164},[105,25585,25586,25589],{"class":107,"line":1309},[105,25587,25588],{"class":164},"  --policy.path=",[105,25590,25448],{"class":220},[1123,25592,25593],{},[62,25594,25595,25598],{},[102,25596,25597],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5118,25600,25366],{},{"title":22,"searchDepth":28,"depth":28,"links":25602},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25515,"description":23369},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25609,"title":25610,"body":25611,"description":23369,"extension":30,"meta":25640,"navigation":32,"path":25641,"seo":25642,"stem":25643,"__hash__":25644},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25612,"toc":25638},[25613,25617,25620,25626,25629,25635],[10,25614,25616],{"id":25615},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25618,25619],{},"项目地址：",[14,25621,25622],{},[354,25623,25624],{"href":25624,"rel":25625},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23858],[14,25627,25628],{},"参考教程：",[14,25630,25631],{},[354,25632,25633],{"href":25633,"rel":25634},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23858],[14,25636,25637],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":22,"searchDepth":28,"depth":28,"links":25639},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25610,"description":23369},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25646,"title":25647,"body":25648,"description":25652,"extension":30,"meta":25653,"navigation":32,"path":25654,"seo":25655,"stem":25656,"__hash__":25657},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25649,"toc":25650},[],{"title":22,"searchDepth":28,"depth":28,"links":25651},[],"act复现",{"category":23371},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25647,"description":25652},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25659,"title":25660,"body":25661,"description":22,"extension":30,"meta":25963,"navigation":32,"path":25964,"seo":25965,"stem":25966,"__hash__":25967},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25662,"toc":25955},[25663,25666,25670,25680,25687,25694,25697,25704,25707,25710,25714,25726,25730,25776,25779,25782,25785,25788,25791,25795,25833,25839,25843,25897,25902,25905,25908,25913,25916,25921,25924,25927,25931,25934,25937,25941],[10,25664,25660],{"id":25665},"_1简介",[76,25667,25669],{"id":25668},"_11什么是-docker","1.1什么是 Docker？",[14,25671,25672,25673,25676,25677],{},"Docker 是一个开源的 ",[265,25674,25675],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[265,25678,25679],{},"一次构建，到处运行。",[14,25681,25682,25683,25686],{},"“ ",[265,25684,25685],{},"一次构建，到处运行"," ”也就是说：",[59,25688,25689],{},[62,25690,25691],{},[265,25692,25693],{},"之前：",[14,25695,25696],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[59,25698,25699],{},[62,25700,25701],{},[265,25702,25703],{},"使用docker后：",[14,25705,25706],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25708,25709],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[76,25711,25713],{"id":25712},"_12它是怎么工作的","1.2.它是怎么工作的？",[1123,25715,25716,25719],{},[62,25717,25718],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[62,25720,25721,25722,25725],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[265,25723,25724],{},"无论在哪运行都一样稳定"," 。",[76,25727,25729],{"id":25728},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[253,25731,25732,25742],{},[256,25733,25734],{},[259,25735,25736,25739],{},[262,25737,25738],{"align":23729},"概念",[262,25740,25741],{"align":23729},"解释",[300,25743,25744,25752,25760,25768],{},[259,25745,25746,25749],{},[305,25747,25748],{"align":23729},"镜像",[305,25750,25751],{"align":23729},"Image，运行容器的模板，像是一个应用快照",[259,25753,25754,25757],{},[305,25755,25756],{"align":23729},"容器",[305,25758,25759],{"align":23729},"Container，运行中的镜像实例，有自己的文件系统、网络等",[259,25761,25762,25765],{},[305,25763,25764],{"align":23729},"Dockerfile",[305,25766,25767],{"align":23729},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[259,25769,25770,25773],{},[305,25771,25772],{"align":23729},"仓库",[305,25774,25775],{"align":23729},"Registry，存放镜像的地方，比如 Docker Hub",[14,25777,25778],{},"抽象化理解:",[14,25780,25781],{},"Docker镜像≈C++类",[14,25783,25784],{},"Docker容器≈C++类实例(即对象)",[14,25786,25787],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25789,25790],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[76,25792,25794],{"id":25793},"_14类比理解","1.4.类比理解",[253,25796,25797,25807],{},[256,25798,25799],{},[259,25800,25801,25804],{},[262,25802,25803],{"align":23729},"传统部署",[262,25805,25806],{"align":23729},"Docker部署",[300,25808,25809,25817,25825],{},[259,25810,25811,25814],{},[305,25812,25813],{"align":23729},"手动安装依赖、调试版本不一致问题",[305,25815,25816],{"align":23729},"一次打包环境和代码",[259,25818,25819,25822],{},[305,25820,25821],{"align":23729},"程序“裸奔”跑在系统上",[305,25823,25824],{"align":23729},"程序“穿着容器”隔离运行",[259,25826,25827,25830],{},[305,25828,25829],{"align":23729},"容易“在我电脑上能跑”",[305,25831,25832],{"align":23729},"保证“无论在哪都能跑”",[14,25834,25835,25836],{},"就像快递包裹： ",[265,25837,25838],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[76,25840,25842],{"id":25841},"_15docker-的核心优势","1.5.Docker 的核心优势",[253,25844,25845,25855],{},[256,25846,25847],{},[259,25848,25849,25852],{},[262,25850,25851],{"align":23729},"优势",[262,25853,25854],{"align":23729},"说明",[300,25856,25857,25865,25873,25881,25889],{},[259,25858,25859,25862],{},[305,25860,25861],{"align":23729},"轻量级",[305,25863,25864],{"align":23729},"基于系统内核共享，启动速度快，占资源少",[259,25866,25867,25870],{},[305,25868,25869],{"align":23729},"跨平台",[305,25871,25872],{"align":23729},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[259,25874,25875,25878],{},[305,25876,25877],{"align":23729},"易于迁移部署",[305,25879,25880],{"align":23729},"应用和环境一起封装，不怕依赖不一致",[259,25882,25883,25886],{},[305,25884,25885],{"align":23729},"易于版本控制",[305,25887,25888],{"align":23729},"镜像版本可控，支持回滚",[259,25890,25891,25894],{},[305,25892,25893],{"align":23729},"生态丰富",[305,25895,25896],{"align":23729},"Docker Hub 上有成千上万的现成镜像可用",[59,25898,25899],{},[62,25900,25901],{},"在Linux上可以几乎实现无性能损失。",[14,25903,25904],{},"docker里的发行版和本机共用Linux内核。",[14,25906,25907],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[59,25909,25910],{},[62,25911,25912],{},"可以快速部署在绝大多数Linux发行版",[14,25914,25915],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[59,25917,25918],{},[62,25919,25920],{},"配置环境简单",[14,25922,25923],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,25925,25926],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[59,25928,25929],{},[62,25930,25893],{},[14,25932,25933],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,25935,25936],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[76,25938,25940],{"id":25939},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1123,25942,25943,25946,25949,25952],{},[62,25944,25945],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[62,25947,25948],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[62,25950,25951],{},"微服务架构：每个服务一个容器，灵活组合",[62,25953,25954],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":22,"searchDepth":28,"depth":28,"links":25956},[25957,25958,25959,25960,25961,25962],{"id":25668,"depth":1171,"text":25669},{"id":25712,"depth":1171,"text":25713},{"id":25728,"depth":1171,"text":25729},{"id":25793,"depth":1171,"text":25794},{"id":25841,"depth":1171,"text":25842},{"id":25939,"depth":1171,"text":25940},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25660,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25969,"title":25970,"body":25971,"description":22,"extension":30,"meta":26704,"navigation":32,"path":26705,"seo":26706,"stem":26707,"__hash__":26708},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25972,"toc":26699},[25973,25976,25980,25983,25986,25992,25998,26002,26011,26014,26071,26074,26125,26128,26211,26214,26251,26255,26266,26279,26286,26289,26369,26372,26422,26425,26448,26452,26459,26462,26478,26484,26487,26503,26509,26512,26528,26542,26548,26568,26574,26577,26589,26595,26598,26612,26618,26621,26641,26646,26649,26652,26656,26659,26662,26665,26672,26675,26678,26681,26686,26691,26696],[10,25974,25970],{"id":25975},"_2安装docker",[76,25977,25979],{"id":25978},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,25981,25982],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,25984,25985],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,25987,25988],{},[354,25989,25990],{"href":25990,"rel":25991},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23858],[14,25993,25994],{},[354,25995,25996],{"href":25996,"rel":25997},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23858],[21990,25999,26001],{"id":26000},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26003,26004,26005,26010],{},"以下内容根据 ",[354,26006,26009],{"href":26007,"rel":26008},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23858],"官方文档"," 修改而来。",[14,26012,26013],{},"如果你过去安装过 docker，先删掉：",[96,26015,26017],{"className":23815,"code":26016,"language":23817,"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",[102,26018,26019],{"__ignoreMap":22},[105,26020,26021,26023,26026,26029,26032,26035,26038,26041,26044,26047,26050,26053,26056,26059,26062,26065,26068],{"class":107,"line":108},[105,26022,3016],{"class":111},[105,26024,26025],{"class":115}," pkg ",[105,26027,26028],{"class":111},"in",[105,26030,26031],{"class":220}," docker.io",[105,26033,26034],{"class":220}," docker-doc",[105,26036,26037],{"class":220}," docker-compose",[105,26039,26040],{"class":220}," docker-compose-v2",[105,26042,26043],{"class":220}," podman-docker",[105,26045,26046],{"class":220}," containerd",[105,26048,26049],{"class":220}," runc",[105,26051,26052],{"class":115},"; ",[105,26054,26055],{"class":111},"do",[105,26057,26058],{"class":1954}," sudo",[105,26060,26061],{"class":220}," apt-get",[105,26063,26064],{"class":220}," remove",[105,26066,26067],{"class":115}," $pkg; ",[105,26069,26070],{"class":111},"done\n",[14,26072,26073],{},"首先安装依赖和GPG：",[96,26075,26079],{"className":26076,"code":26077,"language":26078,"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",[102,26080,26081,26086,26091,26096,26101,26106,26111,26115,26120],{"__ignoreMap":22},[105,26082,26083],{"class":107,"line":108},[105,26084,26085],{},"# Add Docker's official GPG key:\n",[105,26087,26088],{"class":107,"line":28},[105,26089,26090],{},"sudo apt-get update\n",[105,26092,26093],{"class":107,"line":1171},[105,26094,26095],{},"sudo apt-get install ca-certificates curl\n",[105,26097,26098],{"class":107,"line":1186},[105,26099,26100],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[105,26102,26103],{"class":107,"line":1192},[105,26104,26105],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[105,26107,26108],{"class":107,"line":1206},[105,26109,26110],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[105,26112,26113],{"class":107,"line":1212},[105,26114,2391],{"emptyLinePlaceholder":32},[105,26116,26117],{"class":107,"line":1303},[105,26118,26119],{},"# 如果上面这行报错就弄下面这行\n",[105,26121,26122],{"class":107,"line":1309},[105,26123,26124],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26126,26127],{},"信任 Docker 的 GPG 公钥并添加仓库：",[96,26129,26131],{"className":23815,"code":26130,"language":23817,"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",[102,26132,26133,26138,26144,26161,26194],{"__ignoreMap":22},[105,26134,26135],{"class":107,"line":108},[105,26136,26137],{"class":174},"# Add the repository to Apt sources:\n",[105,26139,26140,26142],{"class":107,"line":28},[105,26141,25110],{"class":164},[105,26143,24663],{"class":164},[105,26145,26146,26149,26152,26155,26158],{"class":107,"line":1171},[105,26147,26148],{"class":220},"  \"deb [arch=$(",[105,26150,26151],{"class":1954},"dpkg",[105,26153,26154],{"class":164}," --print-architecture",[105,26156,26157],{"class":220},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[105,26159,26160],{"class":164},"\\\n",[105,26162,26163,26166,26168,26170,26173,26176,26178,26180,26183,26185,26187,26190,26192],{"class":107,"line":1186},[105,26164,26165],{"class":220},"  \"",[105,26167,25084],{"class":115},[105,26169,674],{"class":164},[105,26171,26172],{"class":220}," \u002Fetc\u002Fos-release",[105,26174,26175],{"class":115}," && ",[105,26177,25110],{"class":164},[105,26179,9716],{"class":220},[105,26181,26182],{"class":115},"$VERSION_CODENAME",[105,26184,367],{"class":220},[105,26186,545],{"class":115},[105,26188,26189],{"class":220},"\" stable\"",[105,26191,25094],{"class":111},[105,26193,24663],{"class":164},[105,26195,26196,26199,26202,26205,26208],{"class":107,"line":1192},[105,26197,26198],{"class":1954},"  sudo",[105,26200,26201],{"class":220}," tee",[105,26203,26204],{"class":220}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[105,26206,26207],{"class":111}," >",[105,26209,26210],{"class":220}," \u002Fdev\u002Fnull\n",[14,26212,26213],{},"最后安装",[96,26215,26217],{"className":23815,"code":26216,"language":23817,"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",[102,26218,26219,26228],{"__ignoreMap":22},[105,26220,26221,26223,26225],{"class":107,"line":108},[105,26222,24561],{"class":1954},[105,26224,26061],{"class":220},[105,26226,26227],{"class":220}," update\n",[105,26229,26230,26232,26234,26236,26239,26242,26245,26248],{"class":107,"line":28},[105,26231,24561],{"class":1954},[105,26233,26061],{"class":220},[105,26235,23827],{"class":220},[105,26237,26238],{"class":220}," docker-ce",[105,26240,26241],{"class":220}," docker-ce-cli",[105,26243,26244],{"class":220}," containerd.io",[105,26246,26247],{"class":220}," docker-buildx-plugin",[105,26249,26250],{"class":220}," docker-compose-plugin\n",[21990,26252,26254],{"id":26253},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26256,26257,26258,26261,26262,26265],{},"查看自己自己包管理工具版本（dnf是 ",[265,26259,26260],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[265,26263,26264],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[96,26267,26269],{"className":23815,"code":26268,"language":23817,"meta":22,"style":22},"dnf --version\n",[102,26270,26271],{"__ignoreMap":22},[105,26272,26273,26276],{"class":107,"line":108},[105,26274,26275],{"class":1954},"dnf",[105,26277,26278],{"class":164}," --version\n",[14,26280,26004,26281,26285],{},[354,26282,26009],{"href":26283,"rel":26284},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23858]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26287,26288],{},"如果你之前安装过 docker，请先删掉",[96,26290,26292],{"className":23815,"code":26291,"language":23817,"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",[102,26293,26294,26308,26315,26322,26329,26336,26343,26350,26357,26364],{"__ignoreMap":22},[105,26295,26296,26298,26301,26303,26306],{"class":107,"line":108},[105,26297,24561],{"class":1954},[105,26299,26300],{"class":220}," dnf",[105,26302,26064],{"class":220},[105,26304,26305],{"class":220}," docker",[105,26307,24663],{"class":164},[105,26309,26310,26313],{"class":107,"line":28},[105,26311,26312],{"class":220},"                  docker-client",[105,26314,24663],{"class":164},[105,26316,26317,26320],{"class":107,"line":1171},[105,26318,26319],{"class":220},"                  docker-client-latest",[105,26321,24663],{"class":164},[105,26323,26324,26327],{"class":107,"line":1186},[105,26325,26326],{"class":220},"                  docker-common",[105,26328,24663],{"class":164},[105,26330,26331,26334],{"class":107,"line":1192},[105,26332,26333],{"class":220},"                  docker-latest",[105,26335,24663],{"class":164},[105,26337,26338,26341],{"class":107,"line":1206},[105,26339,26340],{"class":220},"                  docker-latest-logrotate",[105,26342,24663],{"class":164},[105,26344,26345,26348],{"class":107,"line":1212},[105,26346,26347],{"class":220},"                  docker-logrotate",[105,26349,24663],{"class":164},[105,26351,26352,26355],{"class":107,"line":1303},[105,26353,26354],{"class":220},"                  docker-selinux",[105,26356,24663],{"class":164},[105,26358,26359,26362],{"class":107,"line":1309},[105,26360,26361],{"class":220},"                  docker-engine-selinux",[105,26363,24663],{"class":164},[105,26365,26366],{"class":107,"line":1321},[105,26367,26368],{"class":220},"                  docker-engine\n",[14,26370,26371],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[96,26373,26375],{"className":23815,"code":26374,"language":23817,"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",[102,26376,26377,26391,26406],{"__ignoreMap":22},[105,26378,26379,26381,26383,26386,26388],{"class":107,"line":108},[105,26380,24561],{"class":1954},[105,26382,26300],{"class":220},[105,26384,26385],{"class":164}," -y",[105,26387,23827],{"class":220},[105,26389,26390],{"class":220}," dnf-plugins-core\n",[105,26392,26393,26395,26397,26400,26403],{"class":107,"line":28},[105,26394,24561],{"class":1954},[105,26396,26300],{"class":220},[105,26398,26399],{"class":220}," config-manager",[105,26401,26402],{"class":220}," addrepo",[105,26404,26405],{"class":164}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[105,26407,26408,26410,26413,26416,26419],{"class":107,"line":1171},[105,26409,24561],{"class":1954},[105,26411,26412],{"class":220}," sed",[105,26414,26415],{"class":164}," -i",[105,26417,26418],{"class":220}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[105,26420,26421],{"class":220}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26423,26424],{},"最后安装：",[96,26426,26428],{"className":23815,"code":26427,"language":23817,"meta":22,"style":22},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[102,26429,26430],{"__ignoreMap":22},[105,26431,26432,26434,26436,26438,26440,26442,26444,26446],{"class":107,"line":108},[105,26433,24561],{"class":1954},[105,26435,26300],{"class":220},[105,26437,23827],{"class":220},[105,26439,26238],{"class":220},[105,26441,26241],{"class":220},[105,26443,26244],{"class":220},[105,26445,26247],{"class":220},[105,26447,26250],{"class":220},[76,26449,26451],{"id":26450},"_22配置环境","2.2.配置环境",[21990,26453,26455,26458],{"id":26454},"_221检查-docker-服务状态",[265,26456,26457],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26460,26461],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[96,26463,26465],{"className":23815,"code":26464,"language":23817,"meta":22,"style":22},"systemctl status docker\n",[102,26466,26467],{"__ignoreMap":22},[105,26468,26469,26472,26475],{"class":107,"line":108},[105,26470,26471],{"class":1954},"systemctl",[105,26473,26474],{"class":220}," status",[105,26476,26477],{"class":220}," docker\n",[21990,26479,26481,26458],{"id":26480},"_222启动-docker-服务",[265,26482,26483],{},"2.2.2.启动 Docker 服务",[14,26485,26486],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[96,26488,26490],{"className":23815,"code":26489,"language":23817,"meta":22,"style":22},"sudo systemctl start docker\n",[102,26491,26492],{"__ignoreMap":22},[105,26493,26494,26496,26499,26501],{"class":107,"line":108},[105,26495,24561],{"class":1954},[105,26497,26498],{"class":220}," systemctl",[105,26500,4175],{"class":220},[105,26502,26477],{"class":220},[21990,26504,26506,26458],{"id":26505},"_223设置-docker-开机自启",[265,26507,26508],{},"2.2.3.设置 Docker 开机自启",[14,26510,26511],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[96,26513,26515],{"className":23815,"code":26514,"language":23817,"meta":22,"style":22},"sudo systemctl enable docker\n",[102,26516,26517],{"__ignoreMap":22},[105,26518,26519,26521,26523,26526],{"class":107,"line":108},[105,26520,24561],{"class":1954},[105,26522,26498],{"class":220},[105,26524,26525],{"class":220}," enable",[105,26527,26477],{"class":220},[21990,26529,26531,13787,26534,13787,26539,26458],{"id":26530},"_224将用户添加到-docker-组",[265,26532,26533],{},"2.2.4.将用户添加到",[265,26535,26536],{},[102,26537,26538],{},"docker",[265,26540,26541],{},"组",[14,26543,26544,26545,26547],{},"使用以下命令将当前用户添加到 ",[102,26546,26538],{}," 组：",[96,26549,26551],{"className":23815,"code":26550,"language":23817,"meta":22,"style":22},"sudo usermod -aG docker $USER\n",[102,26552,26553],{"__ignoreMap":22},[105,26554,26555,26557,26560,26563,26565],{"class":107,"line":108},[105,26556,24561],{"class":1954},[105,26558,26559],{"class":220}," usermod",[105,26561,26562],{"class":164}," -aG",[105,26564,26305],{"class":220},[105,26566,26567],{"class":115}," $USER\n",[21990,26569,26571,26458],{"id":26570},"_225退出并重新登录",[265,26572,26573],{},"2.2.5.退出并重新登录",[14,26575,26576],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[96,26578,26580],{"className":23815,"code":26579,"language":23817,"meta":22,"style":22},"newgrp docker\n",[102,26581,26582],{"__ignoreMap":22},[105,26583,26584,26587],{"class":107,"line":108},[105,26585,26586],{"class":1954},"newgrp",[105,26588,26477],{"class":220},[21990,26590,26592,26458],{"id":26591},"_226重新启动-docker-服务如果需要",[265,26593,26594],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26596,26597],{},"确保 Docker 服务正在运行，可以使用以下命令：",[96,26599,26600],{"className":23815,"code":26489,"language":23817,"meta":22,"style":22},[102,26601,26602],{"__ignoreMap":22},[105,26603,26604,26606,26608,26610],{"class":107,"line":108},[105,26605,24561],{"class":1954},[105,26607,26498],{"class":220},[105,26609,4175],{"class":220},[105,26611,26477],{"class":220},[21990,26613,26615,26458],{"id":26614},"_227重启电脑后检查-docker-服务状态",[265,26616,26617],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26619,26620],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[96,26622,26624],{"className":23815,"code":26623,"language":23817,"meta":22,"style":22},"sudo reboot\nsystemctl status docker\n",[102,26625,26626,26633],{"__ignoreMap":22},[105,26627,26628,26630],{"class":107,"line":108},[105,26629,24561],{"class":1954},[105,26631,26632],{"class":220}," reboot\n",[105,26634,26635,26637,26639],{"class":107,"line":28},[105,26636,26471],{"class":1954},[105,26638,26474],{"class":220},[105,26640,26477],{"class":220},[14,26642,26643],{},[20,26644],{"alt":22,"src":26645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26647,26648],{},"第三行显示enabled说明开机自启动成功",[14,26650,26651],{},"按q退出",[76,26653,26655],{"id":26654},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26657,26658],{},"优先使用linux来使用docker是比较好的",[14,26660,26661],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26663,26664],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26666,26667,26668],{},"官方下载安装:",[354,26669,26670],{"href":26670,"rel":26671},"https:\u002F\u002Fwww.docker.com\u002F",[23858],[14,26673,26674],{},"Windows的Docker显卡直通与USB直通:",[14,26676,26677],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26679,26680],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26682,26683],{},[20,26684],{"alt":22,"src":26685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26687,26688],{},[20,26689],{"alt":22,"src":26690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26692,26693],{},[20,26694],{"alt":22,"src":26695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5118,26697,26698],{},"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":28,"depth":28,"links":26700},[26701,26702,26703],{"id":25978,"depth":1171,"text":25979},{"id":26450,"depth":1171,"text":26451},{"id":26654,"depth":1171,"text":26655},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25970,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26710,"title":26711,"body":26712,"description":26719,"extension":30,"meta":27412,"navigation":32,"path":27413,"seo":27414,"stem":27415,"__hash__":27416},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26713,"toc":27406},[26714,26717,26720,26724,26729,26734,26737,26765,26770,26779,26782,26787,26791,26798,26803,26809,26813,26816,26820,26825,26917,26922,26940,26945,26966,26971,26987,26991,26996,27025,27030,27076,27081,27125,27133,27150,27155,27171,27176,27190,27193,27196,27199,27202,27231,27234,27239,27243,27246,27249,27255,27258,27261,27264,27326,27333,27338,27341,27359,27363,27366,27383,27386,27389,27403],[10,26715,26711],{"id":26716},"_3docker直通",[14,26718,26719],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[76,26721,26723],{"id":26722},"_31usb直通","3.1.USB直通",[14,26725,26726],{},[20,26727],{"alt":22,"src":26728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[59,26730,26731],{},[62,26732,26733],{},"方法一(不是很推荐新手)：",[14,26735,26736],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[96,26738,26740],{"className":23815,"code":26739,"language":23817,"meta":22,"style":22},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[102,26741,26742,26750,26755],{"__ignoreMap":22},[105,26743,26744,26747],{"class":107,"line":108},[105,26745,26746],{"class":1954},"ls",[105,26748,26749],{"class":220}," \u002Fdev\n",[105,26751,26752],{"class":107,"line":28},[105,26753,26754],{"class":174},"#例如\n",[105,26756,26757,26760,26762],{"class":107,"line":1171},[105,26758,26759],{"class":115},"--device",[105,26761,161],{"class":111},[105,26763,26764],{"class":220},"\u002Fdev\u002Ftty_USB0\n",[59,26766,26767],{"start":28},[62,26768,26769],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[96,26771,26773],{"className":23815,"code":26772,"language":23817,"meta":22,"style":22},"--privileged\n",[102,26774,26775],{"__ignoreMap":22},[105,26776,26777],{"class":107,"line":108},[105,26778,26772],{"class":1954},[14,26780,26781],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26783,26784],{},[20,26785],{"alt":22,"src":26786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[76,26788,26790],{"id":26789},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26792,26793,26794,26797],{},"NVIDIA Container Toolkit使用户 ",[265,26795,26796],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26799,26800],{},[20,26801],{"alt":22,"src":26802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26804,26805],{},[354,26806,26807],{"href":26807,"rel":26808},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23858],[21990,26810,26812],{"id":26811},"_321安装","3.2.1.安装",[14,26814,26815],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22902,26817,26819],{"id":26818},"_3211ubuntu","3.2.1.1.Ubuntu",[59,26821,26822],{},[62,26823,26824],{},"配置存储库 并更新",[96,26826,26828],{"className":23815,"code":26827,"language":23817,"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",[102,26829,26830,26859,26879,26891,26903,26909],{"__ignoreMap":22},[105,26831,26832,26835,26838,26841,26843,26845,26848,26851,26854,26857],{"class":107,"line":108},[105,26833,26834],{"class":1954},"curl",[105,26836,26837],{"class":164}," -fsSL",[105,26839,26840],{"class":220}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[105,26842,25094],{"class":111},[105,26844,26058],{"class":1954},[105,26846,26847],{"class":220}," gpg",[105,26849,26850],{"class":164}," --dearmor",[105,26852,26853],{"class":164}," -o",[105,26855,26856],{"class":220}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[105,26858,24663],{"class":164},[105,26860,26861,26864,26866,26869,26872,26875,26877],{"class":107,"line":28},[105,26862,26863],{"class":115},"  && ",[105,26865,26834],{"class":1954},[105,26867,26868],{"class":164}," -s",[105,26870,26871],{"class":164}," -L",[105,26873,26874],{"class":220}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[105,26876,25094],{"class":111},[105,26878,24663],{"class":164},[105,26880,26881,26884,26887,26889],{"class":107,"line":1171},[105,26882,26883],{"class":1954},"    sed",[105,26885,26886],{"class":220}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[105,26888,25094],{"class":111},[105,26890,24663],{"class":164},[105,26892,26893,26896,26898,26901],{"class":107,"line":1186},[105,26894,26895],{"class":1954},"    sudo",[105,26897,26201],{"class":220},[105,26899,26900],{"class":220}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[105,26902,24663],{"class":164},[105,26904,26905,26907],{"class":107,"line":1192},[105,26906,26863],{"class":115},[105,26908,26160],{"class":164},[105,26910,26911,26913,26915],{"class":107,"line":1206},[105,26912,26895],{"class":1954},[105,26914,26061],{"class":220},[105,26916,26227],{"class":220},[59,26918,26919],{"start":28},[62,26920,26921],{},"安装nvidia-docker2",[96,26923,26925],{"className":23815,"code":26924,"language":23817,"meta":22,"style":22},"sudo apt-get install -y nvidia-docker2\n",[102,26926,26927],{"__ignoreMap":22},[105,26928,26929,26931,26933,26935,26937],{"class":107,"line":108},[105,26930,24561],{"class":1954},[105,26932,26061],{"class":220},[105,26934,23827],{"class":220},[105,26936,26385],{"class":164},[105,26938,26939],{"class":220}," nvidia-docker2\n",[59,26941,26942],{"start":1171},[62,26943,26944],{},"使用nvidia-ctk命令配置container runtime",[96,26946,26948],{"className":23815,"code":26947,"language":23817,"meta":22,"style":22},"sudo nvidia-ctk runtime configure --runtime=docker\n",[102,26949,26950],{"__ignoreMap":22},[105,26951,26952,26954,26957,26960,26963],{"class":107,"line":108},[105,26953,24561],{"class":1954},[105,26955,26956],{"class":220}," nvidia-ctk",[105,26958,26959],{"class":220}," runtime",[105,26961,26962],{"class":220}," configure",[105,26964,26965],{"class":164}," --runtime=docker\n",[59,26967,26968],{"start":1186},[62,26969,26970],{},"重启docker服务:",[96,26972,26974],{"className":23815,"code":26973,"language":23817,"meta":22,"style":22},"sudo systemctl restart docker\n",[102,26975,26976],{"__ignoreMap":22},[105,26977,26978,26980,26982,26985],{"class":107,"line":108},[105,26979,24561],{"class":1954},[105,26981,26498],{"class":220},[105,26983,26984],{"class":220}," restart",[105,26986,26477],{"class":220},[22902,26988,26990],{"id":26989},"_3212fedora","3.2.1.2.Fedora",[59,26992,26993],{},[62,26994,26995],{},"配置存储库",[96,26997,26999],{"className":23815,"code":26998,"language":23817,"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",[102,27000,27001,27016],{"__ignoreMap":22},[105,27002,27003,27005,27007,27009,27012,27014],{"class":107,"line":108},[105,27004,26834],{"class":1954},[105,27006,26868],{"class":164},[105,27008,26871],{"class":164},[105,27010,27011],{"class":220}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[105,27013,25094],{"class":111},[105,27015,24663],{"class":164},[105,27017,27018,27020,27022],{"class":107,"line":28},[105,27019,24561],{"class":1954},[105,27021,26201],{"class":220},[105,27023,27024],{"class":220}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[59,27026,27027],{"start":28},[62,27028,27029],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[96,27031,27033],{"className":23815,"code":27032,"language":23817,"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",[102,27034,27035,27040,27054,27058,27063],{"__ignoreMap":22},[105,27036,27037],{"class":107,"line":108},[105,27038,27039],{"class":174},"# 如果是RHEL或者Rocky（DNF4）\n",[105,27041,27042,27044,27046,27048,27051],{"class":107,"line":28},[105,27043,24561],{"class":1954},[105,27045,26300],{"class":220},[105,27047,26399],{"class":220},[105,27049,27050],{"class":164}," --add-repo",[105,27052,27053],{"class":220}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[105,27055,27056],{"class":107,"line":1171},[105,27057,2391],{"emptyLinePlaceholder":32},[105,27059,27060],{"class":107,"line":1186},[105,27061,27062],{"class":174},"# 如果是Feodra41+（DNF5）\n",[105,27064,27065,27067,27069,27071,27073],{"class":107,"line":1192},[105,27066,24561],{"class":1954},[105,27068,26300],{"class":220},[105,27070,26399],{"class":220},[105,27072,26402],{"class":220},[105,27074,27075],{"class":164}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[59,27077,27078],{"start":1171},[62,27079,27080],{},"安装NVIDIA Container Toolki包",[96,27082,27084],{"className":23815,"code":27083,"language":23817,"meta":22,"style":22},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[102,27085,27086,27091,27104,27108,27113],{"__ignoreMap":22},[105,27087,27088],{"class":107,"line":108},[105,27089,27090],{"class":174},"# 如果是RHEL或者Rocky\n",[105,27092,27093,27095,27097,27099,27101],{"class":107,"line":28},[105,27094,24561],{"class":1954},[105,27096,26300],{"class":220},[105,27098,23827],{"class":220},[105,27100,26385],{"class":164},[105,27102,27103],{"class":220}," nvidia-container-toolkit\n",[105,27105,27106],{"class":107,"line":1171},[105,27107,2391],{"emptyLinePlaceholder":32},[105,27109,27110],{"class":107,"line":1186},[105,27111,27112],{"class":174},"# 如果是Fedora\n",[105,27114,27115,27117,27119,27121,27123],{"class":107,"line":1192},[105,27116,24561],{"class":1954},[105,27118,26300],{"class":220},[105,27120,23827],{"class":220},[105,27122,26385],{"class":164},[105,27124,27103],{"class":220},[59,27126,27127],{"start":1186},[62,27128,27129,27130,27132],{},"安装nvidia-docker2 ： 在Fedora上使用",[102,27131,26275],{},"进行安装",[96,27134,27136],{"className":23815,"code":27135,"language":23817,"meta":22,"style":22},"sudo dnf install -y nvidia-docker2\n",[102,27137,27138],{"__ignoreMap":22},[105,27139,27140,27142,27144,27146,27148],{"class":107,"line":108},[105,27141,24561],{"class":1954},[105,27143,26300],{"class":220},[105,27145,23827],{"class":220},[105,27147,26385],{"class":164},[105,27149,26939],{"class":220},[59,27151,27152],{"start":1192},[62,27153,27154],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[96,27156,27157],{"className":23815,"code":26947,"language":23817,"meta":22,"style":22},[102,27158,27159],{"__ignoreMap":22},[105,27160,27161,27163,27165,27167,27169],{"class":107,"line":108},[105,27162,24561],{"class":1954},[105,27164,26956],{"class":220},[105,27166,26959],{"class":220},[105,27168,26962],{"class":220},[105,27170,26965],{"class":164},[59,27172,27173],{"start":1206},[62,27174,27175],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[96,27177,27178],{"className":23815,"code":26973,"language":23817,"meta":22,"style":22},[102,27179,27180],{"__ignoreMap":22},[105,27181,27182,27184,27186,27188],{"class":107,"line":108},[105,27183,24561],{"class":1954},[105,27185,26498],{"class":220},[105,27187,26984],{"class":220},[105,27189,26477],{"class":220},[14,27191,27192],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27194,27195],{},"方法：",[14,27197,27198],{},"1️⃣nvidia-smi",[14,27200,27201],{},"2️⃣运行nvidia cuda 容器进行测试",[96,27203,27205],{"className":23815,"code":27204,"language":23817,"meta":22,"style":22},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[102,27206,27207],{"__ignoreMap":22},[105,27208,27209,27211,27213,27216,27219,27222,27225,27228],{"class":107,"line":108},[105,27210,24561],{"class":1954},[105,27212,26305],{"class":220},[105,27214,27215],{"class":220}," run",[105,27217,27218],{"class":164}," --rm",[105,27220,27221],{"class":164}," --gpus",[105,27223,27224],{"class":220}," all",[105,27226,27227],{"class":220}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[105,27229,27230],{"class":220}," nvidia-smi\n",[14,27232,27233],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27235,27236],{},[20,27237],{"alt":22,"src":27238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[76,27240,27242],{"id":27241},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27244,27245],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27247,27248],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27250,27251],{},[354,27252,27253],{"href":27253,"rel":27254},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23858],[14,27256,27257],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27259,27260],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27262,27263],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[253,27265,27266,27282],{},[256,27267,27268],{},[259,27269,27270,27273,27276,27279],{},[262,27271,27272],{"align":23729},"镜像类型",[262,27274,27275],{"align":23729},"适用场景",[262,27277,27278],{"align":23729},"示例标签",[262,27280,27281],{"align":23729},"大小",[300,27283,27284,27298,27312],{},[259,27285,27286,27289,27292,27295],{},[305,27287,27288],{"align":23729},"base",[305,27290,27291],{"align":23729},"仅需 CUDA 运行时库",[305,27293,27294],{"align":23729},"12.4.0-base-ubuntu22.04",[305,27296,27297],{"align":23729},"~240MB",[259,27299,27300,27303,27306,27309],{},[305,27301,27302],{"align":23729},"runtime",[305,27304,27305],{"align":23729},"部署编译后的应用（含数学库）",[305,27307,27308],{"align":23729},"12.4.0-runtime-ubuntu22.04",[305,27310,27311],{"align":23729},"~2GB",[259,27313,27314,27317,27320,27323],{},[305,27315,27316],{"align":23729},"devel",[305,27318,27319],{"align":23729},"开发环境（含编译工具）",[305,27321,27322],{"align":23729},"12.4.0-devel-ubuntu22.04",[305,27324,27325],{"align":23729},"~3GB",[14,27327,27328,27329,27332],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[102,27330,27331],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27334,27335],{},[20,27336],{"alt":22,"src":27337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27339,27340],{},"在dockerfile里就可以开头这么写：",[96,27342,27344],{"className":23815,"code":27343,"language":23817,"meta":22,"style":22},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[102,27345,27346,27351],{"__ignoreMap":22},[105,27347,27348],{"class":107,"line":108},[105,27349,27350],{"class":174},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[105,27352,27353,27356],{"class":107,"line":28},[105,27354,27355],{"class":1954},"FROM",[105,27357,27358],{"class":220}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[76,27360,27362],{"id":27361},"_34配置以太网","3.4.配置以太网",[14,27364,27365],{},"指定网络模式",[96,27367,27369],{"className":23815,"code":27368,"language":23817,"meta":22,"style":22},"--net=host \\\n",[102,27370,27371],{"__ignoreMap":22},[105,27372,27373,27376,27378,27381],{"class":107,"line":108},[105,27374,27375],{"class":115},"--net",[105,27377,161],{"class":111},[105,27379,27380],{"class":220},"host",[105,27382,24663],{"class":1954},[14,27384,27385],{},"启动参数里加上这行即可。具体在下方",[14,27387,27388],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1123,27390,27391,27394,27397,27400],{},[62,27392,27393],{},"--net=bridge:默认选项，表示连接到默认的网桥",[62,27395,27396],{},"--net=host:容器使用宿主机的网络",[62,27398,27399],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[62,27401,27402],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5118,27404,27405],{},"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":28,"depth":28,"links":27407},[27408,27409,27410,27411],{"id":26722,"depth":1171,"text":26723},{"id":26789,"depth":1171,"text":26790},{"id":27241,"depth":1171,"text":27242},{"id":27361,"depth":1171,"text":27362},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26711,"description":26719},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27418,"title":27419,"body":27420,"description":27427,"extension":30,"meta":27433,"navigation":32,"path":27434,"seo":27435,"stem":27436,"__hash__":27437},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27421,"toc":27431},[27422,27425,27428],[10,27423,27419],{"id":27424},"_4dockerhub换源",[14,27426,27427],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27429,27430],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":22,"searchDepth":28,"depth":28,"links":27432},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27419,"description":27427},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27439,"title":27440,"body":27441,"description":22,"extension":30,"meta":28453,"navigation":32,"path":28454,"seo":28455,"stem":28456,"__hash__":28457},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27442,"toc":28448},[27443,27446,27450,27456,27460,27463,27803,27806,27809,27812,27817,27822,27825,27828,27831,27834,27853,27856,27867,27873,28055,28065,28081,28344,28346,28371,28386,28395,28445],[10,27444,27440],{"id":27445},"_5docker命令学习",[76,27447,27449],{"id":27448},"_51参考文档","5.1.参考文档",[14,27451,27452],{},[354,27453,27454],{"href":27454,"rel":27455},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23858],[76,27457,27459],{"id":27458},"_52常用命令","5.2.常用命令",[14,27461,27462],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[253,27464,27465,27478],{},[256,27466,27467],{},[259,27468,27469,27472,27475],{},[262,27470,27471],{"align":23729},"命令",[262,27473,27474],{"align":23729},"描述",[262,27476,27477],{"align":23729},"示例",[300,27479,27480,27491,27502,27513,27524,27535,27546,27557,27567,27578,27589,27600,27610,27621,27632,27643,27653,27663,27673,27683,27694,27705,27716,27727,27738,27749,27759,27770,27781,27792],{},[259,27481,27482,27485,27488],{},[305,27483,27484],{"align":23729},"docker run",[305,27486,27487],{"align":23729},"创建并启动一个新的容器。",[305,27489,27490],{"align":23729},"docker run -it ubuntu bash",[259,27492,27493,27496,27499],{},[305,27494,27495],{"align":23729},"docker build",[305,27497,27498],{"align":23729},"通过指定的 Dockerfile 创建一个新的镜像。",[305,27500,27501],{"align":23729},"docker build -t myimage .",[259,27503,27504,27507,27510],{},[305,27505,27506],{"align":23729},"docker pull",[305,27508,27509],{"align":23729},"从 Docker 仓库拉取镜像。",[305,27511,27512],{"align":23729},"docker pull ubuntu",[259,27514,27515,27518,27521],{},[305,27516,27517],{"align":23729},"docker push",[305,27519,27520],{"align":23729},"将本地镜像推送到 Docker 仓库。",[305,27522,27523],{"align":23729},"docker push myimage",[259,27525,27526,27529,27532],{},[305,27527,27528],{"align":23729},"docker stop",[305,27530,27531],{"align":23729},"停止一个正在运行的容器。",[305,27533,27534],{"align":23729},"docker stop container_id",[259,27536,27537,27540,27543],{},[305,27538,27539],{"align":23729},"docker start",[305,27541,27542],{"align":23729},"启动一个已经存在的容器。",[305,27544,27545],{"align":23729},"docker start container_id",[259,27547,27548,27551,27554],{},[305,27549,27550],{"align":23729},"docker restart",[305,27552,27553],{"align":23729},"重新启动容器。",[305,27555,27556],{"align":23729},"docker restart container_id",[259,27558,27559,27562,27565],{},[305,27560,27561],{"align":23729},"docker ps",[305,27563,27564],{"align":23729},"列出当前正在运行的容器。",[305,27566,27561],{"align":23729},[259,27568,27569,27572,27575],{},[305,27570,27571],{"align":23729},"docker rm",[305,27573,27574],{"align":23729},"删除一个或多个停止的容器。",[305,27576,27577],{"align":23729},"docker rm container_id",[259,27579,27580,27583,27586],{},[305,27581,27582],{"align":23729},"docker exec",[305,27584,27585],{"align":23729},"在一个正在运行的容器中执行命令。",[305,27587,27588],{"align":23729},"docker exec -it container_id bash",[259,27590,27591,27594,27597],{},[305,27592,27593],{"align":23729},"docker logs",[305,27595,27596],{"align":23729},"查看容器的日志输出。",[305,27598,27599],{"align":23729},"docker logs container_id",[259,27601,27602,27605,27608],{},[305,27603,27604],{"align":23729},"docker images",[305,27606,27607],{"align":23729},"列出本地所有镜像。",[305,27609,27604],{"align":23729},[259,27611,27612,27615,27618],{},[305,27613,27614],{"align":23729},"docker rmi",[305,27616,27617],{"align":23729},"删除一个或多个镜像。",[305,27619,27620],{"align":23729},"docker rmi myimage",[259,27622,27623,27626,27629],{},[305,27624,27625],{"align":23729},"docker network",[305,27627,27628],{"align":23729},"管理 Docker 网络。",[305,27630,27631],{"align":23729},"docker network ls",[259,27633,27634,27637,27640],{},[305,27635,27636],{"align":23729},"docker volume",[305,27638,27639],{"align":23729},"管理 Docker 数据卷。",[305,27641,27642],{"align":23729},"docker volume ls",[259,27644,27645,27648,27651],{},[305,27646,27647],{"align":23729},"docker-compose up",[305,27649,27650],{"align":23729},"启动 docker-compose.yml 中定义的所有服务。",[305,27652,27647],{"align":23729},[259,27654,27655,27658,27661],{},[305,27656,27657],{"align":23729},"docker-compose down",[305,27659,27660],{"align":23729},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[305,27662,27657],{"align":23729},[259,27664,27665,27668,27671],{},[305,27666,27667],{"align":23729},"docker info",[305,27669,27670],{"align":23729},"显示 Docker 系统的详细信息。",[305,27672,27667],{"align":23729},[259,27674,27675,27678,27681],{},[305,27676,27677],{"align":23729},"docker stats",[305,27679,27680],{"align":23729},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[305,27682,27677],{"align":23729},[259,27684,27685,27688,27691],{},[305,27686,27687],{"align":23729},"docker inspect",[305,27689,27690],{"align":23729},"查看容器或镜像的详细信息（JSON 格式）。",[305,27692,27693],{"align":23729},"docker inspect container_id",[259,27695,27696,27699,27702],{},[305,27697,27698],{"align":23729},"docker save",[305,27700,27701],{"align":23729},"将一个镜像保存为 tar 文件。",[305,27703,27704],{"align":23729},"docker save -o myimage.tar myimage",[259,27706,27707,27710,27713],{},[305,27708,27709],{"align":23729},"docker load",[305,27711,27712],{"align":23729},"从 tar 文件中加载镜像。",[305,27714,27715],{"align":23729},"docker load -i myimage.tar",[259,27717,27718,27721,27724],{},[305,27719,27720],{"align":23729},"docker tag",[305,27722,27723],{"align":23729},"为镜像添加标签（tag）。",[305,27725,27726],{"align":23729},"docker tag myimage myimage:v1",[259,27728,27729,27732,27735],{},[305,27730,27731],{"align":23729},"docker buildx build",[305,27733,27734],{"align":23729},"使用 Buildx 构建多架构镜像。",[305,27736,27737],{"align":23729},"docker buildx build -t myimage .",[259,27739,27740,27743,27746],{},[305,27741,27742],{"align":23729},"docker buildx create",[305,27744,27745],{"align":23729},"创建一个新的 Buildx 构建实例。",[305,27747,27748],{"align":23729},"docker buildx create –use",[259,27750,27751,27754,27757],{},[305,27752,27753],{"align":23729},"docker buildx ls",[305,27755,27756],{"align":23729},"列出所有可用的 Buildx 构建实例。",[305,27758,27753],{"align":23729},[259,27760,27761,27764,27767],{},[305,27762,27763],{"align":23729},"docker buildx use",[305,27765,27766],{"align":23729},"设置当前的 Buildx 构建实例。",[305,27768,27769],{"align":23729},"docker buildx use mybuilder",[259,27771,27772,27775,27778],{},[305,27773,27774],{"align":23729},"docker buildx bake",[305,27776,27777],{"align":23729},"使用 Bake 文件批量构建镜像。",[305,27779,27780],{"align":23729},"docker buildx bake -f bake.hcl",[259,27782,27783,27786,27789],{},[305,27784,27785],{"align":23729},"docker buildx build –push",[305,27787,27788],{"align":23729},"构建镜像并推送到镜像仓库。",[305,27790,27791],{"align":23729},"docker buildx build –push -t myimage .",[259,27793,27794,27797,27800],{},[305,27795,27796],{"align":23729},"docker buildx build –platform",[305,27798,27799],{"align":23729},"构建镜像并为多个平台生成支持。",[305,27801,27802],{"align":23729},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27804,27805],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27807,27808],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27810,27811],{},"docker images 可以查看已经下载的镜像",[14,27813,27814],{},[20,27815],{"alt":22,"src":27816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27818,27819],{},[265,27820,27821],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27823,27824],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27826,27827],{},"docker container logs 查看容器日志",[14,27829,27830],{},"docker top 查看容器里的进程",[14,27832,27833],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[96,27835,27837],{"className":23815,"code":27836,"language":23817,"meta":22,"style":22},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[102,27838,27839],{"__ignoreMap":22},[105,27840,27841,27844,27847,27850],{"class":107,"line":108},[105,27842,27843],{"class":1954},"如：docker",[105,27845,27846],{"class":220}," cp",[105,27848,27849],{"class":220}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[105,27851,27852],{"class":220}," \u002Fmydata\u002Fnginx\n",[14,27854,27855],{},"docker run时在启动容器的时候会有几个常用的选项：",[1123,27857,27858,27861,27864],{},[62,27859,27860],{},"-d选项：表示后台运行",[62,27862,27863],{},"-P选项：随机端口映射",[62,27865,27866],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[76,27868,27870],{"id":27869},"_53run命令的参数非常重要",[265,27871,27872],{},"5.3.run命令的参数（非常重要）",[253,27874,27875,27888],{},[256,27876,27877],{},[259,27878,27879,27882,27885],{},[262,27880,27881],{"align":23729},"参数\u002F配置",[262,27883,27884],{"align":23729},"功能说明",[262,27886,27887],{"align":23729},"重要性与参考依据",[300,27889,27890,27901,27912,27923,27934,27945,27956,27967,27978,27989,28000,28011,28022,28033,28044],{},[259,27891,27892,27895,27898],{},[305,27893,27894],{"align":23729},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[305,27896,27897],{"align":23729},"指定容器名称，便于后续管理",[305,27899,27900],{"align":23729},"替代随机生成的容器名。",[259,27902,27903,27906,27909],{},[305,27904,27905],{"align":23729},"–gpus all",[305,27907,27908],{"align":23729},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[305,27910,27911],{"align":23729},"用于CUDA加速等GPU依赖任务。",[259,27913,27914,27917,27920],{},[305,27915,27916],{"align":23729},"-e NVIDIA_DRIVER_CAPABILITIES=all",[305,27918,27919],{"align":23729},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[305,27921,27922],{"align":23729},"确保容器内GPU功能完整67。",[259,27924,27925,27928,27931],{},[305,27926,27927],{"align":23729},"-dit",[305,27929,27930],{"align":23729},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[305,27932,27933],{"align":23729},"允许容器在后台运行并支持交互操作。",[259,27935,27936,27939,27942],{},[305,27937,27938],{"align":23729},"–privileged",[305,27940,27941],{"align":23729},"赋予容器完全主机权限（可访问设备、内核模块等）",[305,27943,27944],{"align":23729},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[259,27946,27947,27950,27953],{},[305,27948,27949],{"align":23729},"–net=host",[305,27951,27952],{"align":23729},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[305,27954,27955],{"align":23729},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[259,27957,27958,27961,27964],{},[305,27959,27960],{"align":23729},"–group-add audio–group-add video–group-add dialout",[305,27962,27963],{"align":23729},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[305,27965,27966],{"align":23729},"避免权限问题（如避免无法调用摄像头、麦克风）。",[259,27968,27969,27972,27975],{},[305,27970,27971],{"align":23729},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[305,27973,27974],{"align":23729},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[305,27976,27977],{"align":23729},"支持容器内运行图形界面应用（如OpenCV可视化）。",[259,27979,27980,27983,27986],{},[305,27981,27982],{"align":23729},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[305,27984,27985],{"align":23729},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[305,27987,27988],{"align":23729},"实现容器内图形显示。",[259,27990,27991,27994,27997],{},[305,27992,27993],{"align":23729},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[305,27995,27996],{"align":23729},"挂载X11认证文件（只读）",[305,27998,27999],{"align":23729},"确保容器有权连接宿主机显示服务。",[259,28001,28002,28005,28008],{},[305,28003,28004],{"align":23729},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[305,28006,28007],{"align":23729},"挂载Wayland显示协议相关目录",[305,28009,28010],{"align":23729},"支持Wayland协议的图形显示。",[259,28012,28013,28016,28019],{},[305,28014,28015],{"align":23729},"–ulimit nofile=1024:524288",[305,28017,28018],{"align":23729},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[305,28020,28021],{"align":23729},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[259,28023,28024,28027,28030],{},[305,28025,28026],{"align":23729},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[305,28028,28029],{"align":23729},"挂载宿主机用户目录到容器内同名路径",[305,28031,28032],{"align":23729},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[259,28034,28035,28038,28041],{},[305,28036,28037],{"align":23729},"-w \u002Fhome\u002Ftungchiahui",[305,28039,28040],{"align":23729},"设置容器启动后的默认工作目录",[305,28042,28043],{"align":23729},"直接进入项目路径，方便执行命令2324。",[259,28045,28046,28049,28052],{},[305,28047,28048],{"align":23729},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[305,28050,28051],{"align":23729},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[305,28053,28054],{"align":23729},"提供预配置的深度学习与机器人开发环境。",[14,28056,28057,28058,28060,28061,28064],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[102,28059,24561],{},"加不加",[102,28062,28063],{},"sudo -E","都无所谓。",[14,28066,28067,28068,28070,28071,28073,28074,28077,28078,28080],{},"用户已经被加到docker组了，不用",[102,28069,24561],{},"也行跑，其次，",[102,28072,24561],{},"运行的话，你的",[102,28075,28076],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[102,28079,28076],{},"更不可能变了。",[96,28082,28084],{"className":23815,"code":28083,"language":23817,"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",[102,28085,28086,28099,28109,28119,28131,28138,28145,28152,28162,28171,28180,28194,28206,28218,28227,28237,28246,28261,28294,28321,28332,28339],{"__ignoreMap":22},[105,28087,28088,28090,28092,28094,28097],{"class":107,"line":108},[105,28089,24561],{"class":1954},[105,28091,26305],{"class":220},[105,28093,27215],{"class":220},[105,28095,28096],{"class":164}," --name=ros_opencv_cuda",[105,28098,24663],{"class":164},[105,28100,28101,28104,28107],{"class":107,"line":28},[105,28102,28103],{"class":115},"--gpus ",[105,28105,28106],{"class":220},"all",[105,28108,24663],{"class":164},[105,28110,28111,28114,28117],{"class":107,"line":1171},[105,28112,28113],{"class":115},"-e ",[105,28115,28116],{"class":220},"NVIDIA_DRIVER_CAPABILITIES=all",[105,28118,24663],{"class":164},[105,28120,28121,28123,28126,28129],{"class":107,"line":1186},[105,28122,28113],{"class":115},[105,28124,28125],{"class":220},"DISPLAY=",[105,28127,28128],{"class":115},"$DISPLAY ",[105,28130,26160],{"class":164},[105,28132,28133,28136],{"class":107,"line":1192},[105,28134,28135],{"class":115},"-dit ",[105,28137,26160],{"class":164},[105,28139,28140,28143],{"class":107,"line":1206},[105,28141,28142],{"class":115},"--privileged ",[105,28144,26160],{"class":164},[105,28146,28147,28150],{"class":107,"line":1212},[105,28148,28149],{"class":115},"--net=host ",[105,28151,26160],{"class":164},[105,28153,28154,28157,28160],{"class":107,"line":1303},[105,28155,28156],{"class":115},"--group-add ",[105,28158,28159],{"class":220},"audio",[105,28161,24663],{"class":164},[105,28163,28164,28166,28169],{"class":107,"line":1309},[105,28165,28156],{"class":115},[105,28167,28168],{"class":220},"video",[105,28170,24663],{"class":164},[105,28172,28173,28175,28178],{"class":107,"line":1321},[105,28174,28156],{"class":115},[105,28176,28177],{"class":220},"dialout",[105,28179,24663],{"class":164},[105,28181,28182,28184,28187,28189,28192],{"class":107,"line":1603},[105,28183,28113],{"class":115},[105,28185,28186],{"class":220},"XAUTHORITY=",[105,28188,28076],{"class":115},[105,28190,28191],{"class":220},"\u002F.Xauthority",[105,28193,24663],{"class":164},[105,28195,28196,28198,28201,28204],{"class":107,"line":1608},[105,28197,28113],{"class":115},[105,28199,28200],{"class":220},"WAYLAND_DISPLAY=",[105,28202,28203],{"class":115},"$WAYLAND_DISPLAY ",[105,28205,26160],{"class":164},[105,28207,28208,28210,28213,28216],{"class":107,"line":1614},[105,28209,28113],{"class":115},[105,28211,28212],{"class":220},"XDG_RUNTIME_DIR=",[105,28214,28215],{"class":115},"$XDG_RUNTIME_DIR ",[105,28217,26160],{"class":164},[105,28219,28220,28222,28225],{"class":107,"line":1619},[105,28221,28113],{"class":115},[105,28223,28224],{"class":220},"QT_QPA_PLATFORM=xcb",[105,28226,24663],{"class":164},[105,28228,28229,28232,28235],{"class":107,"line":1633},[105,28230,28231],{"class":115},"-v ",[105,28233,28234],{"class":220},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[105,28236,24663],{"class":164},[105,28238,28239,28241,28244],{"class":107,"line":1638},[105,28240,28231],{"class":115},[105,28242,28243],{"class":220},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[105,28245,24663],{"class":164},[105,28247,28248,28251,28254,28256,28259],{"class":107,"line":1644},[105,28249,28250],{"class":115},"-v $HOME",[105,28252,28253],{"class":220},"\u002F.Xauthority:",[105,28255,28076],{"class":115},[105,28257,28258],{"class":220},"\u002F.Xauthority:ro",[105,28260,24663],{"class":164},[105,28262,28263,28265,28268,28270,28273,28276,28278,28281,28283,28285,28287,28289,28292],{"class":107,"line":1665},[105,28264,28231],{"class":115},[105,28266,28267],{"class":220},"\u002Frun\u002Fuser\u002F",[105,28269,25084],{"class":115},[105,28271,28272],{"class":1954},"id",[105,28274,28275],{"class":164}," -u",[105,28277,545],{"class":115},[105,28279,28280],{"class":220},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[105,28282,25084],{"class":115},[105,28284,28272],{"class":1954},[105,28286,28275],{"class":164},[105,28288,545],{"class":115},[105,28290,28291],{"class":220},"\u002Fwayland-0",[105,28293,24663],{"class":164},[105,28295,28296,28298,28300,28302,28304,28306,28308,28311,28313,28315,28317,28319],{"class":107,"line":1670},[105,28297,28231],{"class":115},[105,28299,28267],{"class":220},[105,28301,25084],{"class":115},[105,28303,28272],{"class":1954},[105,28305,28275],{"class":164},[105,28307,545],{"class":115},[105,28309,28310],{"class":220},":\u002Frun\u002Fuser\u002F",[105,28312,25084],{"class":115},[105,28314,28272],{"class":1954},[105,28316,28275],{"class":164},[105,28318,13706],{"class":115},[105,28320,26160],{"class":164},[105,28322,28323,28325,28327,28330],{"class":107,"line":1684},[105,28324,28250],{"class":115},[105,28326,975],{"class":220},[105,28328,28329],{"class":115},"$HOME ",[105,28331,26160],{"class":164},[105,28333,28334,28337],{"class":107,"line":1689},[105,28335,28336],{"class":115},"-w $HOME ",[105,28338,26160],{"class":164},[105,28340,28341],{"class":107,"line":1718},[105,28342,28343],{"class":115},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28345,9017],{},[59,28347,28348,28356,28359,28362],{},[62,28349,28350,13787,28352,28355],{},[102,28351,28116],{},[102,28353,28354],{},"--gpus all","没有英伟达显卡请注释。",[62,28357,28358],{},"--name后面请自己为容器起名。",[62,28360,28361],{},"最后一行仓库名称请你自己找对应的镜像填上。",[62,28363,28364,28365,28370],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23546,28366,28367],{},[265,28368,28369],{},"请不要加","。",[96,28372,28374],{"className":23815,"code":28373,"language":23817,"meta":22,"style":22},"--ulimit nofile=1024:524288 \\\n",[102,28375,28376],{"__ignoreMap":22},[105,28377,28378,28381,28384],{"class":107,"line":108},[105,28379,28380],{"class":1954},"--ulimit",[105,28382,28383],{"class":220}," nofile=1024:524288",[105,28385,24663],{"class":164},[14,28387,28388,28389,28394],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23546,28390,28391],{},[265,28392,28393],{},"不建议","**.**",[96,28396,28398],{"className":23815,"code":28397,"language":23817,"meta":22,"style":22},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[102,28399,28400,28427,28436],{"__ignoreMap":22},[105,28401,28402,28405,28408,28410,28412,28414,28416,28418,28420,28423,28425],{"class":107,"line":108},[105,28403,28404],{"class":1954},"--user",[105,28406,28407],{"class":115}," $(",[105,28409,28272],{"class":1954},[105,28411,28275],{"class":164},[105,28413,545],{"class":115},[105,28415,975],{"class":220},[105,28417,25084],{"class":115},[105,28419,28272],{"class":1954},[105,28421,28422],{"class":164}," -g",[105,28424,13706],{"class":115},[105,28426,26160],{"class":164},[105,28428,28429,28431,28434],{"class":107,"line":28},[105,28430,28231],{"class":115},[105,28432,28433],{"class":220},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[105,28435,24663],{"class":164},[105,28437,28438,28440,28443],{"class":107,"line":1171},[105,28439,28231],{"class":115},[105,28441,28442],{"class":220},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[105,28444,24663],{"class":164},[5118,28446,28447],{},"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":28,"depth":28,"links":28449},[28450,28451,28452],{"id":27448,"depth":1171,"text":27449},{"id":27458,"depth":1171,"text":27459},{"id":27869,"depth":1171,"text":27872},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27440,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28459,"title":28460,"body":28461,"description":22,"extension":30,"meta":30084,"navigation":32,"path":30085,"seo":30086,"stem":30087,"__hash__":30088},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28462,"toc":30079},[28463,28466,28470,28473,28695,28699,28703,28706,28812,28817,28820,28825,28828,28833,28836,28841,28844,28856,28859,28864,28871,28899,28906,28982,28987,28990,29013,29015,29090,29095,29098,29102,29110,29115,29120,29124,29135,29141,29144,29147,29171,29174,29177,29205,29208,29211,29676,29679,29684,29689,29693,29716,29721,29725,29729,29732,29735,29738,29765,29768,29771,29789,29792,29795,29817,29825,29830,29835,29839,29842,29845,29848,29851,29896,29899,29917,29920,29925,29928,29949,29952,30008,30011,30016,30020,30023,30030,30033,30036,30041,30044,30060,30063,30076],[10,28464,28460],{"id":28465},"_6手动创建docker镜像",[76,28467,28469],{"id":28468},"_61dockerfile","6.1.DockerFile",[14,28471,28472],{},"常用命令：",[253,28474,28475,28486],{},[256,28476,28477],{},[259,28478,28479,28482,28484],{},[262,28480,28481],{"align":23729},"指令",[262,28483,25854],{"align":23729},[262,28485,27477],{"align":23729},[300,28487,28488,28498,28514,28525,28536,28547,28558,28569,28580,28594,28608,28619,28633,28644,28655,28669,28684],{},[259,28489,28490,28492,28495],{},[305,28491,27355],{"align":23729},[305,28493,28494],{"align":23729},"指定基础镜像，是 Dockerfile 的起点",[305,28496,28497],{"align":23729},"FROM ubuntu:22.04",[259,28499,28500,28503,28506],{},[305,28501,28502],{"align":23729},"LABEL",[305,28504,28505],{"align":23729},"添加元数据（如作者、版本等）",[305,28507,28508,28509,28513],{"align":23729},"LABEL maintainer=”",[354,28510,28512],{"href":28511},"mailto:you@example.com","you@example.com","”",[259,28515,28516,28519,28522],{},[305,28517,28518],{"align":23729},"ENV",[305,28520,28521],{"align":23729},"设置环境变量",[305,28523,28524],{"align":23729},"ENV PORT=8080",[259,28526,28527,28530,28533],{},[305,28528,28529],{"align":23729},"ARG",[305,28531,28532],{"align":23729},"构建参数，只在构建期间可用",[305,28534,28535],{"align":23729},"ARG VERSION=1.0",[259,28537,28538,28541,28544],{},[305,28539,28540],{"align":23729},"RUN",[305,28542,28543],{"align":23729},"构建镜像时运行命令",[305,28545,28546],{"align":23729},"RUN apt-get update && apt-get install -y curl",[259,28548,28549,28552,28555],{},[305,28550,28551],{"align":23729},"COPY",[305,28553,28554],{"align":23729},"复制文件到镜像中",[305,28556,28557],{"align":23729},"COPY . \u002Fapp",[259,28559,28560,28563,28566],{},[305,28561,28562],{"align":23729},"ADD",[305,28564,28565],{"align":23729},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[305,28567,28568],{"align":23729},"ADD archive.tar.gz \u002Fdata\u002F",[259,28570,28571,28574,28577],{},[305,28572,28573],{"align":23729},"WORKDIR",[305,28575,28576],{"align":23729},"设置工作目录",[305,28578,28579],{"align":23729},"WORKDIR \u002Fopt",[259,28581,28582,28585,28588],{},[305,28583,28584],{"align":23729},"CMD",[305,28586,28587],{"align":23729},"设置容器启动时默认命令（可被 docker run 覆盖）",[305,28589,28590,28591],{"align":23729},"CMD ",[105,28592,28593],{},"“node”, “index.js”",[259,28595,28596,28599,28602],{},[305,28597,28598],{"align":23729},"ENTRYPOINT",[305,28600,28601],{"align":23729},"设置容器启动时固定命令（通常用于 CLI 工具等）",[305,28603,28604,28605],{"align":23729},"ENTRYPOINT ",[105,28606,28607],{},"“python3”",[259,28609,28610,28613,28616],{},[305,28611,28612],{"align":23729},"EXPOSE",[305,28614,28615],{"align":23729},"声明镜像内服务监听的端口（不会自动映射）",[305,28617,28618],{"align":23729},"EXPOSE 80",[259,28620,28621,28624,28627],{},[305,28622,28623],{"align":23729},"VOLUME",[305,28625,28626],{"align":23729},"声明数据卷挂载点",[305,28628,28629,28630],{"align":23729},"VOLUME ",[105,28631,28632],{},"“\u002Fdata”",[259,28634,28635,28638,28641],{},[305,28636,28637],{"align":23729},"USER",[305,28639,28640],{"align":23729},"设置后续命令执行的用户",[305,28642,28643],{"align":23729},"USER appuser",[259,28645,28646,28649,28652],{},[305,28647,28648],{"align":23729},"ONBUILD",[305,28650,28651],{"align":23729},"当镜像作为其他镜像基础镜像时触发的构建指令",[305,28653,28654],{"align":23729},"ONBUILD COPY . \u002Fsrc",[259,28656,28657,28660,28663],{},[305,28658,28659],{"align":23729},"SHELL",[305,28661,28662],{"align":23729},"更改默认 shell，比如将 sh -c 改为 bash -c",[305,28664,28665,28666],{"align":23729},"SHELL ",[105,28667,28668],{},"“\u002Fbin\u002Fbash”, “-c”",[259,28670,28671,28674,28677],{},[305,28672,28673],{"align":23729},"HEALTHCHECK",[305,28675,28676],{"align":23729},"定义容器运行时的健康检查命令",[305,28678,28679,28680],{"align":23729},"`HEALTHCHECK CMD curl –fail ",[354,28681,28682],{"href":28682,"rel":28683},"http:\u002F\u002Flocalhost:8080",[23858],[259,28685,28686,28689,28692],{},[305,28687,28688],{"align":23729},"STOPSIGNAL",[305,28690,28691],{"align":23729},"容器停止时发送的信号",[305,28693,28694],{"align":23729},"STOPSIGNAL SIGKILL",[76,28696,28698],{"id":28697},"_62自己创建容器","6.2.自己创建容器",[21990,28700,28702],{"id":28701},"_621手动创建","6.2.1.手动创建",[14,28704,28705],{},"在x86电脑上编译x86的：",[96,28707,28709],{"className":23815,"code":28708,"language":23817,"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",[102,28710,28711,28727,28731,28744,28748,28761,28765,28778,28782,28795,28799],{"__ignoreMap":22},[105,28712,28713,28715,28718,28721,28724],{"class":107,"line":108},[105,28714,26538],{"class":1954},[105,28716,28717],{"class":220}," build",[105,28719,28720],{"class":164}," -t",[105,28722,28723],{"class":220}," ros-melodic-cuda118-cudnn8-bionic:latest",[105,28725,28726],{"class":220}," .\n",[105,28728,28729],{"class":107,"line":28},[105,28730,2391],{"emptyLinePlaceholder":32},[105,28732,28733,28735,28737,28739,28742],{"class":107,"line":1171},[105,28734,26538],{"class":1954},[105,28736,28717],{"class":220},[105,28738,28720],{"class":164},[105,28740,28741],{"class":220}," ros-noetic-focal:latest",[105,28743,28726],{"class":220},[105,28745,28746],{"class":107,"line":1186},[105,28747,2391],{"emptyLinePlaceholder":32},[105,28749,28750,28752,28754,28756,28759],{"class":107,"line":1192},[105,28751,26538],{"class":1954},[105,28753,28717],{"class":220},[105,28755,28720],{"class":164},[105,28757,28758],{"class":220}," ros-humble-jammy:latest",[105,28760,28726],{"class":220},[105,28762,28763],{"class":107,"line":1206},[105,28764,2391],{"emptyLinePlaceholder":32},[105,28766,28767,28769,28771,28773,28776],{"class":107,"line":1212},[105,28768,26538],{"class":1954},[105,28770,28717],{"class":220},[105,28772,28720],{"class":164},[105,28774,28775],{"class":220}," ros-jazzy-noble:latest",[105,28777,28726],{"class":220},[105,28779,28780],{"class":107,"line":1303},[105,28781,2391],{"emptyLinePlaceholder":32},[105,28783,28784,28786,28788,28790,28793],{"class":107,"line":1309},[105,28785,26538],{"class":1954},[105,28787,28717],{"class":220},[105,28789,28720],{"class":164},[105,28791,28792],{"class":220}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[105,28794,28726],{"class":220},[105,28796,28797],{"class":107,"line":1321},[105,28798,2391],{"emptyLinePlaceholder":32},[105,28800,28801,28803,28805,28807,28810],{"class":107,"line":1603},[105,28802,26538],{"class":1954},[105,28804,28717],{"class":220},[105,28806,28720],{"class":164},[105,28808,28809],{"class":220}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[105,28811,28726],{"class":220},[14,28813,28814],{},[20,28815],{"alt":22,"src":28816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28818,28819],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28821,28822],{},[20,28823],{"alt":22,"src":28824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28826,28827],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[59,28829,28830],{},[62,28831,28832],{},"创建 Docker Hub 账户",[14,28834,28835],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[59,28837,28838],{"start":28},[62,28839,28840],{},"登录 Docker Hub",[14,28842,28843],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[96,28845,28847],{"className":23815,"code":28846,"language":23817,"meta":22,"style":22},"docker login\n",[102,28848,28849],{"__ignoreMap":22},[105,28850,28851,28853],{"class":107,"line":108},[105,28852,26538],{"class":1954},[105,28854,28855],{"class":220}," login\n",[14,28857,28858],{},"输入你的 Docker Hub 用户名和密码进行验证。",[59,28860,28861],{},[62,28862,28863],{},"为你的镜像打标签",[14,28865,28866,28867,28870],{},"Docker Hub 使用 ",[102,28868,28869],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[96,28872,28874],{"className":23815,"code":28873,"language":23817,"meta":22,"style":22},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[102,28875,28876],{"__ignoreMap":22},[105,28877,28878,28880,28883,28885,28888,28891,28894,28896],{"class":107,"line":108},[105,28879,26538],{"class":1954},[105,28881,28882],{"class":220}," tag",[105,28884,28775],{"class":220},[105,28886,28887],{"class":111}," \u003C",[105,28889,28890],{"class":220},"你的用户",[105,28892,28893],{"class":115},"名",[105,28895,1076],{"class":111},[105,28897,28898],{"class":220},"\u002Fros-jazzy-noble:latest\n",[14,28900,28901,28902,28905],{},"例如，如果你的 Docker Hub 用户名是 ",[102,28903,28904],{},"tungchiahui","，你应该执行：",[96,28907,28909],{"className":23815,"code":28908,"language":23817,"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",[102,28910,28911,28922,28926,28937,28941,28952,28956,28967,28971],{"__ignoreMap":22},[105,28912,28913,28915,28917,28919],{"class":107,"line":108},[105,28914,26538],{"class":1954},[105,28916,28882],{"class":220},[105,28918,28741],{"class":220},[105,28920,28921],{"class":220}," tungchiahui\u002Fros-noetic-focal:latest\n",[105,28923,28924],{"class":107,"line":28},[105,28925,2391],{"emptyLinePlaceholder":32},[105,28927,28928,28930,28932,28934],{"class":107,"line":1171},[105,28929,26538],{"class":1954},[105,28931,28882],{"class":220},[105,28933,28758],{"class":220},[105,28935,28936],{"class":220}," tungchiahui\u002Fros-humble-jammy:latest\n",[105,28938,28939],{"class":107,"line":1186},[105,28940,2391],{"emptyLinePlaceholder":32},[105,28942,28943,28945,28947,28949],{"class":107,"line":1192},[105,28944,26538],{"class":1954},[105,28946,28882],{"class":220},[105,28948,28775],{"class":220},[105,28950,28951],{"class":220}," tungchiahui\u002Fros-jazzy-noble:latest\n",[105,28953,28954],{"class":107,"line":1206},[105,28955,2391],{"emptyLinePlaceholder":32},[105,28957,28958,28960,28962,28964],{"class":107,"line":1212},[105,28959,26538],{"class":1954},[105,28961,28882],{"class":220},[105,28963,28792],{"class":220},[105,28965,28966],{"class":220}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[105,28968,28969],{"class":107,"line":1303},[105,28970,2391],{"emptyLinePlaceholder":32},[105,28972,28973,28975,28977,28979],{"class":107,"line":1309},[105,28974,26538],{"class":1954},[105,28976,28882],{"class":220},[105,28978,28809],{"class":220},[105,28980,28981],{"class":220}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[59,28983,28984],{"start":28},[62,28985,28986],{},"推送镜像到 Docker Hub",[14,28988,28989],{},"使用以下命令将镜像推送到 Docker Hub：",[96,28991,28993],{"className":23815,"code":28992,"language":23817,"meta":22,"style":22},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[102,28994,28995],{"__ignoreMap":22},[105,28996,28997,28999,29002,29004,29006,29008,29010],{"class":107,"line":108},[105,28998,26538],{"class":1954},[105,29000,29001],{"class":220}," push",[105,29003,28887],{"class":111},[105,29005,28890],{"class":220},[105,29007,28893],{"class":115},[105,29009,1076],{"class":111},[105,29011,29012],{"class":220},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29014,14625],{},[96,29016,29018],{"className":23815,"code":29017,"language":23817,"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",[102,29019,29020,29028,29032,29040,29044,29052,29056,29065,29069,29077,29081],{"__ignoreMap":22},[105,29021,29022,29024,29026],{"class":107,"line":108},[105,29023,26538],{"class":1954},[105,29025,29001],{"class":220},[105,29027,28921],{"class":220},[105,29029,29030],{"class":107,"line":28},[105,29031,2391],{"emptyLinePlaceholder":32},[105,29033,29034,29036,29038],{"class":107,"line":1171},[105,29035,26538],{"class":1954},[105,29037,29001],{"class":220},[105,29039,28936],{"class":220},[105,29041,29042],{"class":107,"line":1186},[105,29043,2391],{"emptyLinePlaceholder":32},[105,29045,29046,29048,29050],{"class":107,"line":1192},[105,29047,26538],{"class":1954},[105,29049,29001],{"class":220},[105,29051,28951],{"class":220},[105,29053,29054],{"class":107,"line":1206},[105,29055,2391],{"emptyLinePlaceholder":32},[105,29057,29058,29060,29062],{"class":107,"line":1212},[105,29059,26538],{"class":1954},[105,29061,29001],{"class":220},[105,29063,29064],{"class":220}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[105,29066,29067],{"class":107,"line":1303},[105,29068,2391],{"emptyLinePlaceholder":32},[105,29070,29071,29073,29075],{"class":107,"line":1309},[105,29072,26538],{"class":1954},[105,29074,29001],{"class":220},[105,29076,28981],{"class":220},[105,29078,29079],{"class":107,"line":1321},[105,29080,2391],{"emptyLinePlaceholder":32},[105,29082,29083,29085,29087],{"class":107,"line":1603},[105,29084,26538],{"class":1954},[105,29086,29001],{"class":220},[105,29088,29089],{"class":220}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[59,29091,29092],{"start":1171},[62,29093,29094],{},"验证推送成功",[14,29096,29097],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29099,29100],{},[265,29101,3775],{},[1123,29103,29104,29107],{},[62,29105,29106],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[62,29108,29109],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29111,29112],{},[20,29113],{"alt":22,"src":29114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29116,29117],{},[20,29118],{"alt":22,"src":29119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21990,29121,29123],{"id":29122},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29125,29126,29127,29130,29131,29134],{},"如果您想在 ",[265,29128,29129],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[265,29132,29133],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29136,29137,29138],{},"1. ",[265,29139,29140],{},"启用 Docker 跨平台构建",[14,29142,29143],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29145,29146],{},"第一步：启用 buildx（只需执行一次）",[96,29148,29150],{"className":23815,"code":29149,"language":23817,"meta":22,"style":22},"docker buildx create --name multiarch_builder --use\n",[102,29151,29152],{"__ignoreMap":22},[105,29153,29154,29156,29159,29162,29165,29168],{"class":107,"line":108},[105,29155,26538],{"class":1954},[105,29157,29158],{"class":220}," buildx",[105,29160,29161],{"class":220}," create",[105,29163,29164],{"class":164}," --name",[105,29166,29167],{"class":220}," multiarch_builder",[105,29169,29170],{"class":164}," --use\n",[14,29172,29173],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29175,29176],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[96,29178,29180],{"className":23815,"code":29179,"language":23817,"meta":22,"style":22},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[102,29181,29182],{"__ignoreMap":22},[105,29183,29184,29186,29188,29190,29193,29196,29199,29202],{"class":107,"line":108},[105,29185,26538],{"class":1954},[105,29187,27215],{"class":220},[105,29189,27218],{"class":164},[105,29191,29192],{"class":164}," --privileged",[105,29194,29195],{"class":220}," multiarch\u002Fqemu-user-static",[105,29197,29198],{"class":164}," --reset",[105,29200,29201],{"class":164}," -p",[105,29203,29204],{"class":220}," yes\n",[14,29206,29207],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29209,29210],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[96,29212,29214],{"className":23815,"code":29213,"language":23817,"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",[102,29215,29216,29258,29262,29267,29277,29287,29296,29302,29306,29310,29320,29328,29337,29343,29347,29351,29361,29369,29378,29384,29388,29392,29402,29410,29419,29425,29429,29433,29443,29451,29460,29466,29470,29474,29484,29492,29501,29507,29511,29515,29525,29533,29542,29548,29552,29556,29566,29574,29583,29589,29593,29597,29607,29615,29624,29630,29634,29638,29649,29657,29666,29672],{"__ignoreMap":22},[105,29217,29218,29220,29222,29224,29227,29230,29232,29234,29237,29239,29241,29243,29245,29248,29251,29253,29256],{"class":107,"line":108},[105,29219,26538],{"class":1954},[105,29221,29158],{"class":220},[105,29223,28717],{"class":220},[105,29225,29226],{"class":164}," --platform",[105,29228,29229],{"class":220}," linux\u002Famd64,linux\u002Farm64",[105,29231,28720],{"class":164},[105,29233,28887],{"class":111},[105,29235,29236],{"class":220},"你的镜像",[105,29238,28893],{"class":115},[105,29240,1076],{"class":111},[105,29242,975],{"class":220},[105,29244,1026],{"class":111},[105,29246,29247],{"class":220},"标",[105,29249,29250],{"class":115},"签",[105,29252,1076],{"class":111},[105,29254,29255],{"class":164}," --push",[105,29257,28726],{"class":220},[105,29259,29260],{"class":107,"line":28},[105,29261,2391],{"emptyLinePlaceholder":32},[105,29263,29264],{"class":107,"line":1171},[105,29265,29266],{"class":174},"# 例子：\n",[105,29268,29269,29271,29273,29275],{"class":107,"line":1186},[105,29270,26538],{"class":1954},[105,29272,29158],{"class":220},[105,29274,28717],{"class":220},[105,29276,24663],{"class":164},[105,29278,29279,29282,29285],{"class":107,"line":1192},[105,29280,29281],{"class":115},"--platform ",[105,29283,29284],{"class":220},"linux\u002Famd64,linux\u002Farm64",[105,29286,24663],{"class":164},[105,29288,29289,29291,29294],{"class":107,"line":1206},[105,29290,28720],{"class":164},[105,29292,29293],{"class":220}," tungchiahui\u002Fros:noetic-focal",[105,29295,24663],{"class":164},[105,29297,29298,29300],{"class":107,"line":1212},[105,29299,29255],{"class":164},[105,29301,24663],{"class":164},[105,29303,29304],{"class":107,"line":1303},[105,29305,28726],{"class":220},[105,29307,29308],{"class":107,"line":1309},[105,29309,2391],{"emptyLinePlaceholder":32},[105,29311,29312,29314,29316,29318],{"class":107,"line":1321},[105,29313,26538],{"class":1954},[105,29315,29158],{"class":220},[105,29317,28717],{"class":220},[105,29319,24663],{"class":164},[105,29321,29322,29324,29326],{"class":107,"line":1603},[105,29323,29281],{"class":115},[105,29325,29284],{"class":220},[105,29327,24663],{"class":164},[105,29329,29330,29332,29335],{"class":107,"line":1608},[105,29331,28720],{"class":164},[105,29333,29334],{"class":220}," tungchiahui\u002Fros:humble-jammy",[105,29336,24663],{"class":164},[105,29338,29339,29341],{"class":107,"line":1614},[105,29340,29255],{"class":164},[105,29342,24663],{"class":164},[105,29344,29345],{"class":107,"line":1619},[105,29346,28726],{"class":220},[105,29348,29349],{"class":107,"line":1633},[105,29350,2391],{"emptyLinePlaceholder":32},[105,29352,29353,29355,29357,29359],{"class":107,"line":1638},[105,29354,26538],{"class":1954},[105,29356,29158],{"class":220},[105,29358,28717],{"class":220},[105,29360,24663],{"class":164},[105,29362,29363,29365,29367],{"class":107,"line":1644},[105,29364,29281],{"class":115},[105,29366,29284],{"class":220},[105,29368,24663],{"class":164},[105,29370,29371,29373,29376],{"class":107,"line":1665},[105,29372,28720],{"class":164},[105,29374,29375],{"class":220}," tungchiahui\u002Fros:jazzy-noble",[105,29377,24663],{"class":164},[105,29379,29380,29382],{"class":107,"line":1670},[105,29381,29255],{"class":164},[105,29383,24663],{"class":164},[105,29385,29386],{"class":107,"line":1684},[105,29387,28726],{"class":220},[105,29389,29390],{"class":107,"line":1689},[105,29391,2391],{"emptyLinePlaceholder":32},[105,29393,29394,29396,29398,29400],{"class":107,"line":1718},[105,29395,26305],{"class":1954},[105,29397,29158],{"class":220},[105,29399,28717],{"class":220},[105,29401,24663],{"class":164},[105,29403,29404,29406,29408],{"class":107,"line":1723},[105,29405,29281],{"class":115},[105,29407,29284],{"class":220},[105,29409,24663],{"class":164},[105,29411,29412,29414,29417],{"class":107,"line":1740},[105,29413,28720],{"class":164},[105,29415,29416],{"class":220}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[105,29418,24663],{"class":164},[105,29420,29421,29423],{"class":107,"line":1745},[105,29422,29255],{"class":164},[105,29424,24663],{"class":164},[105,29426,29427],{"class":107,"line":1750},[105,29428,28726],{"class":220},[105,29430,29431],{"class":107,"line":1755},[105,29432,2391],{"emptyLinePlaceholder":32},[105,29434,29435,29437,29439,29441],{"class":107,"line":1769},[105,29436,26538],{"class":1954},[105,29438,29158],{"class":220},[105,29440,28717],{"class":220},[105,29442,24663],{"class":164},[105,29444,29445,29447,29449],{"class":107,"line":1774},[105,29446,29281],{"class":115},[105,29448,29284],{"class":220},[105,29450,24663],{"class":164},[105,29452,29453,29455,29458],{"class":107,"line":2568},[105,29454,28720],{"class":164},[105,29456,29457],{"class":220}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[105,29459,24663],{"class":164},[105,29461,29462,29464],{"class":107,"line":2582},[105,29463,29255],{"class":164},[105,29465,24663],{"class":164},[105,29467,29468],{"class":107,"line":2590},[105,29469,28726],{"class":220},[105,29471,29472],{"class":107,"line":2595},[105,29473,2391],{"emptyLinePlaceholder":32},[105,29475,29476,29478,29480,29482],{"class":107,"line":2601},[105,29477,26305],{"class":1954},[105,29479,29158],{"class":220},[105,29481,28717],{"class":220},[105,29483,24663],{"class":164},[105,29485,29486,29488,29490],{"class":107,"line":2607},[105,29487,29281],{"class":115},[105,29489,29284],{"class":220},[105,29491,24663],{"class":164},[105,29493,29494,29496,29499],{"class":107,"line":2612},[105,29495,28720],{"class":164},[105,29497,29498],{"class":220}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[105,29500,24663],{"class":164},[105,29502,29503,29505],{"class":107,"line":7940},[105,29504,29255],{"class":164},[105,29506,24663],{"class":164},[105,29508,29509],{"class":107,"line":7964},[105,29510,28726],{"class":220},[105,29512,29513],{"class":107,"line":7969},[105,29514,2391],{"emptyLinePlaceholder":32},[105,29516,29517,29519,29521,29523],{"class":107,"line":7975},[105,29518,26538],{"class":1954},[105,29520,29158],{"class":220},[105,29522,28717],{"class":220},[105,29524,24663],{"class":164},[105,29526,29527,29529,29531],{"class":107,"line":8002},[105,29528,29281],{"class":115},[105,29530,29284],{"class":220},[105,29532,24663],{"class":164},[105,29534,29535,29537,29540],{"class":107,"line":8007},[105,29536,28720],{"class":164},[105,29538,29539],{"class":220}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[105,29541,24663],{"class":164},[105,29543,29544,29546],{"class":107,"line":8013},[105,29545,29255],{"class":164},[105,29547,24663],{"class":164},[105,29549,29550],{"class":107,"line":8025},[105,29551,28726],{"class":220},[105,29553,29554],{"class":107,"line":8037},[105,29555,2391],{"emptyLinePlaceholder":32},[105,29557,29558,29560,29562,29564],{"class":107,"line":8049},[105,29559,26538],{"class":1954},[105,29561,29158],{"class":220},[105,29563,28717],{"class":220},[105,29565,24663],{"class":164},[105,29567,29568,29570,29572],{"class":107,"line":9708},[105,29569,29281],{"class":115},[105,29571,29284],{"class":220},[105,29573,24663],{"class":164},[105,29575,29576,29578,29581],{"class":107,"line":9733},[105,29577,28720],{"class":164},[105,29579,29580],{"class":220}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[105,29582,24663],{"class":164},[105,29584,29585,29587],{"class":107,"line":9756},[105,29586,29255],{"class":164},[105,29588,24663],{"class":164},[105,29590,29591],{"class":107,"line":9780},[105,29592,28726],{"class":220},[105,29594,29595],{"class":107,"line":9785},[105,29596,2391],{"emptyLinePlaceholder":32},[105,29598,29599,29601,29603,29605],{"class":107,"line":9790},[105,29600,26305],{"class":1954},[105,29602,29158],{"class":220},[105,29604,28717],{"class":220},[105,29606,24663],{"class":164},[105,29608,29609,29611,29613],{"class":107,"line":9795},[105,29610,29281],{"class":115},[105,29612,29284],{"class":220},[105,29614,24663],{"class":164},[105,29616,29617,29619,29622],{"class":107,"line":9804},[105,29618,28720],{"class":164},[105,29620,29621],{"class":220}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[105,29623,24663],{"class":164},[105,29625,29626,29628],{"class":107,"line":9809},[105,29627,29255],{"class":164},[105,29629,24663],{"class":164},[105,29631,29632],{"class":107,"line":9815},[105,29633,28726],{"class":220},[105,29635,29636],{"class":107,"line":9836},[105,29637,2391],{"emptyLinePlaceholder":32},[105,29639,29640,29643,29645,29647],{"class":107,"line":9842},[105,29641,29642],{"class":1954},"  docker",[105,29644,29158],{"class":220},[105,29646,28717],{"class":220},[105,29648,24663],{"class":164},[105,29650,29651,29653,29655],{"class":107,"line":9856},[105,29652,29281],{"class":115},[105,29654,29284],{"class":220},[105,29656,24663],{"class":164},[105,29658,29659,29661,29664],{"class":107,"line":9862},[105,29660,28720],{"class":164},[105,29662,29663],{"class":220}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[105,29665,24663],{"class":164},[105,29667,29668,29670],{"class":107,"line":9889},[105,29669,29255],{"class":164},[105,29671,24663],{"class":164},[105,29673,29674],{"class":107,"line":9898},[105,29675,28726],{"class":220},[14,29677,29678],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29680,29681],{},[20,29682],{"alt":22,"src":29683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29685,29686],{},[20,29687],{"alt":22,"src":29688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21990,29690,29692],{"id":29691},"_623清除构建缓存","6.2.3.清除构建缓存",[96,29694,29696],{"className":23815,"code":29695,"language":23817,"meta":22,"style":22},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[102,29697,29698,29703],{"__ignoreMap":22},[105,29699,29700],{"class":107,"line":108},[105,29701,29702],{"class":174},"# 清理BuildKit构建缓存\n",[105,29704,29705,29707,29710,29713],{"class":107,"line":28},[105,29706,26538],{"class":1954},[105,29708,29709],{"class":220}," builder",[105,29711,29712],{"class":220}," prune",[105,29714,29715],{"class":164}," -f\n",[14,29717,29718],{},[20,29719],{"alt":22,"src":29720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[76,29722,29724],{"id":29723},"_63补充","6.3.补充",[21990,29726,29728],{"id":29727},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29730,29731],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29733,29734],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29736,29737],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[96,29739,29741],{"className":23815,"code":29740,"language":23817,"meta":22,"style":22},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[102,29742,29743,29750],{"__ignoreMap":22},[105,29744,29745,29747],{"class":107,"line":108},[105,29746,27355],{"class":1954},[105,29748,29749],{"class":220}," nginx\n",[105,29751,29752,29754,29757,29760,29762],{"class":107,"line":28},[105,29753,28540],{"class":1954},[105,29755,29756],{"class":220}," echo",[105,29758,29759],{"class":220}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[105,29761,26207],{"class":111},[105,29763,29764],{"class":220}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29766,29767],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29769,29770],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[96,29772,29774],{"className":23815,"code":29773,"language":23817,"meta":22,"style":22},"docker build -t nginx:tuling .\n",[102,29775,29776],{"__ignoreMap":22},[105,29777,29778,29780,29782,29784,29787],{"class":107,"line":108},[105,29779,26538],{"class":1954},[105,29781,28717],{"class":220},[105,29783,28720],{"class":164},[105,29785,29786],{"class":220}," nginx:tuling",[105,29788,28726],{"class":220},[14,29790,29791],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29793,29794],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[96,29796,29798],{"className":23815,"code":29797,"language":23817,"meta":22,"style":22},"docker run -d -p 92:80 nginx:tuling\n",[102,29799,29800],{"__ignoreMap":22},[105,29801,29802,29804,29806,29809,29811,29814],{"class":107,"line":108},[105,29803,26538],{"class":1954},[105,29805,27215],{"class":220},[105,29807,29808],{"class":164}," -d",[105,29810,29201],{"class":164},[105,29812,29813],{"class":220}," 92:80",[105,29815,29816],{"class":220}," nginx:tuling\n",[14,29818,29819,29820],{},"4、访问 ",[354,29821,29824],{"href":29822,"rel":29823},"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",[23858],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29826,29827],{},[20,29828],{"alt":22,"src":29829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29831,29832],{},[20,29833],{"alt":22,"src":29834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21990,29836,29838],{"id":29837},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29840,29841],{},"只需要知道大体流程即可",[14,29843,29844],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29846,29847],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29849,29850],{},"2、在Dockerfile中添加以下内容",[96,29852,29854],{"className":26076,"code":29853,"language":26078,"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",[102,29855,29856,29861,29866,29871,29876,29881,29886,29891],{"__ignoreMap":22},[105,29857,29858],{"class":107,"line":108},[105,29859,29860],{},"# 基于哪个镜像\n",[105,29862,29863],{"class":107,"line":28},[105,29864,29865],{},"From java:8\n",[105,29867,29868],{"class":107,"line":1171},[105,29869,29870],{},"# 复制文件到容器\n",[105,29872,29873],{"class":107,"line":1186},[105,29874,29875],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[105,29877,29878],{"class":107,"line":1192},[105,29879,29880],{},"# 声明需要暴露的端口\n",[105,29882,29883],{"class":107,"line":1206},[105,29884,29885],{},"EXPOSE 8877\n",[105,29887,29888],{"class":107,"line":1212},[105,29889,29890],{},"# 配置容器启动后执行的命令\n",[105,29892,29893],{"class":107,"line":1303},[105,29894,29895],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29897,29898],{},"3、使用docker build命令构建镜像",[96,29900,29902],{"className":23815,"code":29901,"language":23817,"meta":22,"style":22},"docker build -t tulingmall-member:0.0.5 .\n",[102,29903,29904],{"__ignoreMap":22},[105,29905,29906,29908,29910,29912,29915],{"class":107,"line":108},[105,29907,26538],{"class":1954},[105,29909,28717],{"class":220},[105,29911,28720],{"class":164},[105,29913,29914],{"class":220}," tulingmall-member:0.0.5",[105,29916,28726],{"class":220},[14,29918,29919],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,29921,29922],{},[20,29923],{"alt":22,"src":29924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,29926,29927],{},"4、启动镜像，加-d可在后台启动",[96,29929,29931],{"className":23815,"code":29930,"language":23817,"meta":22,"style":22},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[102,29932,29933],{"__ignoreMap":22},[105,29934,29935,29937,29939,29941,29943,29946],{"class":107,"line":108},[105,29936,26538],{"class":1954},[105,29938,27215],{"class":220},[105,29940,29808],{"class":164},[105,29942,29201],{"class":164},[105,29944,29945],{"class":220}," 8877:8877",[105,29947,29948],{"class":220}," tulingmall-member:0.0.5\n",[14,29950,29951],{},"加上JVM参数：",[96,29953,29955],{"className":23815,"code":29954,"language":23817,"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",[102,29956,29957,29962,29977,29987,29996,30003],{"__ignoreMap":22},[105,29958,29959],{"class":107,"line":108},[105,29960,29961],{"class":174},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[105,29963,29964,29966,29968,29971,29973,29975],{"class":107,"line":28},[105,29965,26538],{"class":1954},[105,29967,27215],{"class":220},[105,29969,29970],{"class":164},"  -d",[105,29972,29201],{"class":164},[105,29974,29945],{"class":220},[105,29976,24663],{"class":164},[105,29978,29979,29981,29984],{"class":107,"line":1171},[105,29980,28113],{"class":115},[105,29982,29983],{"class":220},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[105,29985,29986],{"class":164},"  \\\n",[105,29988,29989,29991,29994],{"class":107,"line":1186},[105,29990,28113],{"class":115},[105,29992,29993],{"class":220},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[105,29995,29986],{"class":164},[105,29997,29998,30001],{"class":107,"line":1192},[105,29999,30000],{"class":115},"--cap-add=SYS_PTRACE  ",[105,30002,26160],{"class":164},[105,30004,30005],{"class":107,"line":1206},[105,30006,30007],{"class":115},"tulingmall-member:0.0.5\n",[14,30009,30010],{},"5、访问会员服务接口",[14,30012,30013],{},[20,30014],{"alt":22,"src":30015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21990,30017,30019],{"id":30018},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30021,30022],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30024,30025,30026],{},"阿里云docker镜像仓库：",[354,30027,30028],{"href":30028,"rel":30029},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23858],[14,30031,30032],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30034,30035],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30037,30038],{},[20,30039],{"alt":22,"src":30040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30042,30043],{},"要把镜像推送到镜像仓库",[96,30045,30047],{"className":23815,"code":30046,"language":23817,"meta":22,"style":22},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[102,30048,30049],{"__ignoreMap":22},[105,30050,30051,30053,30055,30057],{"class":107,"line":108},[105,30052,26538],{"class":1954},[105,30054,28882],{"class":220},[105,30056,29914],{"class":220},[105,30058,30059],{"class":220}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30061,30062],{},"最后将镜像推送到远程仓库",[96,30064,30066],{"className":23815,"code":30065,"language":23817,"meta":22,"style":22},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[102,30067,30068],{"__ignoreMap":22},[105,30069,30070,30072,30074],{"class":107,"line":108},[105,30071,26538],{"class":1954},[105,30073,29001],{"class":220},[105,30075,30059],{"class":220},[5118,30077,30078],{},"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":28,"depth":28,"links":30080},[30081,30082,30083],{"id":28468,"depth":1171,"text":28469},{"id":28697,"depth":1171,"text":28698},{"id":29723,"depth":1171,"text":29724},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28460,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30090,"title":30091,"body":30092,"description":22,"extension":30,"meta":30235,"navigation":32,"path":30236,"seo":30237,"stem":30238,"__hash__":30239},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30093,"toc":30233},[30094,30097,30102,30107,30110,30115,30120,30123,30128,30133,30136,30141,30144,30147,30150,30153,30156,30159,30179,30201,30204,30207,30227,30230],[10,30095,30091],{"id":30096},"_7vscode远程开发",[59,30098,30099],{},[62,30100,30101],{},"插件1：微软Docker工具",[14,30103,30104],{},[20,30105],{"alt":22,"src":30106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30108,30109],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30111,30112],{},[20,30113],{"alt":22,"src":30114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[59,30116,30117],{"start":28},[62,30118,30119],{},"插件2：微软Docker远程开发工具",[14,30121,30122],{},"下面这是远程开发的插件。",[14,30124,30125],{},[20,30126],{"alt":22,"src":30127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30129,30130],{},[20,30131],{"alt":22,"src":30132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30134,30135],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30137,30138],{},[20,30139],{"alt":22,"src":30140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30142,30143],{},"安装完拓展之后，vscode进行链接：",[14,30145,30146],{},"1.按ctrl+shift+p",[14,30148,30149],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30151,30152],{},"3.选择目前运行的容器",[14,30154,30155],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30157,30158],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[96,30160,30162],{"className":23815,"code":30161,"language":23817,"meta":22,"style":22},"docker run -v 主机目录:容器目录 image-name\n",[102,30163,30164],{"__ignoreMap":22},[105,30165,30166,30168,30170,30173,30176],{"class":107,"line":108},[105,30167,26538],{"class":1954},[105,30169,27215],{"class":220},[105,30171,30172],{"class":164}," -v",[105,30174,30175],{"class":220}," 主机目录:容器目录",[105,30177,30178],{"class":220}," image-name\n",[96,30180,30182],{"className":23815,"code":30181,"language":23817,"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",[102,30183,30184],{"__ignoreMap":22},[105,30185,30186,30188,30190,30193,30195,30198],{"class":107,"line":108},[105,30187,26538],{"class":1954},[105,30189,27215],{"class":220},[105,30191,30192],{"class":164}," -it",[105,30194,30172],{"class":164},[105,30196,30197],{"class":220}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[105,30199,30200],{"class":220}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30202,30203],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30205,30206],{},"查看挂载情况：",[96,30208,30210],{"className":23815,"code":30209,"language":23817,"meta":22,"style":22},"mount | grep -i project\n",[102,30211,30212],{"__ignoreMap":22},[105,30213,30214,30217,30219,30222,30224],{"class":107,"line":108},[105,30215,30216],{"class":1954},"mount",[105,30218,25094],{"class":111},[105,30220,30221],{"class":1954}," grep",[105,30223,26415],{"class":164},[105,30225,30226],{"class":220}," project\n",[14,30228,30229],{},"也可以通过ls来进行查看",[5118,30231,30232],{},"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":28,"depth":28,"links":30234},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30091,"description":22},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30241,"title":30242,"body":30243,"description":23369,"extension":30,"meta":30247,"navigation":32,"path":30249,"seo":30250,"stem":30251,"__hash__":30252},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30244,"toc":30245},[],{"title":22,"searchDepth":28,"depth":28,"links":30246},[],{"category":30248},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30242,"description":23369},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30254,"title":30255,"body":30256,"description":23369,"extension":30,"meta":30260,"navigation":32,"path":30261,"seo":30262,"stem":30263,"__hash__":30264},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30257,"toc":30258},[],{"title":22,"searchDepth":28,"depth":28,"links":30259},[],{"category":30248},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30255,"description":23369},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30266,"title":30267,"body":30268,"description":23369,"extension":30,"meta":30561,"navigation":32,"path":30562,"seo":30563,"stem":30564,"__hash__":30565},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30269,"toc":30559},[30270,30273,30281,30296,30301,30352,30355,30361,30548,30553,30556],[10,30271,30267],{"id":30272},"_1验证深度学习环境",[14,30274,30275,30276],{},"关于环境的安装，看",[354,30277,30280],{"href":30278,"rel":30279},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23858],"Pytorch-->深度学习",[14,30282,30283,30284,30287,30288,30291,30292,30295],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[102,30285,30286],{},"pytorch-cuda=12.4"," 是一个“ ",[265,30289,30290],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[265,30293,30294],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30297,30298],{},[20,30299],{"alt":22,"src":30300},"\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",[96,30302,30304],{"className":23815,"code":30303,"language":23817,"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",[102,30305,30306,30311],{"__ignoreMap":22},[105,30307,30308],{"class":107,"line":108},[105,30309,30310],{"class":174},"# CUDA 12.4\n",[105,30312,30313,30316,30318,30321,30324,30327,30330,30333,30335,30338,30341,30344,30347,30349],{"class":107,"line":28},[105,30314,30315],{"class":1954},"conda",[105,30317,23827],{"class":220},[105,30319,30320],{"class":220}," pytorch==",[105,30322,30323],{"class":164},"2.5.1",[105,30325,30326],{"class":220}," torchvision==",[105,30328,30329],{"class":164},"0.20.1",[105,30331,30332],{"class":220}," torchaudio==",[105,30334,30323],{"class":164},[105,30336,30337],{"class":220}," pytorch-cuda=",[105,30339,30340],{"class":164},"12.4",[105,30342,30343],{"class":164}," -c",[105,30345,30346],{"class":220}," pytorch",[105,30348,30343],{"class":164},[105,30350,30351],{"class":220}," nvidia\n",[14,30353,30354],{},"）：",[14,30356,30357],{},[354,30358,30359],{"href":30359,"rel":30360},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23858],[96,30362,30366],{"className":30363,"code":30364,"language":30365,"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",[102,30367,30368,30373,30381,30386,30396,30412,30417,30427,30464,30471,30483,30499,30504,30514,30526,30536],{"__ignoreMap":22},[105,30369,30370],{"class":107,"line":108},[105,30371,30372],{"class":174},"# 对深度学习环境进行测试\n",[105,30374,30375,30378],{"class":107,"line":28},[105,30376,30377],{"class":111},"import",[105,30379,30380],{"class":115}," torch\n",[105,30382,30383],{"class":107,"line":1171},[105,30384,30385],{"class":174},"# 查看cuda是否被激活\n",[105,30387,30388,30391,30393],{"class":107,"line":1186},[105,30389,30390],{"class":115},"flag",[105,30392,161],{"class":111},[105,30394,30395],{"class":115},"torch.cuda.is_available()\n",[105,30397,30398,30401,30403,30406,30409],{"class":107,"line":1192},[105,30399,30400],{"class":164},"print",[105,30402,116],{"class":115},[105,30404,30405],{"class":220},"\"cuda:\"",[105,30407,30408],{"class":115},", flag)   ",[105,30410,30411],{"class":174},"#返回true的话说明被激活\n",[105,30413,30414],{"class":107,"line":1206},[105,30415,30416],{"class":174},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[105,30418,30419,30422,30424],{"class":107,"line":1212},[105,30420,30421],{"class":115},"ngpu",[105,30423,161],{"class":111},[105,30425,30426],{"class":164},"1\n",[105,30428,30429,30432,30434,30437,30440,30442,30445,30448,30451,30453,30455,30457,30459,30462],{"class":107,"line":1303},[105,30430,30431],{"class":115},"device",[105,30433,161],{"class":111},[105,30435,30436],{"class":115},"torch.device(",[105,30438,30439],{"class":220},"\"cuda:0\"",[105,30441,1695],{"class":111},[105,30443,30444],{"class":115},"(torch.cuda.is_available() ",[105,30446,30447],{"class":111},"and",[105,30449,30450],{"class":115}," ngpu",[105,30452,1076],{"class":111},[105,30454,307],{"class":164},[105,30456,13706],{"class":115},[105,30458,1692],{"class":111},[105,30460,30461],{"class":220}," \"cpu\"",[105,30463,122],{"class":115},[105,30465,30466,30468],{"class":107,"line":1309},[105,30467,30400],{"class":164},[105,30469,30470],{"class":115},"(device)\n",[105,30472,30473,30475,30478,30480],{"class":107,"line":1321},[105,30474,30400],{"class":164},[105,30476,30477],{"class":115},"(torch.cuda.get_device_name(",[105,30479,307],{"class":164},[105,30481,30482],{"class":115},"))\n",[105,30484,30485,30487,30490,30492,30494,30496],{"class":107,"line":1603},[105,30486,30400],{"class":164},[105,30488,30489],{"class":115},"(torch.rand(",[105,30491,187],{"class":164},[105,30493,494],{"class":115},[105,30495,187],{"class":164},[105,30497,30498],{"class":115},").cuda())\n",[105,30500,30501],{"class":107,"line":1608},[105,30502,30503],{"class":174},"# 查看cuda和cudnn的版本\n",[105,30505,30506,30509,30511],{"class":107,"line":1614},[105,30507,30508],{"class":115},"cuda_version",[105,30510,161],{"class":111},[105,30512,30513],{"class":115},"torch.version.cuda\n",[105,30515,30516,30518,30520,30523],{"class":107,"line":1619},[105,30517,30400],{"class":164},[105,30519,116],{"class":115},[105,30521,30522],{"class":220},"\"cuda version\"",[105,30524,30525],{"class":115},",cuda_version)\n",[105,30527,30528,30531,30533],{"class":107,"line":1633},[105,30529,30530],{"class":115},"cudnn_version",[105,30532,161],{"class":111},[105,30534,30535],{"class":115},"torch.backends.cudnn.version()\n",[105,30537,30538,30540,30542,30545],{"class":107,"line":1638},[105,30539,30400],{"class":164},[105,30541,116],{"class":115},[105,30543,30544],{"class":220},"\"cudnn version\"",[105,30546,30547],{"class":115},",cudnn_version)\n",[14,30549,30550],{},[20,30551],{"alt":22,"src":30552},"\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,30554,30555],{},"cuda:0 指的是一块显卡",[5118,30557,30558],{},"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":28,"depth":28,"links":30560},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30267,"description":23369},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30567,"title":30568,"body":30569,"description":23369,"extension":30,"meta":50373,"navigation":32,"path":50374,"seo":50375,"stem":50376,"__hash__":50377},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30570,"toc":50367},[30571,30574,30578,30582,30585,30590,30595,30598,30603,30608,30613,30616,30620,30625,30629,30634,30637,30642,30645,30648,30651,30654,30659,30662,30667,30672,30677,30682,30685,30689,30692,30697,31301,31306,31309,31314,31317,31320,31784,31787,31790,31793,31796,33847,33850,33855,33860,34655,34658,34663,35441,35445,37104,37108,37822,37826,37830,37835,37840,37845,37848,37853,37858,37863,37868,37873,37877,37882,39164,39169,39172,39175,39178,39333,39336,39339,40555,40560,41255,41259,41263,41268,41273,41276,41281,41286,41291,41296,41301,41306,41311,41316,41321,41326,41331,41336,41341,41346,41351,41356,41361,41366,41371,41376,41381,41386,41391,41396,41401,41406,41411,41416,41421,41426,41430,41434,41437,42915,42919,44566,44570,45264,45268,45271,45274,45818,45821,45825,45828,47225,47229,47232,47810,49597,49601,49604,50364],[10,30572,30568],{"id":30573},"_2经典神经网络",[76,30575,30577],{"id":30576},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21990,30579,30581],{"id":30580},"_211原理介绍","2.1.1.原理介绍",[14,30583,30584],{},"LeNet-5",[59,30586,30587],{},[62,30588,30589],{},"原理",[14,30591,30592],{},[20,30593],{"alt":22,"src":30594},"\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,30596,30597],{},"B是batch批次；C是channel通道",[59,30599,30600],{"start":28},[62,30601,30602],{},"网络参数详细",[14,30604,30605],{},[20,30606],{"alt":22,"src":30607},"\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,30609,30610],{},[20,30611],{"alt":22,"src":30612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,30614,30615],{},"AlexNet",[59,30617,30618],{},[62,30619,30589],{},[14,30621,30622],{},[20,30623],{"alt":22,"src":30624},"\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",[59,30626,30627],{"start":28},[62,30628,30602],{},[14,30630,30631],{},[20,30632],{"alt":22,"src":30633},"\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,30635,30636],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30638,30639],{},[20,30640],{"alt":22,"src":30641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,30643,30644],{},"数据处理中的图像增强操作:",[14,30646,30647],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30649,30650],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30652,30653],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30655,30656],{},[20,30657],{"alt":22,"src":30658},"\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,30660,30661],{},"提升网络精确度的方法：LRN正则化",[14,30663,30664],{},[20,30665],{"alt":22,"src":30666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[14,30668,30669],{},[20,30670],{"alt":22,"src":30671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[59,30673,30674],{"start":1171},[62,30675,30676],{},"AlexNet的总结",[14,30678,30679],{},[20,30680],{"alt":22,"src":30681},"\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,30683,30684],{},"比LeNet模型要深一丢丢",[21990,30686,30688],{"id":30687},"_212代码实现","2.1.2.代码实现",[14,30690,30691],{},"（1）LeNet",[59,30693,30694],{},[62,30695,30696],{},"模型搭建",[96,30698,30700],{"className":30363,"code":30699,"language":30365,"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",[102,30701,30702,30707,30713,30718,30731,30736,30748,30752,30772,30777,30782,30793,30798,30817,30821,30826,30875,30887,30892,30921,30956,30983,30988,31000,31005,31025,31044,31063,31067,31072,31082,31099,31110,31125,31136,31147,31162,31177,31188,31195,31199,31213,31218,31241,31246,31251,31256,31260,31265,31270,31280],{"__ignoreMap":22},[105,30703,30704],{"class":107,"line":108},[105,30705,30706],{"class":174},"# 导入库\n",[105,30708,30709,30711],{"class":107,"line":28},[105,30710,30377],{"class":111},[105,30712,30380],{"class":115},[105,30714,30715],{"class":107,"line":1171},[105,30716,30717],{"class":174},"# 导入神经网络层\n",[105,30719,30720,30723,30726,30728],{"class":107,"line":1186},[105,30721,30722],{"class":111},"from",[105,30724,30725],{"class":115}," torch ",[105,30727,30377],{"class":111},[105,30729,30730],{"class":115}," nn\n",[105,30732,30733],{"class":107,"line":1192},[105,30734,30735],{"class":174},"# 导入展示神经网络参数的包\n",[105,30737,30738,30740,30743,30745],{"class":107,"line":1206},[105,30739,30722],{"class":111},[105,30741,30742],{"class":115}," torchsummary ",[105,30744,30377],{"class":111},[105,30746,30747],{"class":115}," summary\n",[105,30749,30750],{"class":107,"line":1212},[105,30751,2391],{"emptyLinePlaceholder":32},[105,30753,30754,30756,30759,30761,30764,30766,30769],{"class":107,"line":1303},[105,30755,14686],{"class":111},[105,30757,30758],{"class":1954}," LeNet",[105,30760,116],{"class":115},[105,30762,30763],{"class":1954},"nn",[105,30765,674],{"class":115},[105,30767,30768],{"class":1954},"Module",[105,30770,30771],{"class":115},"):\n",[105,30773,30774],{"class":107,"line":1309},[105,30775,30776],{"class":174},"    # 模型初始化:\n",[105,30778,30779],{"class":107,"line":1321},[105,30780,30781],{"class":174},"    # 定义一些网络层和激活函数\n",[105,30783,30784,30787,30790],{"class":107,"line":1603},[105,30785,30786],{"class":111},"    def",[105,30788,30789],{"class":164}," __init__",[105,30791,30792],{"class":115},"(self):\n",[105,30794,30795],{"class":107,"line":1608},[105,30796,30797],{"class":174},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[105,30799,30800,30803,30806,30809,30812,30815],{"class":107,"line":1614},[105,30801,30802],{"class":164},"        super",[105,30804,30805],{"class":115},"(LeNet,",[105,30807,30808],{"class":164},"self",[105,30810,30811],{"class":115},").",[105,30813,30814],{"class":164},"__init__",[105,30816,1967],{"class":115},[105,30818,30819],{"class":107,"line":1619},[105,30820,2391],{"emptyLinePlaceholder":32},[105,30822,30823],{"class":107,"line":1633},[105,30824,30825],{"class":174},"        # 定义网络层\n",[105,30827,30828,30831,30834,30836,30839,30842,30844,30846,30848,30851,30853,30855,30857,30860,30862,30864,30866,30869,30871,30873],{"class":107,"line":1638},[105,30829,30830],{"class":164},"        self",[105,30832,30833],{"class":115},".c1",[105,30835,161],{"class":111},[105,30837,30838],{"class":115},"nn.Conv2d(",[105,30840,30841],{"class":5208},"in_channels",[105,30843,161],{"class":111},[105,30845,333],{"class":164},[105,30847,494],{"class":115},[105,30849,30850],{"class":5208},"out_channels",[105,30852,161],{"class":111},[105,30854,460],{"class":164},[105,30856,494],{"class":115},[105,30858,30859],{"class":5208},"kernel_size",[105,30861,161],{"class":111},[105,30863,435],{"class":164},[105,30865,494],{"class":115},[105,30867,30868],{"class":5208},"padding",[105,30870,161],{"class":111},[105,30872,193],{"class":164},[105,30874,122],{"class":115},[105,30876,30877,30879,30882,30884],{"class":107,"line":1644},[105,30878,30830],{"class":164},[105,30880,30881],{"class":115},".sig",[105,30883,161],{"class":111},[105,30885,30886],{"class":115},"nn.Sigmoid()\n",[105,30888,30889],{"class":107,"line":1665},[105,30890,30891],{"class":174},"        # 定义池化\n",[105,30893,30894,30896,30899,30901,30904,30906,30908,30910,30912,30915,30917,30919],{"class":107,"line":1670},[105,30895,30830],{"class":164},[105,30897,30898],{"class":115},".s2",[105,30900,161],{"class":111},[105,30902,30903],{"class":115},"nn.AvgPool2d(",[105,30905,30859],{"class":5208},[105,30907,161],{"class":111},[105,30909,193],{"class":164},[105,30911,494],{"class":115},[105,30913,30914],{"class":5208},"stride",[105,30916,161],{"class":111},[105,30918,193],{"class":164},[105,30920,122],{"class":115},[105,30922,30923,30925,30928,30930,30932,30934,30936,30938,30940,30942,30944,30946,30948,30950,30952,30954],{"class":107,"line":1684},[105,30924,30830],{"class":164},[105,30926,30927],{"class":115},".c3",[105,30929,161],{"class":111},[105,30931,30838],{"class":115},[105,30933,30841],{"class":5208},[105,30935,161],{"class":111},[105,30937,460],{"class":164},[105,30939,494],{"class":115},[105,30941,30850],{"class":5208},[105,30943,161],{"class":111},[105,30945,717],{"class":164},[105,30947,494],{"class":115},[105,30949,30859],{"class":5208},[105,30951,161],{"class":111},[105,30953,435],{"class":164},[105,30955,122],{"class":115},[105,30957,30958,30960,30963,30965,30967,30969,30971,30973,30975,30977,30979,30981],{"class":107,"line":1689},[105,30959,30830],{"class":164},[105,30961,30962],{"class":115},".s4",[105,30964,161],{"class":111},[105,30966,30903],{"class":115},[105,30968,30859],{"class":5208},[105,30970,161],{"class":111},[105,30972,193],{"class":164},[105,30974,494],{"class":115},[105,30976,30914],{"class":5208},[105,30978,161],{"class":111},[105,30980,193],{"class":164},[105,30982,122],{"class":115},[105,30984,30985],{"class":107,"line":1718},[105,30986,30987],{"class":174},"        # 定义平展层\n",[105,30989,30990,30992,30995,30997],{"class":107,"line":1723},[105,30991,30830],{"class":164},[105,30993,30994],{"class":115},".flatten",[105,30996,161],{"class":111},[105,30998,30999],{"class":115},"nn.Flatten()\n",[105,31001,31002],{"class":107,"line":1740},[105,31003,31004],{"class":174},"        # 定义全连接层\n",[105,31006,31007,31009,31012,31014,31017,31019,31021,31023],{"class":107,"line":1745},[105,31008,30830],{"class":164},[105,31010,31011],{"class":115},".f5",[105,31013,161],{"class":111},[105,31015,31016],{"class":115},"nn.Linear(",[105,31018,3978],{"class":164},[105,31020,494],{"class":115},[105,31022,933],{"class":164},[105,31024,122],{"class":115},[105,31026,31027,31029,31032,31034,31036,31038,31040,31042],{"class":107,"line":1750},[105,31028,30830],{"class":164},[105,31030,31031],{"class":115},".f6",[105,31033,161],{"class":111},[105,31035,31016],{"class":115},[105,31037,933],{"class":164},[105,31039,494],{"class":115},[105,31041,827],{"class":164},[105,31043,122],{"class":115},[105,31045,31046,31048,31051,31053,31055,31057,31059,31061],{"class":107,"line":1755},[105,31047,30830],{"class":164},[105,31049,31050],{"class":115},".f7",[105,31052,161],{"class":111},[105,31054,31016],{"class":115},[105,31056,827],{"class":164},[105,31058,494],{"class":115},[105,31060,562],{"class":164},[105,31062,122],{"class":115},[105,31064,31065],{"class":107,"line":1769},[105,31066,2391],{"emptyLinePlaceholder":32},[105,31068,31069],{"class":107,"line":1774},[105,31070,31071],{"class":174},"    # 写工具->写前向传播\n",[105,31073,31074,31076,31079],{"class":107,"line":2568},[105,31075,30786],{"class":111},[105,31077,31078],{"class":1954}," forward",[105,31080,31081],{"class":115},"(self,x):\n",[105,31083,31084,31087,31089,31091,31094,31096],{"class":107,"line":2582},[105,31085,31086],{"class":115},"        x",[105,31088,161],{"class":111},[105,31090,30808],{"class":164},[105,31092,31093],{"class":115},".sig(",[105,31095,30808],{"class":164},[105,31097,31098],{"class":115},".c1(x))\n",[105,31100,31101,31103,31105,31107],{"class":107,"line":2590},[105,31102,31086],{"class":115},[105,31104,161],{"class":111},[105,31106,30808],{"class":164},[105,31108,31109],{"class":115},".s2(x)\n",[105,31111,31112,31114,31116,31118,31120,31122],{"class":107,"line":2595},[105,31113,31086],{"class":115},[105,31115,161],{"class":111},[105,31117,30808],{"class":164},[105,31119,31093],{"class":115},[105,31121,30808],{"class":164},[105,31123,31124],{"class":115},".c3(x))\n",[105,31126,31127,31129,31131,31133],{"class":107,"line":2601},[105,31128,31086],{"class":115},[105,31130,161],{"class":111},[105,31132,30808],{"class":164},[105,31134,31135],{"class":115},".s4(x)\n",[105,31137,31138,31140,31142,31144],{"class":107,"line":2607},[105,31139,31086],{"class":115},[105,31141,161],{"class":111},[105,31143,30808],{"class":164},[105,31145,31146],{"class":115},".flatten(x)\n",[105,31148,31149,31151,31153,31155,31157,31159],{"class":107,"line":2612},[105,31150,31086],{"class":115},[105,31152,161],{"class":111},[105,31154,30808],{"class":164},[105,31156,31093],{"class":115},[105,31158,30808],{"class":164},[105,31160,31161],{"class":115},".f5(x))\n",[105,31163,31164,31166,31168,31170,31172,31174],{"class":107,"line":7940},[105,31165,31086],{"class":115},[105,31167,161],{"class":111},[105,31169,30808],{"class":164},[105,31171,31093],{"class":115},[105,31173,30808],{"class":164},[105,31175,31176],{"class":115},".f6(x))\n",[105,31178,31179,31181,31183,31185],{"class":107,"line":7964},[105,31180,31086],{"class":115},[105,31182,161],{"class":111},[105,31184,30808],{"class":164},[105,31186,31187],{"class":115},".f7(x)\n",[105,31189,31190,31192],{"class":107,"line":7969},[105,31191,14744],{"class":111},[105,31193,31194],{"class":115}," x\n",[105,31196,31197],{"class":107,"line":7975},[105,31198,2391],{"emptyLinePlaceholder":32},[105,31200,31201,31203,31206,31208,31211],{"class":107,"line":8002},[105,31202,1522],{"class":111},[105,31204,31205],{"class":164}," __name__",[105,31207,2940],{"class":111},[105,31209,31210],{"class":220},"\"__main__\"",[105,31212,3730],{"class":115},[105,31214,31215],{"class":107,"line":8007},[105,31216,31217],{"class":174},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[105,31219,31220,31223,31225,31227,31230,31232,31235,31237,31239],{"class":107,"line":8013},[105,31221,31222],{"class":115},"    device",[105,31224,161],{"class":111},[105,31226,30436],{"class":115},[105,31228,31229],{"class":220},"\"cuda\"",[105,31231,1695],{"class":111},[105,31233,31234],{"class":115}," torch.cuda.is_available() ",[105,31236,1692],{"class":111},[105,31238,30461],{"class":220},[105,31240,122],{"class":115},[105,31242,31243],{"class":107,"line":8025},[105,31244,31245],{"class":174},"    # 如果就是想指定用cpu用下方代码:\n",[105,31247,31248],{"class":107,"line":8037},[105,31249,31250],{"class":174},"    # device=\"cpu\"\n",[105,31252,31253],{"class":107,"line":8049},[105,31254,31255],{"class":174},"    # print(device)\n",[105,31257,31258],{"class":107,"line":9708},[105,31259,2391],{"emptyLinePlaceholder":32},[105,31261,31262],{"class":107,"line":9733},[105,31263,31264],{"class":174},"    # 实例化模型\n",[105,31266,31267],{"class":107,"line":9756},[105,31268,31269],{"class":174},"    # 将模型放到设备中去运行\n",[105,31271,31272,31275,31277],{"class":107,"line":9780},[105,31273,31274],{"class":115},"    model",[105,31276,161],{"class":111},[105,31278,31279],{"class":115},"LeNet().to(device)\n",[105,31281,31282,31285,31288,31290,31292,31294,31296,31298],{"class":107,"line":9785},[105,31283,31284],{"class":164},"    print",[105,31286,31287],{"class":115},"(summary(model,(",[105,31289,333],{"class":164},[105,31291,494],{"class":115},[105,31293,1017],{"class":164},[105,31295,494],{"class":115},[105,31297,1017],{"class":164},[105,31299,31300],{"class":115},")))\n",[14,31302,31303],{},[20,31304],{"alt":22,"src":31305},"\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,31307,31308],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[59,31310,31311],{"start":28},[62,31312,31313],{},"训练",[14,31315,31316],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31318,31319],{},"在训练之前可以将数据展示看一下",[96,31321,31323],{"className":30363,"code":31322,"language":30365,"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",[102,31324,31325,31330,31335,31347,31359,31372,31377,31389,31394,31406,31411,31423,31427,31431,31452,31464,31469,31490,31501,31505,31510,31528,31539,31544,31555,31560,31571,31575,31580,31595,31608,31613,31618,31631,31644,31657,31662,31666,31671,31691,31708,31728,31741,31754,31764,31779],{"__ignoreMap":22},[105,31326,31327],{"class":107,"line":108},[105,31328,31329],{"class":174},"# 建立画图的函数，用于展示数据\n",[105,31331,31332],{"class":107,"line":28},[105,31333,31334],{"class":174},"# torchvision中包含很多内置的数据集\n",[105,31336,31337,31339,31342,31344],{"class":107,"line":1171},[105,31338,30722],{"class":111},[105,31340,31341],{"class":115}," sklearn.externals.array_api_compat.torch ",[105,31343,30377],{"class":111},[105,31345,31346],{"class":115}," squeeze\n",[105,31348,31349,31351,31354,31356],{"class":107,"line":1186},[105,31350,30722],{"class":111},[105,31352,31353],{"class":115}," torchvision.datasets ",[105,31355,30377],{"class":111},[105,31357,31358],{"class":115}," FashionMNIST\n",[105,31360,31361,31363,31366,31369],{"class":107,"line":1192},[105,31362,30377],{"class":111},[105,31364,31365],{"class":115}," numpy ",[105,31367,31368],{"class":111},"as",[105,31370,31371],{"class":115}," np\n",[105,31373,31374],{"class":107,"line":1206},[105,31375,31376],{"class":174},"# 引入处理数据集的包\n",[105,31378,31379,31381,31384,31386],{"class":107,"line":1212},[105,31380,30722],{"class":111},[105,31382,31383],{"class":115}," torchvision ",[105,31385,30377],{"class":111},[105,31387,31388],{"class":115}," transforms\n",[105,31390,31391],{"class":107,"line":1303},[105,31392,31393],{"class":174},"# 从torch库中引入数据处理的包\n",[105,31395,31396,31398,31401,31403],{"class":107,"line":1309},[105,31397,30377],{"class":111},[105,31399,31400],{"class":115}," torch.utils.data ",[105,31402,31368],{"class":111},[105,31404,31405],{"class":115}," Data\n",[105,31407,31408],{"class":107,"line":1321},[105,31409,31410],{"class":174},"# 导入画图的库\n",[105,31412,31413,31415,31418,31420],{"class":107,"line":1603},[105,31414,30377],{"class":111},[105,31416,31417],{"class":115}," matplotlib.pyplot ",[105,31419,31368],{"class":111},[105,31421,31422],{"class":115}," plt\n",[105,31424,31425],{"class":107,"line":1608},[105,31426,2391],{"emptyLinePlaceholder":32},[105,31428,31429],{"class":107,"line":1614},[105,31430,2391],{"emptyLinePlaceholder":32},[105,31432,31433,31436,31438,31441,31444,31446,31449],{"class":107,"line":1619},[105,31434,31435],{"class":115},"train_data",[105,31437,161],{"class":111},[105,31439,31440],{"class":115},"FashionMNIST(",[105,31442,31443],{"class":5208},"root",[105,31445,161],{"class":111},[105,31447,31448],{"class":220},"'.\u002Fdata'",[105,31450,31451],{"class":115},",\n",[105,31453,31454,31457,31459,31462],{"class":107,"line":1633},[105,31455,31456],{"class":5208},"                        train",[105,31458,161],{"class":111},[105,31460,31461],{"class":164},"True",[105,31463,31451],{"class":115},[105,31465,31466],{"class":107,"line":1638},[105,31467,31468],{"class":174},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[105,31470,31471,31474,31476,31479,31482,31484,31487],{"class":107,"line":1644},[105,31472,31473],{"class":5208},"                        transform",[105,31475,161],{"class":111},[105,31477,31478],{"class":115},"transforms.Compose([transforms.Resize(",[105,31480,31481],{"class":5208},"size",[105,31483,161],{"class":111},[105,31485,31486],{"class":164},"224",[105,31488,31489],{"class":115},"),transforms.ToTensor()]),\n",[105,31491,31492,31495,31497,31499],{"class":107,"line":1665},[105,31493,31494],{"class":5208},"                        download",[105,31496,161],{"class":111},[105,31498,31461],{"class":164},[105,31500,122],{"class":115},[105,31502,31503],{"class":107,"line":1670},[105,31504,2391],{"emptyLinePlaceholder":32},[105,31506,31507],{"class":107,"line":1684},[105,31508,31509],{"class":174},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[105,31511,31512,31515,31517,31520,31523,31525],{"class":107,"line":1689},[105,31513,31514],{"class":115},"train_loader",[105,31516,161],{"class":111},[105,31518,31519],{"class":115},"Data.DataLoader(",[105,31521,31522],{"class":5208},"dataset",[105,31524,161],{"class":111},[105,31526,31527],{"class":115},"train_data,\n",[105,31529,31530,31533,31535,31537],{"class":107,"line":1718},[105,31531,31532],{"class":5208},"                             batch_size",[105,31534,161],{"class":111},[105,31536,319],{"class":164},[105,31538,31451],{"class":115},[105,31540,31541],{"class":107,"line":1723},[105,31542,31543],{"class":174},"                             # 数据是否打乱\n",[105,31545,31546,31549,31551,31553],{"class":107,"line":1740},[105,31547,31548],{"class":5208},"                             shuffle",[105,31550,161],{"class":111},[105,31552,31461],{"class":164},[105,31554,31451],{"class":115},[105,31556,31557],{"class":107,"line":1745},[105,31558,31559],{"class":174},"                             # 规定加载数据的进程\n",[105,31561,31562,31565,31567,31569],{"class":107,"line":1750},[105,31563,31564],{"class":5208},"                             num_workers",[105,31566,161],{"class":111},[105,31568,307],{"class":164},[105,31570,122],{"class":115},[105,31572,31573],{"class":107,"line":1755},[105,31574,2391],{"emptyLinePlaceholder":32},[105,31576,31577],{"class":107,"line":1769},[105,31578,31579],{"class":174},"# 获得一个batch的数据\n",[105,31581,31582,31584,31587,31589,31592],{"class":107,"line":1774},[105,31583,3016],{"class":111},[105,31585,31586],{"class":115}," step,(b_x,b_y) ",[105,31588,26028],{"class":111},[105,31590,31591],{"class":164}," enumerate",[105,31593,31594],{"class":115},"(train_loader):\n",[105,31596,31597,31599,31602,31604,31606],{"class":107,"line":2568},[105,31598,3092],{"class":111},[105,31600,31601],{"class":115}," step ",[105,31603,1076],{"class":111},[105,31605,4084],{"class":164},[105,31607,3730],{"class":115},[105,31609,31610],{"class":107,"line":2582},[105,31611,31612],{"class":111},"        break\n",[105,31614,31615],{"class":107,"line":2590},[105,31616,31617],{"class":174},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[105,31619,31620,31623,31625,31628],{"class":107,"line":2595},[105,31621,31622],{"class":115},"batch_x",[105,31624,161],{"class":111},[105,31626,31627],{"class":115},"b_x.squeeze().numpy()  ",[105,31629,31630],{"class":174},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[105,31632,31633,31636,31638,31641],{"class":107,"line":2601},[105,31634,31635],{"class":115},"batch_y",[105,31637,161],{"class":111},[105,31639,31640],{"class":115},"b_y.numpy()   ",[105,31642,31643],{"class":174},"#将张量转换成功numpy数组\n",[105,31645,31646,31649,31651,31654],{"class":107,"line":2607},[105,31647,31648],{"class":115},"class_label",[105,31650,161],{"class":111},[105,31652,31653],{"class":115},"train_data.classes  ",[105,31655,31656],{"class":174},"#训练集标签\n",[105,31658,31659],{"class":107,"line":2612},[105,31660,31661],{"class":174},"# print(class_label)\n",[105,31663,31664],{"class":107,"line":7940},[105,31665,2391],{"emptyLinePlaceholder":32},[105,31667,31668],{"class":107,"line":7964},[105,31669,31670],{"class":174},"# 可视化一个batch的图像\n",[105,31672,31673,31676,31679,31681,31683,31685,31687,31689],{"class":107,"line":7969},[105,31674,31675],{"class":115},"plt.figure(",[105,31677,31678],{"class":5208},"figsize",[105,31680,161],{"class":111},[105,31682,116],{"class":115},[105,31684,614],{"class":164},[105,31686,494],{"class":115},[105,31688,435],{"class":164},[105,31690,30482],{"class":115},[105,31692,31693,31695,31698,31700,31703,31705],{"class":107,"line":7975},[105,31694,3016],{"class":111},[105,31696,31697],{"class":115}," ii ",[105,31699,26028],{"class":111},[105,31701,31702],{"class":115}," np.arange(",[105,31704,7350],{"class":164},[105,31706,31707],{"class":115},"(batch_y)):\n",[105,31709,31710,31713,31715,31717,31719,31722,31724,31726],{"class":107,"line":8002},[105,31711,31712],{"class":115},"    plt.subplot(",[105,31714,409],{"class":164},[105,31716,494],{"class":115},[105,31718,717],{"class":164},[105,31720,31721],{"class":115},",ii ",[105,31723,597],{"class":111},[105,31725,25103],{"class":164},[105,31727,122],{"class":115},[105,31729,31730,31733,31736,31738],{"class":107,"line":8007},[105,31731,31732],{"class":115},"    plt.imshow(batch_x[ii,:,:],",[105,31734,31735],{"class":5208},"cmap",[105,31737,161],{"class":111},[105,31739,31740],{"class":115},"plt.cm.gray)\n",[105,31742,31743,31746,31748,31750,31752],{"class":107,"line":8013},[105,31744,31745],{"class":115},"    plt.title(class_label[batch_y[ii]],",[105,31747,31481],{"class":5208},[105,31749,161],{"class":111},[105,31751,562],{"class":164},[105,31753,122],{"class":115},[105,31755,31756,31759,31762],{"class":107,"line":8025},[105,31757,31758],{"class":115},"    plt.axis(",[105,31760,31761],{"class":220},"\"off\"",[105,31763,122],{"class":115},[105,31765,31766,31769,31772,31774,31777],{"class":107,"line":8037},[105,31767,31768],{"class":115},"    plt.subplots_adjust(",[105,31770,31771],{"class":5208},"wspace",[105,31773,161],{"class":111},[105,31775,31776],{"class":164},"0.05",[105,31778,122],{"class":115},[105,31780,31781],{"class":107,"line":8049},[105,31782,31783],{"class":115},"plt.show()\n",[14,31785,31786],{},"用matplotlib进行展示的过程可以后续再补",[14,31788,31789],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31791,31792],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31794,31795],{},"模型训练：",[96,31797,31799],{"className":30363,"code":31798,"language":30365,"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",[102,31800,31801,31808,31815,31819,31831,31837,31848,31858,31868,31878,31888,31893,31905,31915,31919,31923,31928,31939,31952,31963,31980,31991,32030,32046,32058,32069,32074,32085,32101,32112,32123,32134,32141,32145,32150,32155,32159,32164,32174,32195,32199,32203,32208,32213,32218,32238,32242,32247,32257,32261,32266,32275,32280,32285,32290,32300,32304,32308,32313,32318,32328,32333,32343,32348,32357,32362,32371,32376,32385,32389,32394,32404,32408,32412,32417,32432,32460,32475,32479,32484,32489,32498,32503,32512,32517,32526,32531,32540,32545,32554,32559,32568,32573,32586,32591,32601,32606,32616,32622,32628,32634,32640,32651,32657,32677,32683,32694,32700,32706,32712,32718,32724,32730,32736,32756,32762,32778,32784,32798,32804,32819,32825,32834,32840,32849,32855,32861,32870,32876,32887,32893,32912,32918,32929,32935,32955,32971,32977,32991,32997,33003,33014,33020,33026,33036,33042,33053,33059,33069,33074,33080,33129,33176,33181,33187,33206,33212,33232,33238,33244,33254,33259,33265,33281,33326,33332,33338,33344,33355,33361,33367,33373,33391,33405,33414,33423,33432,33441,33447,33453,33461,33466,33472,33483,33489,33509,33515,33521,33527,33544,33550,33556,33562,33568,33574,33601,33625,33631,33637,33643,33654,33665,33671,33688,33711,33734,33740,33745,33754,33764,33770,33775,33781,33794,33800,33811,33822,33841],{"__ignoreMap":22},[105,31802,31803,31805],{"class":107,"line":108},[105,31804,30377],{"class":111},[105,31806,31807],{"class":115}," copy\n",[105,31809,31810,31812],{"class":107,"line":28},[105,31811,30377],{"class":111},[105,31813,31814],{"class":115}," time\n",[105,31816,31817],{"class":107,"line":1171},[105,31818,2391],{"emptyLinePlaceholder":32},[105,31820,31821,31823,31826,31828],{"class":107,"line":1186},[105,31822,30377],{"class":111},[105,31824,31825],{"class":115}," pandas ",[105,31827,31368],{"class":111},[105,31829,31830],{"class":115}," pd\n",[105,31832,31833,31835],{"class":107,"line":1192},[105,31834,30377],{"class":111},[105,31836,30380],{"class":115},[105,31838,31839,31841,31843,31845],{"class":107,"line":1206},[105,31840,30722],{"class":111},[105,31842,31400],{"class":115},[105,31844,30377],{"class":111},[105,31846,31847],{"class":115}," Dataset\n",[105,31849,31850,31852,31854,31856],{"class":107,"line":1212},[105,31851,30722],{"class":111},[105,31853,31353],{"class":115},[105,31855,30377],{"class":111},[105,31857,31358],{"class":115},[105,31859,31860,31862,31864,31866],{"class":107,"line":1303},[105,31861,30722],{"class":111},[105,31863,31383],{"class":115},[105,31865,30377],{"class":111},[105,31867,31388],{"class":115},[105,31869,31870,31872,31874,31876],{"class":107,"line":1309},[105,31871,30377],{"class":111},[105,31873,31400],{"class":115},[105,31875,31368],{"class":111},[105,31877,31405],{"class":115},[105,31879,31880,31882,31884,31886],{"class":107,"line":1321},[105,31881,30377],{"class":111},[105,31883,31417],{"class":115},[105,31885,31368],{"class":111},[105,31887,31422],{"class":115},[105,31889,31890],{"class":107,"line":1603},[105,31891,31892],{"class":174},"# 导入模型\n",[105,31894,31895,31897,31900,31902],{"class":107,"line":1608},[105,31896,30722],{"class":111},[105,31898,31899],{"class":115}," model ",[105,31901,30377],{"class":111},[105,31903,31904],{"class":115}," LeNet\n",[105,31906,31907,31909,31911,31913],{"class":107,"line":1614},[105,31908,30722],{"class":111},[105,31910,30725],{"class":115},[105,31912,30377],{"class":111},[105,31914,30730],{"class":115},[105,31916,31917],{"class":107,"line":1619},[105,31918,2391],{"emptyLinePlaceholder":32},[105,31920,31921],{"class":107,"line":1633},[105,31922,2391],{"emptyLinePlaceholder":32},[105,31924,31925],{"class":107,"line":1638},[105,31926,31927],{"class":174},"# 处理训练集与验证集函数--->划分数据集\n",[105,31929,31930,31933,31936],{"class":107,"line":1644},[105,31931,31932],{"class":111},"def",[105,31934,31935],{"class":1954}," train_val_data_process",[105,31937,31938],{"class":115},"():\n",[105,31940,31941,31944,31946,31948,31950],{"class":107,"line":1665},[105,31942,31943],{"class":115},"    train_data",[105,31945,161],{"class":111},[105,31947,31440],{"class":115},[105,31949,31448],{"class":220},[105,31951,31451],{"class":115},[105,31953,31954,31957,31959,31961],{"class":107,"line":1670},[105,31955,31956],{"class":5208},"                            train",[105,31958,161],{"class":111},[105,31960,31461],{"class":164},[105,31962,31451],{"class":115},[105,31964,31965,31968,31970,31972,31974,31976,31978],{"class":107,"line":1684},[105,31966,31967],{"class":5208},"                            transform",[105,31969,161],{"class":111},[105,31971,31478],{"class":115},[105,31973,31481],{"class":5208},[105,31975,161],{"class":111},[105,31977,1017],{"class":164},[105,31979,31489],{"class":115},[105,31981,31982,31985,31987,31989],{"class":107,"line":1689},[105,31983,31984],{"class":5208},"                            download",[105,31986,161],{"class":111},[105,31988,31461],{"class":164},[105,31990,122],{"class":115},[105,31992,31993,31996,31998,32001,32004,32006,32009,32011,32013,32016,32018,32020,32023,32025,32027],{"class":107,"line":1718},[105,31994,31995],{"class":115},"    train_data,val_data",[105,31997,161],{"class":111},[105,31999,32000],{"class":115},"Data.random_split(train_data,[",[105,32002,32003],{"class":164},"round",[105,32005,116],{"class":115},[105,32007,32008],{"class":164},"0.8",[105,32010,571],{"class":111},[105,32012,7350],{"class":164},[105,32014,32015],{"class":115},"(train_data)),",[105,32017,32003],{"class":164},[105,32019,116],{"class":115},[105,32021,32022],{"class":164},"0.2",[105,32024,571],{"class":111},[105,32026,7350],{"class":164},[105,32028,32029],{"class":115},"(train_data))])\n",[105,32031,32032,32035,32037,32040,32042,32044],{"class":107,"line":1723},[105,32033,32034],{"class":115},"    train_dataloader ",[105,32036,161],{"class":111},[105,32038,32039],{"class":115}," Data.DataLoader(",[105,32041,31522],{"class":5208},[105,32043,161],{"class":111},[105,32045,31527],{"class":115},[105,32047,32048,32051,32053,32056],{"class":107,"line":1740},[105,32049,32050],{"class":5208},"                                       batch_size",[105,32052,161],{"class":111},[105,32054,32055],{"class":164},"128",[105,32057,31451],{"class":115},[105,32059,32060,32063,32065,32067],{"class":107,"line":1745},[105,32061,32062],{"class":5208},"                                       shuffle",[105,32064,161],{"class":111},[105,32066,31461],{"class":164},[105,32068,31451],{"class":115},[105,32070,32071],{"class":107,"line":1750},[105,32072,32073],{"class":174},"                                       # 规定8个进程\n",[105,32075,32076,32079,32081,32083],{"class":107,"line":1755},[105,32077,32078],{"class":5208},"                                       num_workers",[105,32080,161],{"class":111},[105,32082,511],{"class":164},[105,32084,122],{"class":115},[105,32086,32087,32090,32092,32094,32096,32098],{"class":107,"line":1769},[105,32088,32089],{"class":115},"    val_dataloader",[105,32091,161],{"class":111},[105,32093,31519],{"class":115},[105,32095,31522],{"class":5208},[105,32097,161],{"class":111},[105,32099,32100],{"class":115},"val_data,\n",[105,32102,32103,32106,32108,32110],{"class":107,"line":1774},[105,32104,32105],{"class":5208},"                                   batch_size",[105,32107,161],{"class":111},[105,32109,32055],{"class":164},[105,32111,31451],{"class":115},[105,32113,32114,32117,32119,32121],{"class":107,"line":2568},[105,32115,32116],{"class":5208},"                                   shuffle",[105,32118,161],{"class":111},[105,32120,31461],{"class":164},[105,32122,31451],{"class":115},[105,32124,32125,32128,32130,32132],{"class":107,"line":2582},[105,32126,32127],{"class":5208},"                                   num_workers",[105,32129,161],{"class":111},[105,32131,511],{"class":164},[105,32133,122],{"class":115},[105,32135,32136,32138],{"class":107,"line":2590},[105,32137,4081],{"class":111},[105,32139,32140],{"class":115}," train_dataloader,val_dataloader\n",[105,32142,32143],{"class":107,"line":2595},[105,32144,2391],{"emptyLinePlaceholder":32},[105,32146,32147],{"class":107,"line":2601},[105,32148,32149],{"class":174},"# 验证是否出错\n",[105,32151,32152],{"class":107,"line":2607},[105,32153,32154],{"class":174},"# train_val_data_process()\n",[105,32156,32157],{"class":107,"line":2612},[105,32158,2391],{"emptyLinePlaceholder":32},[105,32160,32161],{"class":107,"line":7940},[105,32162,32163],{"class":174},"# 定义模型训练函数\n",[105,32165,32166,32168,32171],{"class":107,"line":7964},[105,32167,31932],{"class":111},[105,32169,32170],{"class":1954}," train_model_process",[105,32172,32173],{"class":115},"(model,train_dataloader,val_dataloader,num_epochs):\n",[105,32175,32176,32178,32180,32182,32184,32186,32188,32190,32193],{"class":107,"line":7969},[105,32177,31222],{"class":115},[105,32179,161],{"class":111},[105,32181,30436],{"class":115},[105,32183,31229],{"class":220},[105,32185,1695],{"class":111},[105,32187,31234],{"class":115},[105,32189,1692],{"class":111},[105,32191,32192],{"class":220}," 'cpu'",[105,32194,122],{"class":115},[105,32196,32197],{"class":107,"line":7975},[105,32198,2391],{"emptyLinePlaceholder":32},[105,32200,32201],{"class":107,"line":8002},[105,32202,2391],{"emptyLinePlaceholder":32},[105,32204,32205],{"class":107,"line":8007},[105,32206,32207],{"class":174},"    # 定义优化器\n",[105,32209,32210],{"class":107,"line":8013},[105,32211,32212],{"class":174},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[105,32214,32215],{"class":107,"line":8025},[105,32216,32217],{"class":174},"    # lr为学习率\n",[105,32219,32220,32223,32225,32228,32231,32233,32236],{"class":107,"line":8037},[105,32221,32222],{"class":115},"    optimizer",[105,32224,161],{"class":111},[105,32226,32227],{"class":115},"torch.optim.Adam(model.parameters(),",[105,32229,32230],{"class":5208},"lr",[105,32232,161],{"class":111},[105,32234,32235],{"class":164},"0.001",[105,32237,122],{"class":115},[105,32239,32240],{"class":107,"line":8049},[105,32241,2391],{"emptyLinePlaceholder":32},[105,32243,32244],{"class":107,"line":9708},[105,32245,32246],{"class":174},"    # 定义损失函数使用交叉熵损失函数\n",[105,32248,32249,32252,32254],{"class":107,"line":9733},[105,32250,32251],{"class":115},"    criterion",[105,32253,161],{"class":111},[105,32255,32256],{"class":115},"nn.CrossEntropyLoss()\n",[105,32258,32259],{"class":107,"line":9756},[105,32260,2391],{"emptyLinePlaceholder":32},[105,32262,32263],{"class":107,"line":9780},[105,32264,32265],{"class":174},"    # 将模型放到GPU中进行训练\n",[105,32267,32268,32270,32272],{"class":107,"line":9785},[105,32269,31274],{"class":115},[105,32271,161],{"class":111},[105,32273,32274],{"class":115},"model.to(device)\n",[105,32276,32277],{"class":107,"line":9790},[105,32278,32279],{"class":174},"    # 复制当前模型的参数\n",[105,32281,32282],{"class":107,"line":9795},[105,32283,32284],{"class":174},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[105,32286,32287],{"class":107,"line":9804},[105,32288,32289],{"class":174},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[105,32291,32292,32295,32297],{"class":107,"line":9809},[105,32293,32294],{"class":115},"    best_model_wts",[105,32296,161],{"class":111},[105,32298,32299],{"class":115},"copy.deepcopy(model.state_dict())\n",[105,32301,32302],{"class":107,"line":9815},[105,32303,2391],{"emptyLinePlaceholder":32},[105,32305,32306],{"class":107,"line":9836},[105,32307,2391],{"emptyLinePlaceholder":32},[105,32309,32310],{"class":107,"line":9842},[105,32311,32312],{"class":174},"    # 初始化参数\n",[105,32314,32315],{"class":107,"line":9856},[105,32316,32317],{"class":174},"    # 最高准确度\n",[105,32319,32320,32323,32325],{"class":107,"line":9862},[105,32321,32322],{"class":115},"    best_acc",[105,32324,161],{"class":111},[105,32326,32327],{"class":164},"0.0\n",[105,32329,32330],{"class":107,"line":9889},[105,32331,32332],{"class":174},"    # 训练集损失列表\n",[105,32334,32335,32338,32340],{"class":107,"line":9898},[105,32336,32337],{"class":115},"    train_loss_all",[105,32339,161],{"class":111},[105,32341,32342],{"class":115},"[]\n",[105,32344,32345],{"class":107,"line":9904},[105,32346,32347],{"class":174},"    # 验证集函数列表\n",[105,32349,32350,32353,32355],{"class":107,"line":9912},[105,32351,32352],{"class":115},"    val_loss_all",[105,32354,161],{"class":111},[105,32356,32342],{"class":115},[105,32358,32359],{"class":107,"line":9917},[105,32360,32361],{"class":174},"    # 训练集准确度列表\n",[105,32363,32364,32367,32369],{"class":107,"line":16596},[105,32365,32366],{"class":115},"    train_acc_all",[105,32368,161],{"class":111},[105,32370,32342],{"class":115},[105,32372,32373],{"class":107,"line":16602},[105,32374,32375],{"class":174},"    # 验证集准确度列表\n",[105,32377,32378,32381,32383],{"class":107,"line":16625},[105,32379,32380],{"class":115},"    val_acc_all",[105,32382,161],{"class":111},[105,32384,32342],{"class":115},[105,32386,32387],{"class":107,"line":16631},[105,32388,2391],{"emptyLinePlaceholder":32},[105,32390,32391],{"class":107,"line":16654},[105,32392,32393],{"class":174},"    # 保存当前时间--->方便看每轮训练的时间\n",[105,32395,32396,32399,32401],{"class":107,"line":16668},[105,32397,32398],{"class":115},"    since",[105,32400,161],{"class":111},[105,32402,32403],{"class":115},"time.time()\n",[105,32405,32406],{"class":107,"line":16688},[105,32407,2391],{"emptyLinePlaceholder":32},[105,32409,32410],{"class":107,"line":16694},[105,32411,2391],{"emptyLinePlaceholder":32},[105,32413,32414],{"class":107,"line":16705},[105,32415,32416],{"class":174},"    # 准备工作完成--->开始训练模型\n",[105,32418,32419,32421,32424,32426,32429],{"class":107,"line":16728},[105,32420,3192],{"class":111},[105,32422,32423],{"class":115}," epoch ",[105,32425,26028],{"class":111},[105,32427,32428],{"class":164}," range",[105,32430,32431],{"class":115},"(num_epochs):\n",[105,32433,32434,32437,32439,32442,32445,32447,32449,32451,32454,32456,32458],{"class":107,"line":16750},[105,32435,32436],{"class":164},"        print",[105,32438,116],{"class":115},[105,32440,32441],{"class":220},"\"Epoch ",[105,32443,32444],{"class":164},"{}",[105,32446,700],{"class":220},[105,32448,32444],{"class":164},[105,32450,367],{"class":220},[105,32452,32453],{"class":115},".format(epoch,num_epochs",[105,32455,648],{"class":111},[105,32457,333],{"class":164},[105,32459,30482],{"class":115},[105,32461,32462,32464,32466,32469,32471,32473],{"class":107,"line":16755},[105,32463,32436],{"class":164},[105,32465,116],{"class":115},[105,32467,32468],{"class":220},"\"-\"",[105,32470,571],{"class":111},[105,32472,562],{"class":164},[105,32474,122],{"class":115},[105,32476,32477],{"class":107,"line":16761},[105,32478,2391],{"emptyLinePlaceholder":32},[105,32480,32481],{"class":107,"line":16775},[105,32482,32483],{"class":174},"        # 初始化参数\n",[105,32485,32486],{"class":107,"line":16788},[105,32487,32488],{"class":174},"        # 训练集损失函数\n",[105,32490,32491,32494,32496],{"class":107,"line":16793},[105,32492,32493],{"class":115},"        train_loss",[105,32495,161],{"class":111},[105,32497,32327],{"class":164},[105,32499,32500],{"class":107,"line":16807},[105,32501,32502],{"class":174},"        # 训练集准确度\n",[105,32504,32505,32508,32510],{"class":107,"line":16812},[105,32506,32507],{"class":115},"        train_corrects",[105,32509,161],{"class":111},[105,32511,3076],{"class":164},[105,32513,32514],{"class":107,"line":16818},[105,32515,32516],{"class":174},"        # 验证集损失函数\n",[105,32518,32519,32522,32524],{"class":107,"line":16823},[105,32520,32521],{"class":115},"        val_loss",[105,32523,161],{"class":111},[105,32525,32327],{"class":164},[105,32527,32528],{"class":107,"line":16837},[105,32529,32530],{"class":174},"        # 验证集准确度\n",[105,32532,32533,32536,32538],{"class":107,"line":16842},[105,32534,32535],{"class":115},"        val_corrects",[105,32537,161],{"class":111},[105,32539,3076],{"class":164},[105,32541,32542],{"class":107,"line":16847},[105,32543,32544],{"class":174},"        # 训练集样本数量\n",[105,32546,32547,32550,32552],{"class":107,"line":16861},[105,32548,32549],{"class":115},"        train_num",[105,32551,161],{"class":111},[105,32553,3076],{"class":164},[105,32555,32556],{"class":107,"line":16873},[105,32557,32558],{"class":174},"        # 验证集样本数量\n",[105,32560,32561,32564,32566],{"class":107,"line":16878},[105,32562,32563],{"class":115},"        val_num",[105,32565,161],{"class":111},[105,32567,3076],{"class":164},[105,32569,32570],{"class":107,"line":16891},[105,32571,32572],{"class":174},"        # 将数据放到设备,并开始训练\n",[105,32574,32575,32577,32579,32581,32583],{"class":107,"line":16896},[105,32576,3394],{"class":111},[105,32578,31586],{"class":115},[105,32580,26028],{"class":111},[105,32582,31591],{"class":164},[105,32584,32585],{"class":115},"(train_dataloader):\n",[105,32587,32588],{"class":107,"line":16901},[105,32589,32590],{"class":174},"            # 将特征放入到训练设备\n",[105,32592,32593,32596,32598],{"class":107,"line":16906},[105,32594,32595],{"class":115},"            b_x",[105,32597,161],{"class":111},[105,32599,32600],{"class":115},"b_x.to(device)\n",[105,32602,32603],{"class":107,"line":16919},[105,32604,32605],{"class":174},"            # 将标签放入到训练设备当中\n",[105,32607,32608,32611,32613],{"class":107,"line":16924},[105,32609,32610],{"class":115},"            b_y",[105,32612,161],{"class":111},[105,32614,32615],{"class":115},"b_y.to(device)\n",[105,32617,32619],{"class":107,"line":32618},98,[105,32620,32621],{"class":174},"            # 设置模型为训练模式\n",[105,32623,32625],{"class":107,"line":32624},99,[105,32626,32627],{"class":115},"            model.train()\n",[105,32629,32631],{"class":107,"line":32630},100,[105,32632,32633],{"class":174},"            # 将数据放到模型当中,开始前向传播\n",[105,32635,32637],{"class":107,"line":32636},101,[105,32638,32639],{"class":174},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[105,32641,32643,32646,32648],{"class":107,"line":32642},102,[105,32644,32645],{"class":115},"            output",[105,32647,161],{"class":111},[105,32649,32650],{"class":115},"model(b_x)\n",[105,32652,32654],{"class":107,"line":32653},103,[105,32655,32656],{"class":174},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[105,32658,32660,32663,32665,32668,32671,32673,32675],{"class":107,"line":32659},104,[105,32661,32662],{"class":115},"            pre_lab",[105,32664,161],{"class":111},[105,32666,32667],{"class":115},"torch.argmax(output,",[105,32669,32670],{"class":5208},"dim",[105,32672,161],{"class":111},[105,32674,333],{"class":164},[105,32676,122],{"class":115},[105,32678,32680],{"class":107,"line":32679},105,[105,32681,32682],{"class":174},"            # 计算每一个batch的损失函数\n",[105,32684,32686,32689,32691],{"class":107,"line":32685},106,[105,32687,32688],{"class":115},"            loss",[105,32690,161],{"class":111},[105,32692,32693],{"class":115},"criterion(output,b_y)\n",[105,32695,32697],{"class":107,"line":32696},107,[105,32698,32699],{"class":174},"            # 将梯度初始化为0\n",[105,32701,32703],{"class":107,"line":32702},108,[105,32704,32705],{"class":115},"            optimizer.zero_grad()\n",[105,32707,32709],{"class":107,"line":32708},109,[105,32710,32711],{"class":174},"            # 梯度置为0后再进行反向传播\n",[105,32713,32715],{"class":107,"line":32714},110,[105,32716,32717],{"class":115},"            loss.backward()\n",[105,32719,32721],{"class":107,"line":32720},111,[105,32722,32723],{"class":174},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[105,32725,32727],{"class":107,"line":32726},112,[105,32728,32729],{"class":115},"            optimizer.step()\n",[105,32731,32733],{"class":107,"line":32732},113,[105,32734,32735],{"class":174},"            # loss.item()指的是batch的平均损失\n",[105,32737,32739,32742,32744,32747,32749,32752,32754],{"class":107,"line":32738},114,[105,32740,32741],{"class":115},"            train_loss",[105,32743,9469],{"class":111},[105,32745,32746],{"class":115},"loss.item()",[105,32748,571],{"class":111},[105,32750,32751],{"class":115},"b_x.size(",[105,32753,307],{"class":164},[105,32755,122],{"class":115},[105,32757,32759],{"class":107,"line":32758},115,[105,32760,32761],{"class":174},"            # 计算每个批次中正确预测的数量\n",[105,32763,32765,32768,32770,32773,32775],{"class":107,"line":32764},116,[105,32766,32767],{"class":115},"            train_corrects",[105,32769,9469],{"class":111},[105,32771,32772],{"class":115},"torch.sum(pre_lab",[105,32774,2940],{"class":111},[105,32776,32777],{"class":115},"b_y.data)\n",[105,32779,32781],{"class":107,"line":32780},117,[105,32782,32783],{"class":174},"            # 计算目前为止一共处理了多少样本\n",[105,32785,32787,32790,32792,32794,32796],{"class":107,"line":32786},118,[105,32788,32789],{"class":115},"            train_num",[105,32791,9469],{"class":111},[105,32793,32751],{"class":115},[105,32795,307],{"class":164},[105,32797,122],{"class":115},[105,32799,32801],{"class":107,"line":32800},119,[105,32802,32803],{"class":174},"        # 验证数据\n",[105,32805,32807,32809,32812,32814,32816],{"class":107,"line":32806},120,[105,32808,3394],{"class":111},[105,32810,32811],{"class":115}," step ,(b_x,b_y) ",[105,32813,26028],{"class":111},[105,32815,31591],{"class":164},[105,32817,32818],{"class":115},"(val_dataloader):\n",[105,32820,32822],{"class":107,"line":32821},121,[105,32823,32824],{"class":174},"            # 将特征放到验证设备当中\n",[105,32826,32828,32830,32832],{"class":107,"line":32827},122,[105,32829,32595],{"class":115},[105,32831,161],{"class":111},[105,32833,32600],{"class":115},[105,32835,32837],{"class":107,"line":32836},123,[105,32838,32839],{"class":174},"            # 将标签放到放到训练设备当中\n",[105,32841,32843,32845,32847],{"class":107,"line":32842},124,[105,32844,32610],{"class":115},[105,32846,161],{"class":111},[105,32848,32615],{"class":115},[105,32850,32852],{"class":107,"line":32851},125,[105,32853,32854],{"class":174},"            # 开启验证模式，设置模型为评估模式\n",[105,32856,32858],{"class":107,"line":32857},126,[105,32859,32860],{"class":115},"            model.eval()\n",[105,32862,32864,32867],{"class":107,"line":32863},127,[105,32865,32866],{"class":111},"            with",[105,32868,32869],{"class":115}," torch.no_grad():\n",[105,32871,32873],{"class":107,"line":32872},128,[105,32874,32875],{"class":174},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[105,32877,32879,32882,32884],{"class":107,"line":32878},129,[105,32880,32881],{"class":115},"                output ",[105,32883,161],{"class":111},[105,32885,32886],{"class":115}," model(b_x)\n",[105,32888,32890],{"class":107,"line":32889},130,[105,32891,32892],{"class":174},"                # 查找每一行中最大值对应的下标\n",[105,32894,32896,32899,32901,32904,32906,32908,32910],{"class":107,"line":32895},131,[105,32897,32898],{"class":115},"                pre_lab ",[105,32900,161],{"class":111},[105,32902,32903],{"class":115}," torch.argmax(output, ",[105,32905,32670],{"class":5208},[105,32907,161],{"class":111},[105,32909,333],{"class":164},[105,32911,122],{"class":115},[105,32913,32915],{"class":107,"line":32914},132,[105,32916,32917],{"class":174},"                # 计算验证集上的当前 batch 损失\n",[105,32919,32921,32924,32926],{"class":107,"line":32920},133,[105,32922,32923],{"class":115},"                val_batch_loss ",[105,32925,161],{"class":111},[105,32927,32928],{"class":115}," criterion(output, b_y)\n",[105,32930,32932],{"class":107,"line":32931},134,[105,32933,32934],{"class":174},"                # 对损失函数进行累加（按样本数加权）\n",[105,32936,32938,32941,32943,32946,32948,32951,32953],{"class":107,"line":32937},135,[105,32939,32940],{"class":115},"                val_loss ",[105,32942,9469],{"class":111},[105,32944,32945],{"class":115}," val_batch_loss.item() ",[105,32947,571],{"class":111},[105,32949,32950],{"class":115}," b_x.size(",[105,32952,307],{"class":164},[105,32954,122],{"class":115},[105,32956,32958,32961,32963,32966,32968],{"class":107,"line":32957},136,[105,32959,32960],{"class":115},"                val_corrects ",[105,32962,9469],{"class":111},[105,32964,32965],{"class":115}," torch.sum(pre_lab ",[105,32967,2940],{"class":111},[105,32969,32970],{"class":115}," b_y.data)\n",[105,32972,32974],{"class":107,"line":32973},137,[105,32975,32976],{"class":174},"                # 当前用于验证的样本数量\n",[105,32978,32980,32983,32985,32987,32989],{"class":107,"line":32979},138,[105,32981,32982],{"class":115},"            val_num ",[105,32984,9469],{"class":111},[105,32986,32950],{"class":115},[105,32988,307],{"class":164},[105,32990,122],{"class":115},[105,32992,32994],{"class":107,"line":32993},139,[105,32995,32996],{"class":174},"        # 计算并保存每一次迭代的loss值和准确率\n",[105,32998,33000],{"class":107,"line":32999},140,[105,33001,33002],{"class":174},"        # 计算并保存训练集的loss值\n",[105,33004,33006,33009,33011],{"class":107,"line":33005},141,[105,33007,33008],{"class":115},"        train_loss_all.append(train_loss",[105,33010,700],{"class":111},[105,33012,33013],{"class":115},"train_num)\n",[105,33015,33017],{"class":107,"line":33016},142,[105,33018,33019],{"class":174},"        # 取双精度\n",[105,33021,33023],{"class":107,"line":33022},143,[105,33024,33025],{"class":174},"        # 计算并保存训练集的准确率\n",[105,33027,33029,33032,33034],{"class":107,"line":33028},144,[105,33030,33031],{"class":115},"        train_acc_all.append(train_corrects.double().item()",[105,33033,700],{"class":111},[105,33035,33013],{"class":115},[105,33037,33039],{"class":107,"line":33038},145,[105,33040,33041],{"class":174},"        # 计算并保存验证集的loss值\n",[105,33043,33045,33048,33050],{"class":107,"line":33044},146,[105,33046,33047],{"class":115},"        val_loss_all.append(val_loss",[105,33049,700],{"class":111},[105,33051,33052],{"class":115},"val_num)\n",[105,33054,33056],{"class":107,"line":33055},147,[105,33057,33058],{"class":174},"        # 计算并保存验证集的准确率\n",[105,33060,33062,33065,33067],{"class":107,"line":33061},148,[105,33063,33064],{"class":115},"        val_acc_all.append(val_corrects.double().item()",[105,33066,700],{"class":111},[105,33068,33052],{"class":115},[105,33070,33072],{"class":107,"line":33071},149,[105,33073,2391],{"emptyLinePlaceholder":32},[105,33075,33077],{"class":107,"line":33076},150,[105,33078,33079],{"class":174},"        # 打印训练一轮的loss值和准确率\n",[105,33081,33083,33085,33087,33089,33091,33094,33096,33099,33101,33104,33106,33108,33110,33112,33115,33117,33119,33122,33124,33126],{"class":107,"line":33082},151,[105,33084,32436],{"class":164},[105,33086,116],{"class":115},[105,33088,3583],{"class":220},[105,33090,32444],{"class":164},[105,33092,33093],{"class":220},"train loss:",[105,33095,1012],{"class":164},[105,33097,33098],{"class":111},":.4f",[105,33100,1062],{"class":164},[105,33102,33103],{"class":220}," train acc:",[105,33105,1012],{"class":164},[105,33107,33098],{"class":111},[105,33109,1062],{"class":164},[105,33111,3583],{"class":220},[105,33113,33114],{"class":115},".format(epoch,train_loss_all[",[105,33116,648],{"class":111},[105,33118,333],{"class":164},[105,33120,33121],{"class":115},"],train_acc_all[",[105,33123,648],{"class":111},[105,33125,333],{"class":164},[105,33127,33128],{"class":115},"]))\n",[105,33130,33132,33134,33136,33138,33140,33143,33145,33147,33149,33152,33154,33156,33158,33160,33163,33165,33167,33170,33172,33174],{"class":107,"line":33131},152,[105,33133,32436],{"class":164},[105,33135,116],{"class":115},[105,33137,3583],{"class":220},[105,33139,32444],{"class":164},[105,33141,33142],{"class":220},"val loss:",[105,33144,1012],{"class":164},[105,33146,33098],{"class":111},[105,33148,1062],{"class":164},[105,33150,33151],{"class":220}," val acc:",[105,33153,1012],{"class":164},[105,33155,33098],{"class":111},[105,33157,1062],{"class":164},[105,33159,3583],{"class":220},[105,33161,33162],{"class":115},".format(epoch,val_loss_all[",[105,33164,648],{"class":111},[105,33166,333],{"class":164},[105,33168,33169],{"class":115},"],val_acc_all[",[105,33171,648],{"class":111},[105,33173,333],{"class":164},[105,33175,33128],{"class":115},[105,33177,33179],{"class":107,"line":33178},153,[105,33180,2391],{"emptyLinePlaceholder":32},[105,33182,33184],{"class":107,"line":33183},154,[105,33185,33186],{"class":174},"        # 判断准确度--->保存最优模型\n",[105,33188,33190,33192,33195,33197,33199,33201,33203],{"class":107,"line":33189},155,[105,33191,2488],{"class":111},[105,33193,33194],{"class":115}," val_acc_all[",[105,33196,648],{"class":111},[105,33198,333],{"class":164},[105,33200,1056],{"class":115},[105,33202,1076],{"class":111},[105,33204,33205],{"class":115},"best_acc:\n",[105,33207,33209],{"class":107,"line":33208},156,[105,33210,33211],{"class":174},"            # 保存当前模型准确度\n",[105,33213,33215,33218,33220,33222,33225,33227,33229],{"class":107,"line":33214},157,[105,33216,33217],{"class":115},"            best_acc:",[105,33219,155],{"class":164},[105,33221,161],{"class":111},[105,33223,33224],{"class":115},"val_acc_all[",[105,33226,648],{"class":111},[105,33228,333],{"class":164},[105,33230,33231],{"class":115},"]\n",[105,33233,33235],{"class":107,"line":33234},158,[105,33236,33237],{"class":174},"            # 保存当前的准确度\n",[105,33239,33241],{"class":107,"line":33240},159,[105,33242,33243],{"class":174},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[105,33245,33247,33250,33252],{"class":107,"line":33246},160,[105,33248,33249],{"class":115},"            best_model_wts",[105,33251,161],{"class":111},[105,33253,32299],{"class":115},[105,33255,33257],{"class":107,"line":33256},161,[105,33258,2391],{"emptyLinePlaceholder":32},[105,33260,33262],{"class":107,"line":33261},162,[105,33263,33264],{"class":174},"        # 计算耗时\n",[105,33266,33268,33271,33273,33276,33278],{"class":107,"line":33267},163,[105,33269,33270],{"class":115},"        time_use",[105,33272,161],{"class":111},[105,33274,33275],{"class":115},"time.time()",[105,33277,648],{"class":111},[105,33279,33280],{"class":115},"since\n",[105,33282,33284,33286,33288,33291,33293,33296,33298,33300,33302,33304,33306,33309,33312,33315,33317,33320,33322,33324],{"class":107,"line":33283},164,[105,33285,32436],{"class":164},[105,33287,116],{"class":115},[105,33289,33290],{"class":220},"'训练和验证耗费的时间",[105,33292,1012],{"class":164},[105,33294,33295],{"class":111},":.0f",[105,33297,1062],{"class":164},[105,33299,660],{"class":220},[105,33301,1012],{"class":164},[105,33303,33295],{"class":111},[105,33305,1062],{"class":164},[105,33307,33308],{"class":220},"s'",[105,33310,33311],{"class":115},".format(time_use",[105,33313,33314],{"class":111},"\u002F\u002F",[105,33316,1023],{"class":164},[105,33318,33319],{"class":115},",time_use",[105,33321,444],{"class":111},[105,33323,1023],{"class":164},[105,33325,30482],{"class":115},[105,33327,33329],{"class":107,"line":33328},165,[105,33330,33331],{"class":174},"    # 选择最优参数\n",[105,33333,33335],{"class":107,"line":33334},166,[105,33336,33337],{"class":174},"    # 加载最高准确率下的模型参数\n",[105,33339,33341],{"class":107,"line":33340},167,[105,33342,33343],{"class":174},"    # model.load_state_dict(best_model_wts)\n",[105,33345,33347,33350,33353],{"class":107,"line":33346},168,[105,33348,33349],{"class":115},"    torch.save(model.state_dict(best_model_wts), ",[105,33351,33352],{"class":220},"'.\u002Fbest_model.pth'",[105,33354,122],{"class":115},[105,33356,33358],{"class":107,"line":33357},169,[105,33359,33360],{"class":174},"    # 或者写成\n",[105,33362,33364],{"class":107,"line":33363},170,[105,33365,33366],{"class":174},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[105,33368,33370],{"class":107,"line":33369},171,[105,33371,33372],{"class":174},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[105,33374,33376,33379,33381,33384,33387,33389],{"class":107,"line":33375},172,[105,33377,33378],{"class":115},"    train_process",[105,33380,161],{"class":111},[105,33382,33383],{"class":115},"pd.DataFrame(",[105,33385,33386],{"class":5208},"data",[105,33388,161],{"class":111},[105,33390,1537],{"class":115},[105,33392,33394,33397,33399,33402],{"class":107,"line":33393},173,[105,33395,33396],{"class":220},"        \"epoch\"",[105,33398,975],{"class":115},[105,33400,33401],{"class":164},"range",[105,33403,33404],{"class":115},"(num_epochs),\n",[105,33406,33408,33411],{"class":107,"line":33407},174,[105,33409,33410],{"class":220},"        \"train_loss_all\"",[105,33412,33413],{"class":115},":train_loss_all,\n",[105,33415,33417,33420],{"class":107,"line":33416},175,[105,33418,33419],{"class":220},"        \"val_loss_all\"",[105,33421,33422],{"class":115},":val_loss_all,\n",[105,33424,33426,33429],{"class":107,"line":33425},176,[105,33427,33428],{"class":220},"        \"train_acc_all\"",[105,33430,33431],{"class":115},":train_acc_all,\n",[105,33433,33435,33438],{"class":107,"line":33434},177,[105,33436,33437],{"class":220},"        \"val_acc_all\"",[105,33439,33440],{"class":115},":val_acc_all\n",[105,33442,33444],{"class":107,"line":33443},178,[105,33445,33446],{"class":115},"    })\n",[105,33448,33450],{"class":107,"line":33449},179,[105,33451,33452],{"class":174},"    # 返回训练保存的过程\n",[105,33454,33456,33458],{"class":107,"line":33455},180,[105,33457,4081],{"class":111},[105,33459,33460],{"class":115}," train_process\n",[105,33462,33464],{"class":107,"line":33463},181,[105,33465,2391],{"emptyLinePlaceholder":32},[105,33467,33469],{"class":107,"line":33468},182,[105,33470,33471],{"class":174},"# 将loss值和精度按照图片的形式展示出来\n",[105,33473,33475,33477,33480],{"class":107,"line":33474},183,[105,33476,31932],{"class":111},[105,33478,33479],{"class":1954}," matplot_acc_loss",[105,33481,33482],{"class":115},"(train_process):\n",[105,33484,33486],{"class":107,"line":33485},184,[105,33487,33488],{"class":174},"    # 设置图的大小\n",[105,33490,33492,33495,33497,33499,33501,33503,33505,33507],{"class":107,"line":33491},185,[105,33493,33494],{"class":115},"    plt.figure(",[105,33496,31678],{"class":5208},[105,33498,161],{"class":111},[105,33500,116],{"class":115},[105,33502,614],{"class":164},[105,33504,494],{"class":115},[105,33506,409],{"class":164},[105,33508,30482],{"class":115},[105,33510,33512],{"class":107,"line":33511},186,[105,33513,33514],{"class":174},"    # 设置图中有几张图\n",[105,33516,33518],{"class":107,"line":33517},187,[105,33519,33520],{"class":174},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[105,33522,33524],{"class":107,"line":33523},188,[105,33525,33526],{"class":174},"    # ①loss图\n",[105,33528,33530,33532,33534,33536,33538,33540,33542],{"class":107,"line":33529},189,[105,33531,31712],{"class":115},[105,33533,333],{"class":164},[105,33535,494],{"class":115},[105,33537,193],{"class":164},[105,33539,494],{"class":115},[105,33541,333],{"class":164},[105,33543,122],{"class":115},[105,33545,33547],{"class":107,"line":33546},190,[105,33548,33549],{"class":174},"    # 补充:\n",[105,33551,33553],{"class":107,"line":33552},191,[105,33554,33555],{"class":174},"    # plt.subplot(nrows, ncols, index)\n",[105,33557,33559],{"class":107,"line":33558},192,[105,33560,33561],{"class":174},"    # nrows：行数\n",[105,33563,33565],{"class":107,"line":33564},193,[105,33566,33567],{"class":174},"    # ncols：列数\n",[105,33569,33571],{"class":107,"line":33570},194,[105,33572,33573],{"class":174},"    # index：目前选中第几个子图（从1开始）\n",[105,33575,33577,33580,33583,33586,33589,33591,33594,33596,33599],{"class":107,"line":33576},195,[105,33578,33579],{"class":115},"    plt.plot(train_process[",[105,33581,33582],{"class":220},"\"epoch\"",[105,33584,33585],{"class":115},"],train_process.train_loss_all,",[105,33587,33588],{"class":220},"'ro-'",[105,33590,494],{"class":115},[105,33592,33593],{"class":5208},"label",[105,33595,161],{"class":111},[105,33597,33598],{"class":220},"'train loss'",[105,33600,122],{"class":115},[105,33602,33604,33606,33608,33611,33614,33616,33618,33620,33623],{"class":107,"line":33603},196,[105,33605,33579],{"class":115},[105,33607,33582],{"class":220},[105,33609,33610],{"class":115},"],train_process.val_loss_all,",[105,33612,33613],{"class":220},"'bs--'",[105,33615,494],{"class":115},[105,33617,33593],{"class":5208},[105,33619,161],{"class":111},[105,33621,33622],{"class":220},"'val loss'",[105,33624,122],{"class":115},[105,33626,33628],{"class":107,"line":33627},197,[105,33629,33630],{"class":174},"    # 添加一个图例\n",[105,33632,33634],{"class":107,"line":33633},198,[105,33635,33636],{"class":115},"    plt.legend()\n",[105,33638,33640],{"class":107,"line":33639},199,[105,33641,33642],{"class":174},"    # 给轴添加标签\n",[105,33644,33646,33649,33652],{"class":107,"line":33645},200,[105,33647,33648],{"class":115},"    plt.xlabel(",[105,33650,33651],{"class":220},"'epoch'",[105,33653,122],{"class":115},[105,33655,33657,33660,33663],{"class":107,"line":33656},201,[105,33658,33659],{"class":115},"    plt.ylabel(",[105,33661,33662],{"class":220},"'loss'",[105,33664,122],{"class":115},[105,33666,33668],{"class":107,"line":33667},202,[105,33669,33670],{"class":174},"    # ②准确度图\n",[105,33672,33674,33676,33678,33680,33682,33684,33686],{"class":107,"line":33673},203,[105,33675,31712],{"class":115},[105,33677,333],{"class":164},[105,33679,494],{"class":115},[105,33681,193],{"class":164},[105,33683,494],{"class":115},[105,33685,193],{"class":164},[105,33687,122],{"class":115},[105,33689,33691,33693,33695,33698,33700,33702,33704,33706,33709],{"class":107,"line":33690},204,[105,33692,33579],{"class":115},[105,33694,33582],{"class":220},[105,33696,33697],{"class":115},"],train_process.train_acc_all,",[105,33699,33588],{"class":220},[105,33701,494],{"class":115},[105,33703,33593],{"class":5208},[105,33705,161],{"class":111},[105,33707,33708],{"class":220},"'train acc'",[105,33710,122],{"class":115},[105,33712,33714,33716,33718,33721,33723,33725,33727,33729,33732],{"class":107,"line":33713},205,[105,33715,33579],{"class":115},[105,33717,33582],{"class":220},[105,33719,33720],{"class":115},"],train_process.val_acc_all,",[105,33722,33613],{"class":220},[105,33724,494],{"class":115},[105,33726,33593],{"class":5208},[105,33728,161],{"class":111},[105,33730,33731],{"class":220},"'val acc'",[105,33733,122],{"class":115},[105,33735,33737],{"class":107,"line":33736},206,[105,33738,33739],{"class":174},"    # 添加图例\n",[105,33741,33743],{"class":107,"line":33742},207,[105,33744,33636],{"class":115},[105,33746,33748,33750,33752],{"class":107,"line":33747},208,[105,33749,33648],{"class":115},[105,33751,33582],{"class":220},[105,33753,122],{"class":115},[105,33755,33757,33759,33762],{"class":107,"line":33756},209,[105,33758,33659],{"class":115},[105,33760,33761],{"class":220},"\"acc\"",[105,33763,122],{"class":115},[105,33765,33767],{"class":107,"line":33766},210,[105,33768,33769],{"class":115},"    plt.show()\n",[105,33771,33773],{"class":107,"line":33772},211,[105,33774,2391],{"emptyLinePlaceholder":32},[105,33776,33778],{"class":107,"line":33777},212,[105,33779,33780],{"class":174},"# 正式开始训练:\n",[105,33782,33784,33786,33788,33790,33792],{"class":107,"line":33783},213,[105,33785,1522],{"class":111},[105,33787,31205],{"class":164},[105,33789,2940],{"class":111},[105,33791,31210],{"class":220},[105,33793,3730],{"class":115},[105,33795,33797],{"class":107,"line":33796},214,[105,33798,33799],{"class":174},"    # 将模型实例化\n",[105,33801,33803,33806,33808],{"class":107,"line":33802},215,[105,33804,33805],{"class":115},"    LeNet",[105,33807,161],{"class":111},[105,33809,33810],{"class":115},"LeNet()\n",[105,33812,33814,33817,33819],{"class":107,"line":33813},216,[105,33815,33816],{"class":115},"    train_dataloader,val_dataloader",[105,33818,161],{"class":111},[105,33820,33821],{"class":115},"train_val_data_process()\n",[105,33823,33825,33827,33829,33832,33835,33837,33839],{"class":107,"line":33824},217,[105,33826,33378],{"class":115},[105,33828,161],{"class":111},[105,33830,33831],{"class":115},"train_model_process(LeNet,train_dataloader,val_dataloader,",[105,33833,33834],{"class":5208},"num_epochs",[105,33836,161],{"class":111},[105,33838,816],{"class":164},[105,33840,122],{"class":115},[105,33842,33844],{"class":107,"line":33843},218,[105,33845,33846],{"class":115},"    matplot_acc_loss(train_process)\n",[14,33848,33849],{},"画图的补充点学习：",[14,33851,33852],{},[20,33853],{"alt":22,"src":33854},"\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",[59,33856,33857],{"start":1171},[62,33858,33859],{},"测试",[96,33861,33863],{"className":30363,"code":33862,"language":30365,"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",[102,33864,33865,33871,33881,33893,33903,33908,33918,33928,33932,33937,33946,33963,33975,33992,34003,34019,34024,34035,34046,34057,34064,34068,34073,34083,34088,34105,34113,34117,34122,34131,34140,34144,34149,34154,34159,34166,34171,34183,34193,34203,34208,34212,34217,34226,34231,34247,34252,34257,34262,34276,34281,34295,34299,34304,34319,34324,34336,34340,34345,34357,34362,34370,34375,34380,34390,34395,34404,34409,34414,34418,34423,34428,34444,34452,34457,34462,34521,34527,34532,34543,34551,34559,34563,34568,34572,34577,34585,34590,34606,34611,34621,34631],{"__ignoreMap":22},[105,33866,33867,33869],{"class":107,"line":108},[105,33868,30377],{"class":111},[105,33870,30380],{"class":115},[105,33872,33873,33875,33877,33879],{"class":107,"line":28},[105,33874,30377],{"class":111},[105,33876,31400],{"class":115},[105,33878,31368],{"class":111},[105,33880,31405],{"class":115},[105,33882,33883,33885,33888,33890],{"class":107,"line":1171},[105,33884,30722],{"class":111},[105,33886,33887],{"class":115}," jupyter_client.consoleapp ",[105,33889,30377],{"class":111},[105,33891,33892],{"class":115}," classes\n",[105,33894,33895,33897,33899,33901],{"class":107,"line":1186},[105,33896,30722],{"class":111},[105,33898,31383],{"class":115},[105,33900,30377],{"class":111},[105,33902,31388],{"class":115},[105,33904,33905],{"class":107,"line":1192},[105,33906,33907],{"class":174},"# 导入数据集\n",[105,33909,33910,33912,33914,33916],{"class":107,"line":1206},[105,33911,30722],{"class":111},[105,33913,31353],{"class":115},[105,33915,30377],{"class":111},[105,33917,31358],{"class":115},[105,33919,33920,33922,33924,33926],{"class":107,"line":1212},[105,33921,30722],{"class":111},[105,33923,31899],{"class":115},[105,33925,30377],{"class":111},[105,33927,31904],{"class":115},[105,33929,33930],{"class":107,"line":1303},[105,33931,2391],{"emptyLinePlaceholder":32},[105,33933,33934],{"class":107,"line":1309},[105,33935,33936],{"class":174},"# 测试数据处理\n",[105,33938,33939,33941,33944],{"class":107,"line":1321},[105,33940,31932],{"class":111},[105,33942,33943],{"class":1954}," test_data_process",[105,33945,31938],{"class":115},[105,33947,33948,33951,33953,33955,33957,33959,33961],{"class":107,"line":1603},[105,33949,33950],{"class":115},"    test_data",[105,33952,161],{"class":111},[105,33954,31440],{"class":115},[105,33956,31443],{"class":5208},[105,33958,161],{"class":111},[105,33960,31448],{"class":220},[105,33962,31451],{"class":115},[105,33964,33965,33968,33970,33973],{"class":107,"line":1608},[105,33966,33967],{"class":5208},"                           train",[105,33969,161],{"class":111},[105,33971,33972],{"class":164},"False",[105,33974,31451],{"class":115},[105,33976,33977,33980,33982,33984,33986,33988,33990],{"class":107,"line":1614},[105,33978,33979],{"class":5208},"                           transform",[105,33981,161],{"class":111},[105,33983,31478],{"class":115},[105,33985,31481],{"class":5208},[105,33987,161],{"class":111},[105,33989,1017],{"class":164},[105,33991,31489],{"class":115},[105,33993,33994,33997,33999,34001],{"class":107,"line":1619},[105,33995,33996],{"class":5208},"                           download",[105,33998,161],{"class":111},[105,34000,31461],{"class":164},[105,34002,122],{"class":115},[105,34004,34005,34008,34010,34012,34014,34016],{"class":107,"line":1633},[105,34006,34007],{"class":115},"    test_dataloader",[105,34009,161],{"class":111},[105,34011,31519],{"class":115},[105,34013,31522],{"class":5208},[105,34015,161],{"class":111},[105,34017,34018],{"class":115},"test_data,\n",[105,34020,34021],{"class":107,"line":1638},[105,34022,34023],{"class":174},"                                    # 这里是一张一张进行测试\n",[105,34025,34026,34029,34031,34033],{"class":107,"line":1644},[105,34027,34028],{"class":5208},"                                    batch_size",[105,34030,161],{"class":111},[105,34032,333],{"class":164},[105,34034,31451],{"class":115},[105,34036,34037,34040,34042,34044],{"class":107,"line":1665},[105,34038,34039],{"class":5208},"                                    shuffle",[105,34041,161],{"class":111},[105,34043,31461],{"class":164},[105,34045,31451],{"class":115},[105,34047,34048,34051,34053,34055],{"class":107,"line":1670},[105,34049,34050],{"class":5208},"                                    num_workers",[105,34052,161],{"class":111},[105,34054,307],{"class":164},[105,34056,122],{"class":115},[105,34058,34059,34061],{"class":107,"line":1684},[105,34060,4081],{"class":111},[105,34062,34063],{"class":115}," test_dataloader\n",[105,34065,34066],{"class":107,"line":1689},[105,34067,2391],{"emptyLinePlaceholder":32},[105,34069,34070],{"class":107,"line":1718},[105,34071,34072],{"class":174},"# 定义模型测试函数\n",[105,34074,34075,34077,34080],{"class":107,"line":1723},[105,34076,31932],{"class":111},[105,34078,34079],{"class":1954}," test_model_process",[105,34081,34082],{"class":115},"(model,test_dataloader):\n",[105,34084,34085],{"class":107,"line":1740},[105,34086,34087],{"class":174},"    # 将模型放到设备当中，先进行判断\n",[105,34089,34090,34092,34094,34096,34098,34100,34102],{"class":107,"line":1745},[105,34091,31222],{"class":115},[105,34093,161],{"class":111},[105,34095,31229],{"class":220},[105,34097,1695],{"class":111},[105,34099,31234],{"class":115},[105,34101,1692],{"class":111},[105,34103,34104],{"class":220}," \"cpu\"\n",[105,34106,34107,34109,34111],{"class":107,"line":1750},[105,34108,31274],{"class":115},[105,34110,161],{"class":111},[105,34112,32274],{"class":115},[105,34114,34115],{"class":107,"line":1755},[105,34116,2391],{"emptyLinePlaceholder":32},[105,34118,34119],{"class":107,"line":1769},[105,34120,34121],{"class":174},"    # 设置初始化参数\n",[105,34123,34124,34127,34129],{"class":107,"line":1774},[105,34125,34126],{"class":115},"    test_corrects",[105,34128,161],{"class":111},[105,34130,32327],{"class":164},[105,34132,34133,34136,34138],{"class":107,"line":2568},[105,34134,34135],{"class":115},"    test_num",[105,34137,161],{"class":111},[105,34139,3076],{"class":164},[105,34141,34142],{"class":107,"line":2582},[105,34143,2391],{"emptyLinePlaceholder":32},[105,34145,34146],{"class":107,"line":2590},[105,34147,34148],{"class":174},"    # 进行模型测试\n",[105,34150,34151],{"class":107,"line":2595},[105,34152,34153],{"class":174},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[105,34155,34156],{"class":107,"line":2601},[105,34157,34158],{"class":174},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[105,34160,34161,34164],{"class":107,"line":2607},[105,34162,34163],{"class":111},"    with",[105,34165,32869],{"class":115},[105,34167,34168],{"class":107,"line":2612},[105,34169,34170],{"class":174},"        # 从数据中进行\n",[105,34172,34173,34175,34178,34180],{"class":107,"line":7940},[105,34174,3394],{"class":111},[105,34176,34177],{"class":115}," test_data_x,test_data_y ",[105,34179,26028],{"class":111},[105,34181,34182],{"class":115}," test_dataloader:\n",[105,34184,34185,34188,34190],{"class":107,"line":7964},[105,34186,34187],{"class":115},"            test_data_x",[105,34189,161],{"class":111},[105,34191,34192],{"class":115},"test_data_x.to(device)\n",[105,34194,34195,34198,34200],{"class":107,"line":7969},[105,34196,34197],{"class":115},"            test_data_y",[105,34199,161],{"class":111},[105,34201,34202],{"class":115},"test_data_y.to(device)\n",[105,34204,34205],{"class":107,"line":7975},[105,34206,34207],{"class":174},"            # 设置为验证模式\n",[105,34209,34210],{"class":107,"line":8002},[105,34211,32860],{"class":115},[105,34213,34214],{"class":107,"line":8007},[105,34215,34216],{"class":174},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[105,34218,34219,34221,34223],{"class":107,"line":8013},[105,34220,32645],{"class":115},[105,34222,161],{"class":111},[105,34224,34225],{"class":115},"model(test_data_x)\n",[105,34227,34228],{"class":107,"line":8025},[105,34229,34230],{"class":174},"            # 查找每一行中最大值对应的下标\n",[105,34232,34233,34235,34237,34239,34241,34243,34245],{"class":107,"line":8037},[105,34234,32662],{"class":115},[105,34236,161],{"class":111},[105,34238,32667],{"class":115},[105,34240,32670],{"class":5208},[105,34242,161],{"class":111},[105,34244,333],{"class":164},[105,34246,122],{"class":115},[105,34248,34249],{"class":107,"line":8049},[105,34250,34251],{"class":174},"            # 计算正确率\n",[105,34253,34254],{"class":107,"line":9708},[105,34255,34256],{"class":174},"            # .data表示是一个不带梯度信息的tensor\n",[105,34258,34259],{"class":107,"line":9733},[105,34260,34261],{"class":174},"            # 如果预测正确，则准确度test_corrects加1\n",[105,34263,34264,34267,34269,34271,34273],{"class":107,"line":9756},[105,34265,34266],{"class":115},"            test_corrects",[105,34268,9469],{"class":111},[105,34270,32772],{"class":115},[105,34272,2940],{"class":111},[105,34274,34275],{"class":115},"test_data_y.data)\n",[105,34277,34278],{"class":107,"line":9780},[105,34279,34280],{"class":174},"            # 将所有的测试样本进行累计\n",[105,34282,34283,34286,34288,34291,34293],{"class":107,"line":9785},[105,34284,34285],{"class":115},"            test_num",[105,34287,9469],{"class":111},[105,34289,34290],{"class":115},"test_data_x.size(",[105,34292,307],{"class":164},[105,34294,122],{"class":115},[105,34296,34297],{"class":107,"line":9790},[105,34298,2391],{"emptyLinePlaceholder":32},[105,34300,34301],{"class":107,"line":9795},[105,34302,34303],{"class":174},"        # 计算准确度\n",[105,34305,34306,34309,34311,34314,34316],{"class":107,"line":9804},[105,34307,34308],{"class":115},"        test_acc",[105,34310,161],{"class":111},[105,34312,34313],{"class":115},"test_corrects.double().item()",[105,34315,700],{"class":111},[105,34317,34318],{"class":115},"test_num\n",[105,34320,34321],{"class":107,"line":9809},[105,34322,34323],{"class":174},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[105,34325,34326,34328,34330,34333],{"class":107,"line":9815},[105,34327,32436],{"class":164},[105,34329,116],{"class":115},[105,34331,34332],{"class":220},"\"测试的准确率：\"",[105,34334,34335],{"class":115},",test_acc)\n",[105,34337,34338],{"class":107,"line":9836},[105,34339,2391],{"emptyLinePlaceholder":32},[105,34341,34342],{"class":107,"line":9842},[105,34343,34344],{"class":174},"# 实现模型的测试功能\n",[105,34346,34347,34349,34351,34353,34355],{"class":107,"line":9856},[105,34348,1522],{"class":111},[105,34350,31205],{"class":164},[105,34352,2940],{"class":111},[105,34354,31210],{"class":220},[105,34356,3730],{"class":115},[105,34358,34359],{"class":107,"line":9862},[105,34360,34361],{"class":174},"    # 加载模型\n",[105,34363,34364,34366,34368],{"class":107,"line":9889},[105,34365,31274],{"class":115},[105,34367,161],{"class":111},[105,34369,33810],{"class":115},[105,34371,34372],{"class":107,"line":9898},[105,34373,34374],{"class":174},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[105,34376,34377],{"class":107,"line":9904},[105,34378,34379],{"class":174},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[105,34381,34382,34385,34388],{"class":107,"line":9912},[105,34383,34384],{"class":115},"    model.load_state_dict(torch.load(",[105,34386,34387],{"class":220},"'best_model.pth'",[105,34389,30482],{"class":115},[105,34391,34392],{"class":107,"line":9917},[105,34393,34394],{"class":174},"    # 数据加载\n",[105,34396,34397,34399,34401],{"class":107,"line":16596},[105,34398,34007],{"class":115},[105,34400,161],{"class":111},[105,34402,34403],{"class":115},"test_data_process()\n",[105,34405,34406],{"class":107,"line":16602},[105,34407,34408],{"class":174},"    # 加载模型测试的函数\n",[105,34410,34411],{"class":107,"line":16625},[105,34412,34413],{"class":115},"    test_model_process(model,test_dataloader)\n",[105,34415,34416],{"class":107,"line":16631},[105,34417,2391],{"emptyLinePlaceholder":32},[105,34419,34420],{"class":107,"line":16654},[105,34421,34422],{"class":174},"    # 验证集推理实现：\n",[105,34424,34425],{"class":107,"line":16668},[105,34426,34427],{"class":174},"    # 加载数据加载的更详细一些\n",[105,34429,34430,34432,34434,34436,34438,34440,34442],{"class":107,"line":16688},[105,34431,31222],{"class":115},[105,34433,161],{"class":111},[105,34435,31229],{"class":220},[105,34437,1695],{"class":111},[105,34439,31234],{"class":115},[105,34441,1692],{"class":111},[105,34443,34104],{"class":220},[105,34445,34446,34448,34450],{"class":107,"line":16694},[105,34447,31274],{"class":115},[105,34449,161],{"class":111},[105,34451,32274],{"class":115},[105,34453,34454],{"class":107,"line":16705},[105,34455,34456],{"class":174},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[105,34458,34459],{"class":107,"line":16728},[105,34460,34461],{"class":174},"    # 顺序不可改变\n",[105,34463,34464,34467,34469,34471,34474,34476,34479,34481,34484,34486,34489,34491,34494,34496,34499,34501,34504,34506,34509,34511,34514,34516,34519],{"class":107,"line":16750},[105,34465,34466],{"class":115},"    classes",[105,34468,161],{"class":111},[105,34470,1006],{"class":115},[105,34472,34473],{"class":220},"'T-shirt\u002Ftop'",[105,34475,494],{"class":115},[105,34477,34478],{"class":220},"'Trouser'",[105,34480,494],{"class":115},[105,34482,34483],{"class":220},"'Pullover'",[105,34485,494],{"class":115},[105,34487,34488],{"class":220},"'Dress'",[105,34490,494],{"class":115},[105,34492,34493],{"class":220},"'Coat'",[105,34495,494],{"class":115},[105,34497,34498],{"class":220},"'Sandal'",[105,34500,494],{"class":115},[105,34502,34503],{"class":220},"'Shirt'",[105,34505,494],{"class":115},[105,34507,34508],{"class":220},"'Sneaker'",[105,34510,494],{"class":115},[105,34512,34513],{"class":220},"'Bag'",[105,34515,494],{"class":115},[105,34517,34518],{"class":220},"'Ankle boot'",[105,34520,33231],{"class":115},[105,34522,34523,34525],{"class":107,"line":16755},[105,34524,34163],{"class":111},[105,34526,32869],{"class":115},[105,34528,34529],{"class":107,"line":16761},[105,34530,34531],{"class":174},"        # 将数据和标签都放到设备当中\n",[105,34533,34534,34536,34539,34541],{"class":107,"line":16775},[105,34535,3394],{"class":111},[105,34537,34538],{"class":115}," b_x,b_y ",[105,34540,26028],{"class":111},[105,34542,34182],{"class":115},[105,34544,34545,34547,34549],{"class":107,"line":16788},[105,34546,32595],{"class":115},[105,34548,161],{"class":111},[105,34550,32600],{"class":115},[105,34552,34553,34555,34557],{"class":107,"line":16793},[105,34554,32610],{"class":115},[105,34556,161],{"class":111},[105,34558,32615],{"class":115},[105,34560,34561],{"class":107,"line":16807},[105,34562,2391],{"emptyLinePlaceholder":32},[105,34564,34565],{"class":107,"line":16812},[105,34566,34567],{"class":174},"            # 设置模型为验证模式\n",[105,34569,34570],{"class":107,"line":16818},[105,34571,32860],{"class":115},[105,34573,34574],{"class":107,"line":16823},[105,34575,34576],{"class":174},"            # 模型推理结果\n",[105,34578,34579,34581,34583],{"class":107,"line":16837},[105,34580,32645],{"class":115},[105,34582,161],{"class":111},[105,34584,32650],{"class":115},[105,34586,34587],{"class":107,"line":16842},[105,34588,34589],{"class":174},"            # 获取最大下标，最大下标就是类别号\n",[105,34591,34592,34594,34596,34598,34600,34602,34604],{"class":107,"line":16847},[105,34593,32662],{"class":115},[105,34595,161],{"class":111},[105,34597,32667],{"class":115},[105,34599,32670],{"class":5208},[105,34601,161],{"class":111},[105,34603,333],{"class":164},[105,34605,122],{"class":115},[105,34607,34608],{"class":107,"line":16861},[105,34609,34610],{"class":174},"            # 取出张量中的数值\n",[105,34612,34613,34616,34618],{"class":107,"line":16873},[105,34614,34615],{"class":115},"            result",[105,34617,161],{"class":111},[105,34619,34620],{"class":115},"pre_lab.item()\n",[105,34622,34623,34626,34628],{"class":107,"line":16878},[105,34624,34625],{"class":115},"            label",[105,34627,161],{"class":111},[105,34629,34630],{"class":115},"b_y.item()\n",[105,34632,34633,34636,34638,34641,34644,34647,34649,34652],{"class":107,"line":16891},[105,34634,34635],{"class":164},"            print",[105,34637,116],{"class":115},[105,34639,34640],{"class":220},"\"预测值：\"",[105,34642,34643],{"class":115},",classes[result],",[105,34645,34646],{"class":220},"\"------\"",[105,34648,494],{"class":115},[105,34650,34651],{"class":220},"\"真实值：\"",[105,34653,34654],{"class":115},",classes[label])\n",[14,34656,34657],{},"（2）AlexNet",[59,34659,34660],{},[62,34661,34662],{},"神经网络构建",[96,34664,34666],{"className":30363,"code":34665,"language":30365,"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",[102,34667,34668,34674,34684,34694,34706,34710,34727,34735,34750,34762,34804,34831,34874,34900,34944,34987,35030,35057,35061,35071,35076,35104,35123,35142,35146,35151,35159,35174,35184,35198,35208,35223,35238,35253,35264,35268,35273,35283,35298,35303,35317,35332,35344,35349,35360,35365,35371,35376,35388,35408,35413,35422],{"__ignoreMap":22},[105,34669,34670,34672],{"class":107,"line":108},[105,34671,30377],{"class":111},[105,34673,30380],{"class":115},[105,34675,34676,34678,34680,34682],{"class":107,"line":28},[105,34677,30722],{"class":111},[105,34679,30725],{"class":115},[105,34681,30377],{"class":111},[105,34683,30730],{"class":115},[105,34685,34686,34688,34690,34692],{"class":107,"line":1171},[105,34687,30722],{"class":111},[105,34689,30742],{"class":115},[105,34691,30377],{"class":111},[105,34693,30747],{"class":115},[105,34695,34696,34698,34701,34703],{"class":107,"line":1186},[105,34697,30377],{"class":111},[105,34699,34700],{"class":115}," torch.nn.functional ",[105,34702,31368],{"class":111},[105,34704,34705],{"class":115}," F\n",[105,34707,34708],{"class":107,"line":1192},[105,34709,2391],{"emptyLinePlaceholder":32},[105,34711,34712,34714,34717,34719,34721,34723,34725],{"class":107,"line":1206},[105,34713,14686],{"class":111},[105,34715,34716],{"class":1954}," AlexNet",[105,34718,116],{"class":115},[105,34720,30763],{"class":1954},[105,34722,674],{"class":115},[105,34724,30768],{"class":1954},[105,34726,30771],{"class":115},[105,34728,34729,34731,34733],{"class":107,"line":1212},[105,34730,30786],{"class":111},[105,34732,30789],{"class":164},[105,34734,30792],{"class":115},[105,34736,34737,34739,34742,34744,34746,34748],{"class":107,"line":1303},[105,34738,30802],{"class":164},[105,34740,34741],{"class":115},"(AlexNet,",[105,34743,30808],{"class":164},[105,34745,30811],{"class":115},[105,34747,30814],{"class":164},[105,34749,1967],{"class":115},[105,34751,34752,34754,34757,34759],{"class":107,"line":1309},[105,34753,30830],{"class":164},[105,34755,34756],{"class":115},".ReLu",[105,34758,161],{"class":111},[105,34760,34761],{"class":115},"nn.ReLU()\n",[105,34763,34764,34766,34768,34770,34772,34774,34776,34778,34780,34782,34784,34786,34788,34790,34792,34794,34796,34798,34800,34802],{"class":107,"line":1321},[105,34765,30830],{"class":164},[105,34767,30833],{"class":115},[105,34769,161],{"class":111},[105,34771,30838],{"class":115},[105,34773,30841],{"class":5208},[105,34775,161],{"class":111},[105,34777,333],{"class":164},[105,34779,494],{"class":115},[105,34781,30850],{"class":5208},[105,34783,161],{"class":111},[105,34785,325],{"class":164},[105,34787,494],{"class":115},[105,34789,30859],{"class":5208},[105,34791,161],{"class":111},[105,34793,588],{"class":164},[105,34795,494],{"class":115},[105,34797,30914],{"class":5208},[105,34799,161],{"class":111},[105,34801,409],{"class":164},[105,34803,122],{"class":115},[105,34805,34806,34808,34810,34812,34815,34817,34819,34821,34823,34825,34827,34829],{"class":107,"line":1603},[105,34807,30830],{"class":164},[105,34809,30898],{"class":115},[105,34811,161],{"class":111},[105,34813,34814],{"class":115},"nn.MaxPool2d(",[105,34816,30859],{"class":5208},[105,34818,161],{"class":111},[105,34820,187],{"class":164},[105,34822,494],{"class":115},[105,34824,30914],{"class":5208},[105,34826,161],{"class":111},[105,34828,193],{"class":164},[105,34830,122],{"class":115},[105,34832,34833,34835,34837,34839,34841,34843,34845,34847,34849,34851,34853,34856,34858,34860,34862,34864,34866,34868,34870,34872],{"class":107,"line":1608},[105,34834,30830],{"class":164},[105,34836,30927],{"class":115},[105,34838,161],{"class":111},[105,34840,30838],{"class":115},[105,34842,30841],{"class":5208},[105,34844,161],{"class":111},[105,34846,325],{"class":164},[105,34848,494],{"class":115},[105,34850,30850],{"class":5208},[105,34852,161],{"class":111},[105,34854,34855],{"class":164},"256",[105,34857,494],{"class":115},[105,34859,30859],{"class":5208},[105,34861,161],{"class":111},[105,34863,435],{"class":164},[105,34865,494],{"class":115},[105,34867,30868],{"class":5208},[105,34869,161],{"class":111},[105,34871,193],{"class":164},[105,34873,122],{"class":115},[105,34875,34876,34878,34880,34882,34884,34886,34888,34890,34892,34894,34896,34898],{"class":107,"line":1614},[105,34877,30830],{"class":164},[105,34879,30962],{"class":115},[105,34881,161],{"class":111},[105,34883,34814],{"class":115},[105,34885,30859],{"class":5208},[105,34887,161],{"class":111},[105,34889,187],{"class":164},[105,34891,494],{"class":115},[105,34893,30914],{"class":5208},[105,34895,161],{"class":111},[105,34897,193],{"class":164},[105,34899,122],{"class":115},[105,34901,34902,34904,34907,34909,34911,34913,34915,34917,34919,34921,34923,34926,34928,34930,34932,34934,34936,34938,34940,34942],{"class":107,"line":1619},[105,34903,30830],{"class":164},[105,34905,34906],{"class":115},".c5",[105,34908,161],{"class":111},[105,34910,30838],{"class":115},[105,34912,30841],{"class":5208},[105,34914,161],{"class":111},[105,34916,34855],{"class":164},[105,34918,494],{"class":115},[105,34920,30850],{"class":5208},[105,34922,161],{"class":111},[105,34924,34925],{"class":164},"384",[105,34927,494],{"class":115},[105,34929,30859],{"class":5208},[105,34931,161],{"class":111},[105,34933,187],{"class":164},[105,34935,494],{"class":115},[105,34937,30868],{"class":5208},[105,34939,161],{"class":111},[105,34941,333],{"class":164},[105,34943,122],{"class":115},[105,34945,34946,34948,34951,34953,34955,34957,34959,34961,34963,34965,34967,34969,34971,34973,34975,34977,34979,34981,34983,34985],{"class":107,"line":1633},[105,34947,30830],{"class":164},[105,34949,34950],{"class":115},".c6",[105,34952,161],{"class":111},[105,34954,30838],{"class":115},[105,34956,30841],{"class":5208},[105,34958,161],{"class":111},[105,34960,34925],{"class":164},[105,34962,494],{"class":115},[105,34964,30850],{"class":5208},[105,34966,161],{"class":111},[105,34968,34925],{"class":164},[105,34970,494],{"class":115},[105,34972,30859],{"class":5208},[105,34974,161],{"class":111},[105,34976,187],{"class":164},[105,34978,494],{"class":115},[105,34980,30868],{"class":5208},[105,34982,161],{"class":111},[105,34984,333],{"class":164},[105,34986,122],{"class":115},[105,34988,34989,34991,34994,34996,34998,35000,35002,35004,35006,35008,35010,35012,35014,35016,35018,35020,35022,35024,35026,35028],{"class":107,"line":1638},[105,34990,30830],{"class":164},[105,34992,34993],{"class":115},".c7",[105,34995,161],{"class":111},[105,34997,30838],{"class":115},[105,34999,30841],{"class":5208},[105,35001,161],{"class":111},[105,35003,34925],{"class":164},[105,35005,494],{"class":115},[105,35007,30850],{"class":5208},[105,35009,161],{"class":111},[105,35011,34855],{"class":164},[105,35013,494],{"class":115},[105,35015,30859],{"class":5208},[105,35017,161],{"class":111},[105,35019,187],{"class":164},[105,35021,494],{"class":115},[105,35023,30868],{"class":5208},[105,35025,161],{"class":111},[105,35027,333],{"class":164},[105,35029,122],{"class":115},[105,35031,35032,35034,35037,35039,35041,35043,35045,35047,35049,35051,35053,35055],{"class":107,"line":1644},[105,35033,30830],{"class":164},[105,35035,35036],{"class":115},".s8",[105,35038,161],{"class":111},[105,35040,34814],{"class":115},[105,35042,30859],{"class":5208},[105,35044,161],{"class":111},[105,35046,187],{"class":164},[105,35048,494],{"class":115},[105,35050,30914],{"class":5208},[105,35052,161],{"class":111},[105,35054,193],{"class":164},[105,35056,122],{"class":115},[105,35058,35059],{"class":107,"line":1665},[105,35060,30987],{"class":174},[105,35062,35063,35065,35067,35069],{"class":107,"line":1670},[105,35064,30830],{"class":164},[105,35066,30994],{"class":115},[105,35068,161],{"class":111},[105,35070,30999],{"class":115},[105,35072,35073],{"class":107,"line":1684},[105,35074,35075],{"class":174},"       # 定义全连接层\n",[105,35077,35078,35080,35083,35085,35087,35089,35091,35093,35095,35097,35099,35102],{"class":107,"line":1689},[105,35079,30830],{"class":164},[105,35081,35082],{"class":115},".f1",[105,35084,161],{"class":111},[105,35086,31016],{"class":115},[105,35088,460],{"class":164},[105,35090,571],{"class":111},[105,35092,460],{"class":164},[105,35094,571],{"class":111},[105,35096,34855],{"class":164},[105,35098,494],{"class":115},[105,35100,35101],{"class":164},"4096",[105,35103,122],{"class":115},[105,35105,35106,35108,35111,35113,35115,35117,35119,35121],{"class":107,"line":1718},[105,35107,30830],{"class":164},[105,35109,35110],{"class":115},".f2",[105,35112,161],{"class":111},[105,35114,31016],{"class":115},[105,35116,35101],{"class":164},[105,35118,494],{"class":115},[105,35120,35101],{"class":164},[105,35122,122],{"class":115},[105,35124,35125,35127,35130,35132,35134,35136,35138,35140],{"class":107,"line":1723},[105,35126,30830],{"class":164},[105,35128,35129],{"class":115},".f3",[105,35131,161],{"class":111},[105,35133,31016],{"class":115},[105,35135,35101],{"class":164},[105,35137,494],{"class":115},[105,35139,562],{"class":164},[105,35141,122],{"class":115},[105,35143,35144],{"class":107,"line":1740},[105,35145,2391],{"emptyLinePlaceholder":32},[105,35147,35148],{"class":107,"line":1745},[105,35149,35150],{"class":174},"    # 定义前向传播\n",[105,35152,35153,35155,35157],{"class":107,"line":1750},[105,35154,30786],{"class":111},[105,35156,31078],{"class":1954},[105,35158,31081],{"class":115},[105,35160,35161,35163,35165,35167,35170,35172],{"class":107,"line":1755},[105,35162,31086],{"class":115},[105,35164,161],{"class":111},[105,35166,30808],{"class":164},[105,35168,35169],{"class":115},".ReLu(",[105,35171,30808],{"class":164},[105,35173,31098],{"class":115},[105,35175,35176,35178,35180,35182],{"class":107,"line":1769},[105,35177,31086],{"class":115},[105,35179,161],{"class":111},[105,35181,30808],{"class":164},[105,35183,31109],{"class":115},[105,35185,35186,35188,35190,35192,35194,35196],{"class":107,"line":1774},[105,35187,31086],{"class":115},[105,35189,161],{"class":111},[105,35191,30808],{"class":164},[105,35193,35169],{"class":115},[105,35195,30808],{"class":164},[105,35197,31124],{"class":115},[105,35199,35200,35202,35204,35206],{"class":107,"line":2568},[105,35201,31086],{"class":115},[105,35203,161],{"class":111},[105,35205,30808],{"class":164},[105,35207,31135],{"class":115},[105,35209,35210,35212,35214,35216,35218,35220],{"class":107,"line":2582},[105,35211,31086],{"class":115},[105,35213,161],{"class":111},[105,35215,30808],{"class":164},[105,35217,35169],{"class":115},[105,35219,30808],{"class":164},[105,35221,35222],{"class":115},".c5(x))\n",[105,35224,35225,35227,35229,35231,35233,35235],{"class":107,"line":2590},[105,35226,31086],{"class":115},[105,35228,161],{"class":111},[105,35230,30808],{"class":164},[105,35232,35169],{"class":115},[105,35234,30808],{"class":164},[105,35236,35237],{"class":115},".c6(x))\n",[105,35239,35240,35242,35244,35246,35248,35250],{"class":107,"line":2595},[105,35241,31086],{"class":115},[105,35243,161],{"class":111},[105,35245,30808],{"class":164},[105,35247,35169],{"class":115},[105,35249,30808],{"class":164},[105,35251,35252],{"class":115},".c7(x))\n",[105,35254,35255,35257,35259,35261],{"class":107,"line":2601},[105,35256,31086],{"class":115},[105,35258,161],{"class":111},[105,35260,30808],{"class":164},[105,35262,35263],{"class":115},".s8(x)\n",[105,35265,35266],{"class":107,"line":2607},[105,35267,2391],{"emptyLinePlaceholder":32},[105,35269,35270],{"class":107,"line":2612},[105,35271,35272],{"class":174},"        # 展平加线性全连接层\n",[105,35274,35275,35277,35279,35281],{"class":107,"line":7940},[105,35276,31086],{"class":115},[105,35278,161],{"class":111},[105,35280,30808],{"class":164},[105,35282,31146],{"class":115},[105,35284,35285,35287,35289,35291,35293,35295],{"class":107,"line":7964},[105,35286,31086],{"class":115},[105,35288,161],{"class":111},[105,35290,30808],{"class":164},[105,35292,35169],{"class":115},[105,35294,30808],{"class":164},[105,35296,35297],{"class":115},".f1(x))\n",[105,35299,35300],{"class":107,"line":7969},[105,35301,35302],{"class":174},"        # 还需要dropout对神经元随机进行失活\n",[105,35304,35305,35307,35309,35312,35315],{"class":107,"line":7975},[105,35306,31086],{"class":115},[105,35308,161],{"class":111},[105,35310,35311],{"class":115},"F.dropout(x,",[105,35313,35314],{"class":164},"0.5",[105,35316,122],{"class":115},[105,35318,35319,35321,35323,35325,35327,35329],{"class":107,"line":8002},[105,35320,31086],{"class":115},[105,35322,161],{"class":111},[105,35324,30808],{"class":164},[105,35326,35169],{"class":115},[105,35328,30808],{"class":164},[105,35330,35331],{"class":115},".f2(x))\n",[105,35333,35334,35336,35338,35340,35342],{"class":107,"line":8007},[105,35335,31086],{"class":115},[105,35337,161],{"class":111},[105,35339,35311],{"class":115},[105,35341,35314],{"class":164},[105,35343,122],{"class":115},[105,35345,35346],{"class":107,"line":8013},[105,35347,35348],{"class":174},"        # 直接输出\n",[105,35350,35351,35353,35355,35357],{"class":107,"line":8025},[105,35352,31086],{"class":115},[105,35354,161],{"class":111},[105,35356,30808],{"class":164},[105,35358,35359],{"class":115},".f3(x)\n",[105,35361,35362],{"class":107,"line":8037},[105,35363,35364],{"class":174},"        # 前向传播输出\n",[105,35366,35367,35369],{"class":107,"line":8049},[105,35368,14744],{"class":111},[105,35370,31194],{"class":115},[105,35372,35373],{"class":107,"line":9708},[105,35374,35375],{"class":174},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[105,35377,35378,35380,35382,35384,35386],{"class":107,"line":9733},[105,35379,1522],{"class":111},[105,35381,31205],{"class":164},[105,35383,2940],{"class":111},[105,35385,31210],{"class":220},[105,35387,3730],{"class":115},[105,35389,35390,35392,35394,35396,35398,35400,35402,35404,35406],{"class":107,"line":9756},[105,35391,31222],{"class":115},[105,35393,161],{"class":111},[105,35395,30436],{"class":115},[105,35397,31229],{"class":220},[105,35399,1695],{"class":111},[105,35401,31234],{"class":115},[105,35403,1692],{"class":111},[105,35405,30461],{"class":220},[105,35407,122],{"class":115},[105,35409,35410],{"class":107,"line":9780},[105,35411,35412],{"class":174},"    # 模型实例化，然后将实例化的模型放到设备中\n",[105,35414,35415,35417,35419],{"class":107,"line":9785},[105,35416,31274],{"class":115},[105,35418,161],{"class":111},[105,35420,35421],{"class":115},"AlexNet().to(device)\n",[105,35423,35424,35426,35428,35430,35432,35435,35437,35439],{"class":107,"line":9790},[105,35425,31284],{"class":164},[105,35427,31287],{"class":115},[105,35429,333],{"class":164},[105,35431,494],{"class":115},[105,35433,35434],{"class":164},"227",[105,35436,494],{"class":115},[105,35438,35434],{"class":164},[105,35440,31300],{"class":115},[59,35442,35443],{"start":28},[62,35444,31313],{},[96,35446,35448],{"className":30363,"code":35447,"language":30365,"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",[102,35449,35450,35456,35462,35472,35478,35488,35498,35508,35518,35528,35532,35543,35553,35557,35561,35565,35573,35585,35595,35611,35621,35653,35667,35677,35687,35691,35701,35715,35725,35735,35745,35751,35755,35759,35763,35767,35771,35779,35799,35803,35807,35811,35815,35819,35835,35839,35843,35851,35855,35859,35867,35871,35875,35879,35887,35891,35895,35899,35903,35911,35915,35923,35927,35935,35939,35947,35951,35959,35963,35967,35975,35979,35983,35987,35999,36023,36037,36041,36045,36049,36057,36061,36069,36073,36081,36085,36093,36097,36105,36109,36117,36121,36133,36137,36145,36149,36157,36161,36165,36169,36173,36181,36185,36201,36205,36213,36217,36221,36225,36229,36233,36237,36241,36257,36261,36273,36277,36289,36293,36305,36309,36317,36321,36329,36333,36337,36342,36348,36352,36361,36365,36382,36386,36395,36399,36417,36430,36435,36448,36452,36456,36464,36468,36472,36480,36484,36492,36496,36504,36508,36512,36554,36596,36600,36604,36620,36624,36640,36644,36648,36656,36660,36664,36676,36714,36719,36724,36733,36737,36751,36761,36767,36773,36779,36785,36789,36793,36799,36803,36807,36815,36819,36837,36841,36845,36849,36865,36869,36873,36877,36881,36885,36905,36925,36929,36933,36937,36945,36953,36957,36973,36993,37013,37017,37021,37029,37037,37041,37045,37049,37061,37065,37075,37083,37100],{"__ignoreMap":22},[105,35451,35452,35454],{"class":107,"line":108},[105,35453,30377],{"class":111},[105,35455,31807],{"class":115},[105,35457,35458,35460],{"class":107,"line":28},[105,35459,30377],{"class":111},[105,35461,31814],{"class":115},[105,35463,35464,35466,35468,35470],{"class":107,"line":1171},[105,35465,30377],{"class":111},[105,35467,31825],{"class":115},[105,35469,31368],{"class":111},[105,35471,31830],{"class":115},[105,35473,35474,35476],{"class":107,"line":1186},[105,35475,30377],{"class":111},[105,35477,30380],{"class":115},[105,35479,35480,35482,35484,35486],{"class":107,"line":1192},[105,35481,30722],{"class":111},[105,35483,31400],{"class":115},[105,35485,30377],{"class":111},[105,35487,31847],{"class":115},[105,35489,35490,35492,35494,35496],{"class":107,"line":1206},[105,35491,30722],{"class":111},[105,35493,31353],{"class":115},[105,35495,30377],{"class":111},[105,35497,31358],{"class":115},[105,35499,35500,35502,35504,35506],{"class":107,"line":1212},[105,35501,30722],{"class":111},[105,35503,31383],{"class":115},[105,35505,30377],{"class":111},[105,35507,31388],{"class":115},[105,35509,35510,35512,35514,35516],{"class":107,"line":1303},[105,35511,30377],{"class":111},[105,35513,31400],{"class":115},[105,35515,31368],{"class":111},[105,35517,31405],{"class":115},[105,35519,35520,35522,35524,35526],{"class":107,"line":1309},[105,35521,30377],{"class":111},[105,35523,31417],{"class":115},[105,35525,31368],{"class":111},[105,35527,31422],{"class":115},[105,35529,35530],{"class":107,"line":1321},[105,35531,31892],{"class":174},[105,35533,35534,35536,35538,35540],{"class":107,"line":1603},[105,35535,30722],{"class":111},[105,35537,31899],{"class":115},[105,35539,30377],{"class":111},[105,35541,35542],{"class":115}," AlexNet\n",[105,35544,35545,35547,35549,35551],{"class":107,"line":1608},[105,35546,30722],{"class":111},[105,35548,30725],{"class":115},[105,35550,30377],{"class":111},[105,35552,30730],{"class":115},[105,35554,35555],{"class":107,"line":1614},[105,35556,2391],{"emptyLinePlaceholder":32},[105,35558,35559],{"class":107,"line":1619},[105,35560,2391],{"emptyLinePlaceholder":32},[105,35562,35563],{"class":107,"line":1633},[105,35564,31927],{"class":174},[105,35566,35567,35569,35571],{"class":107,"line":1638},[105,35568,31932],{"class":111},[105,35570,31935],{"class":1954},[105,35572,31938],{"class":115},[105,35574,35575,35577,35579,35581,35583],{"class":107,"line":1644},[105,35576,31943],{"class":115},[105,35578,161],{"class":111},[105,35580,31440],{"class":115},[105,35582,31448],{"class":220},[105,35584,31451],{"class":115},[105,35586,35587,35589,35591,35593],{"class":107,"line":1665},[105,35588,31956],{"class":5208},[105,35590,161],{"class":111},[105,35592,31461],{"class":164},[105,35594,31451],{"class":115},[105,35596,35597,35599,35601,35603,35605,35607,35609],{"class":107,"line":1670},[105,35598,31967],{"class":5208},[105,35600,161],{"class":111},[105,35602,31478],{"class":115},[105,35604,31481],{"class":5208},[105,35606,161],{"class":111},[105,35608,35434],{"class":164},[105,35610,31489],{"class":115},[105,35612,35613,35615,35617,35619],{"class":107,"line":1684},[105,35614,31984],{"class":5208},[105,35616,161],{"class":111},[105,35618,31461],{"class":164},[105,35620,122],{"class":115},[105,35622,35623,35625,35627,35629,35631,35633,35635,35637,35639,35641,35643,35645,35647,35649,35651],{"class":107,"line":1689},[105,35624,31995],{"class":115},[105,35626,161],{"class":111},[105,35628,32000],{"class":115},[105,35630,32003],{"class":164},[105,35632,116],{"class":115},[105,35634,32008],{"class":164},[105,35636,571],{"class":111},[105,35638,7350],{"class":164},[105,35640,32015],{"class":115},[105,35642,32003],{"class":164},[105,35644,116],{"class":115},[105,35646,32022],{"class":164},[105,35648,571],{"class":111},[105,35650,7350],{"class":164},[105,35652,32029],{"class":115},[105,35654,35655,35657,35659,35661,35663,35665],{"class":107,"line":1718},[105,35656,32034],{"class":115},[105,35658,161],{"class":111},[105,35660,32039],{"class":115},[105,35662,31522],{"class":5208},[105,35664,161],{"class":111},[105,35666,31527],{"class":115},[105,35668,35669,35671,35673,35675],{"class":107,"line":1723},[105,35670,32050],{"class":5208},[105,35672,161],{"class":111},[105,35674,32055],{"class":164},[105,35676,31451],{"class":115},[105,35678,35679,35681,35683,35685],{"class":107,"line":1740},[105,35680,32062],{"class":5208},[105,35682,161],{"class":111},[105,35684,31461],{"class":164},[105,35686,31451],{"class":115},[105,35688,35689],{"class":107,"line":1745},[105,35690,32073],{"class":174},[105,35692,35693,35695,35697,35699],{"class":107,"line":1750},[105,35694,32078],{"class":5208},[105,35696,161],{"class":111},[105,35698,511],{"class":164},[105,35700,122],{"class":115},[105,35702,35703,35705,35707,35709,35711,35713],{"class":107,"line":1755},[105,35704,32089],{"class":115},[105,35706,161],{"class":111},[105,35708,31519],{"class":115},[105,35710,31522],{"class":5208},[105,35712,161],{"class":111},[105,35714,32100],{"class":115},[105,35716,35717,35719,35721,35723],{"class":107,"line":1769},[105,35718,32105],{"class":5208},[105,35720,161],{"class":111},[105,35722,32055],{"class":164},[105,35724,31451],{"class":115},[105,35726,35727,35729,35731,35733],{"class":107,"line":1774},[105,35728,32116],{"class":5208},[105,35730,161],{"class":111},[105,35732,31461],{"class":164},[105,35734,31451],{"class":115},[105,35736,35737,35739,35741,35743],{"class":107,"line":2568},[105,35738,32127],{"class":5208},[105,35740,161],{"class":111},[105,35742,511],{"class":164},[105,35744,122],{"class":115},[105,35746,35747,35749],{"class":107,"line":2582},[105,35748,4081],{"class":111},[105,35750,32140],{"class":115},[105,35752,35753],{"class":107,"line":2590},[105,35754,2391],{"emptyLinePlaceholder":32},[105,35756,35757],{"class":107,"line":2595},[105,35758,32149],{"class":174},[105,35760,35761],{"class":107,"line":2601},[105,35762,32154],{"class":174},[105,35764,35765],{"class":107,"line":2607},[105,35766,2391],{"emptyLinePlaceholder":32},[105,35768,35769],{"class":107,"line":2612},[105,35770,32163],{"class":174},[105,35772,35773,35775,35777],{"class":107,"line":7940},[105,35774,31932],{"class":111},[105,35776,32170],{"class":1954},[105,35778,32173],{"class":115},[105,35780,35781,35783,35785,35787,35789,35791,35793,35795,35797],{"class":107,"line":7964},[105,35782,31222],{"class":115},[105,35784,161],{"class":111},[105,35786,30436],{"class":115},[105,35788,31229],{"class":220},[105,35790,1695],{"class":111},[105,35792,31234],{"class":115},[105,35794,1692],{"class":111},[105,35796,32192],{"class":220},[105,35798,122],{"class":115},[105,35800,35801],{"class":107,"line":7969},[105,35802,2391],{"emptyLinePlaceholder":32},[105,35804,35805],{"class":107,"line":7975},[105,35806,2391],{"emptyLinePlaceholder":32},[105,35808,35809],{"class":107,"line":8002},[105,35810,32207],{"class":174},[105,35812,35813],{"class":107,"line":8007},[105,35814,32212],{"class":174},[105,35816,35817],{"class":107,"line":8013},[105,35818,32217],{"class":174},[105,35820,35821,35823,35825,35827,35829,35831,35833],{"class":107,"line":8025},[105,35822,32222],{"class":115},[105,35824,161],{"class":111},[105,35826,32227],{"class":115},[105,35828,32230],{"class":5208},[105,35830,161],{"class":111},[105,35832,32235],{"class":164},[105,35834,122],{"class":115},[105,35836,35837],{"class":107,"line":8037},[105,35838,2391],{"emptyLinePlaceholder":32},[105,35840,35841],{"class":107,"line":8049},[105,35842,32246],{"class":174},[105,35844,35845,35847,35849],{"class":107,"line":9708},[105,35846,32251],{"class":115},[105,35848,161],{"class":111},[105,35850,32256],{"class":115},[105,35852,35853],{"class":107,"line":9733},[105,35854,2391],{"emptyLinePlaceholder":32},[105,35856,35857],{"class":107,"line":9756},[105,35858,32265],{"class":174},[105,35860,35861,35863,35865],{"class":107,"line":9780},[105,35862,31274],{"class":115},[105,35864,161],{"class":111},[105,35866,32274],{"class":115},[105,35868,35869],{"class":107,"line":9785},[105,35870,32279],{"class":174},[105,35872,35873],{"class":107,"line":9790},[105,35874,32284],{"class":174},[105,35876,35877],{"class":107,"line":9795},[105,35878,32289],{"class":174},[105,35880,35881,35883,35885],{"class":107,"line":9804},[105,35882,32294],{"class":115},[105,35884,161],{"class":111},[105,35886,32299],{"class":115},[105,35888,35889],{"class":107,"line":9809},[105,35890,2391],{"emptyLinePlaceholder":32},[105,35892,35893],{"class":107,"line":9815},[105,35894,2391],{"emptyLinePlaceholder":32},[105,35896,35897],{"class":107,"line":9836},[105,35898,32312],{"class":174},[105,35900,35901],{"class":107,"line":9842},[105,35902,32317],{"class":174},[105,35904,35905,35907,35909],{"class":107,"line":9856},[105,35906,32322],{"class":115},[105,35908,161],{"class":111},[105,35910,32327],{"class":164},[105,35912,35913],{"class":107,"line":9862},[105,35914,32332],{"class":174},[105,35916,35917,35919,35921],{"class":107,"line":9889},[105,35918,32337],{"class":115},[105,35920,161],{"class":111},[105,35922,32342],{"class":115},[105,35924,35925],{"class":107,"line":9898},[105,35926,32347],{"class":174},[105,35928,35929,35931,35933],{"class":107,"line":9904},[105,35930,32352],{"class":115},[105,35932,161],{"class":111},[105,35934,32342],{"class":115},[105,35936,35937],{"class":107,"line":9912},[105,35938,32361],{"class":174},[105,35940,35941,35943,35945],{"class":107,"line":9917},[105,35942,32366],{"class":115},[105,35944,161],{"class":111},[105,35946,32342],{"class":115},[105,35948,35949],{"class":107,"line":16596},[105,35950,32375],{"class":174},[105,35952,35953,35955,35957],{"class":107,"line":16602},[105,35954,32380],{"class":115},[105,35956,161],{"class":111},[105,35958,32342],{"class":115},[105,35960,35961],{"class":107,"line":16625},[105,35962,2391],{"emptyLinePlaceholder":32},[105,35964,35965],{"class":107,"line":16631},[105,35966,32393],{"class":174},[105,35968,35969,35971,35973],{"class":107,"line":16654},[105,35970,32398],{"class":115},[105,35972,161],{"class":111},[105,35974,32403],{"class":115},[105,35976,35977],{"class":107,"line":16668},[105,35978,2391],{"emptyLinePlaceholder":32},[105,35980,35981],{"class":107,"line":16688},[105,35982,2391],{"emptyLinePlaceholder":32},[105,35984,35985],{"class":107,"line":16694},[105,35986,32416],{"class":174},[105,35988,35989,35991,35993,35995,35997],{"class":107,"line":16705},[105,35990,3192],{"class":111},[105,35992,32423],{"class":115},[105,35994,26028],{"class":111},[105,35996,32428],{"class":164},[105,35998,32431],{"class":115},[105,36000,36001,36003,36005,36007,36009,36011,36013,36015,36017,36019,36021],{"class":107,"line":16728},[105,36002,32436],{"class":164},[105,36004,116],{"class":115},[105,36006,32441],{"class":220},[105,36008,32444],{"class":164},[105,36010,700],{"class":220},[105,36012,32444],{"class":164},[105,36014,367],{"class":220},[105,36016,32453],{"class":115},[105,36018,648],{"class":111},[105,36020,333],{"class":164},[105,36022,30482],{"class":115},[105,36024,36025,36027,36029,36031,36033,36035],{"class":107,"line":16750},[105,36026,32436],{"class":164},[105,36028,116],{"class":115},[105,36030,32468],{"class":220},[105,36032,571],{"class":111},[105,36034,562],{"class":164},[105,36036,122],{"class":115},[105,36038,36039],{"class":107,"line":16755},[105,36040,2391],{"emptyLinePlaceholder":32},[105,36042,36043],{"class":107,"line":16761},[105,36044,32483],{"class":174},[105,36046,36047],{"class":107,"line":16775},[105,36048,32488],{"class":174},[105,36050,36051,36053,36055],{"class":107,"line":16788},[105,36052,32493],{"class":115},[105,36054,161],{"class":111},[105,36056,32327],{"class":164},[105,36058,36059],{"class":107,"line":16793},[105,36060,32502],{"class":174},[105,36062,36063,36065,36067],{"class":107,"line":16807},[105,36064,32507],{"class":115},[105,36066,161],{"class":111},[105,36068,3076],{"class":164},[105,36070,36071],{"class":107,"line":16812},[105,36072,32516],{"class":174},[105,36074,36075,36077,36079],{"class":107,"line":16818},[105,36076,32521],{"class":115},[105,36078,161],{"class":111},[105,36080,32327],{"class":164},[105,36082,36083],{"class":107,"line":16823},[105,36084,32530],{"class":174},[105,36086,36087,36089,36091],{"class":107,"line":16837},[105,36088,32535],{"class":115},[105,36090,161],{"class":111},[105,36092,3076],{"class":164},[105,36094,36095],{"class":107,"line":16842},[105,36096,32544],{"class":174},[105,36098,36099,36101,36103],{"class":107,"line":16847},[105,36100,32549],{"class":115},[105,36102,161],{"class":111},[105,36104,3076],{"class":164},[105,36106,36107],{"class":107,"line":16861},[105,36108,32558],{"class":174},[105,36110,36111,36113,36115],{"class":107,"line":16873},[105,36112,32563],{"class":115},[105,36114,161],{"class":111},[105,36116,3076],{"class":164},[105,36118,36119],{"class":107,"line":16878},[105,36120,32572],{"class":174},[105,36122,36123,36125,36127,36129,36131],{"class":107,"line":16891},[105,36124,3394],{"class":111},[105,36126,31586],{"class":115},[105,36128,26028],{"class":111},[105,36130,31591],{"class":164},[105,36132,32585],{"class":115},[105,36134,36135],{"class":107,"line":16896},[105,36136,32590],{"class":174},[105,36138,36139,36141,36143],{"class":107,"line":16901},[105,36140,32595],{"class":115},[105,36142,161],{"class":111},[105,36144,32600],{"class":115},[105,36146,36147],{"class":107,"line":16906},[105,36148,32605],{"class":174},[105,36150,36151,36153,36155],{"class":107,"line":16919},[105,36152,32610],{"class":115},[105,36154,161],{"class":111},[105,36156,32615],{"class":115},[105,36158,36159],{"class":107,"line":16924},[105,36160,32621],{"class":174},[105,36162,36163],{"class":107,"line":32618},[105,36164,32627],{"class":115},[105,36166,36167],{"class":107,"line":32624},[105,36168,32633],{"class":174},[105,36170,36171],{"class":107,"line":32630},[105,36172,32639],{"class":174},[105,36174,36175,36177,36179],{"class":107,"line":32636},[105,36176,32645],{"class":115},[105,36178,161],{"class":111},[105,36180,32650],{"class":115},[105,36182,36183],{"class":107,"line":32642},[105,36184,32656],{"class":174},[105,36186,36187,36189,36191,36193,36195,36197,36199],{"class":107,"line":32653},[105,36188,32662],{"class":115},[105,36190,161],{"class":111},[105,36192,32667],{"class":115},[105,36194,32670],{"class":5208},[105,36196,161],{"class":111},[105,36198,333],{"class":164},[105,36200,122],{"class":115},[105,36202,36203],{"class":107,"line":32659},[105,36204,32682],{"class":174},[105,36206,36207,36209,36211],{"class":107,"line":32679},[105,36208,32688],{"class":115},[105,36210,161],{"class":111},[105,36212,32693],{"class":115},[105,36214,36215],{"class":107,"line":32685},[105,36216,32699],{"class":174},[105,36218,36219],{"class":107,"line":32696},[105,36220,32705],{"class":115},[105,36222,36223],{"class":107,"line":32702},[105,36224,32711],{"class":174},[105,36226,36227],{"class":107,"line":32708},[105,36228,32717],{"class":115},[105,36230,36231],{"class":107,"line":32714},[105,36232,32723],{"class":174},[105,36234,36235],{"class":107,"line":32720},[105,36236,32729],{"class":115},[105,36238,36239],{"class":107,"line":32726},[105,36240,32735],{"class":174},[105,36242,36243,36245,36247,36249,36251,36253,36255],{"class":107,"line":32732},[105,36244,32741],{"class":115},[105,36246,9469],{"class":111},[105,36248,32746],{"class":115},[105,36250,571],{"class":111},[105,36252,32751],{"class":115},[105,36254,307],{"class":164},[105,36256,122],{"class":115},[105,36258,36259],{"class":107,"line":32738},[105,36260,32761],{"class":174},[105,36262,36263,36265,36267,36269,36271],{"class":107,"line":32758},[105,36264,32767],{"class":115},[105,36266,9469],{"class":111},[105,36268,32772],{"class":115},[105,36270,2940],{"class":111},[105,36272,32777],{"class":115},[105,36274,36275],{"class":107,"line":32764},[105,36276,32783],{"class":174},[105,36278,36279,36281,36283,36285,36287],{"class":107,"line":32780},[105,36280,32789],{"class":115},[105,36282,9469],{"class":111},[105,36284,32751],{"class":115},[105,36286,307],{"class":164},[105,36288,122],{"class":115},[105,36290,36291],{"class":107,"line":32786},[105,36292,32803],{"class":174},[105,36294,36295,36297,36299,36301,36303],{"class":107,"line":32800},[105,36296,3394],{"class":111},[105,36298,32811],{"class":115},[105,36300,26028],{"class":111},[105,36302,31591],{"class":164},[105,36304,32818],{"class":115},[105,36306,36307],{"class":107,"line":32806},[105,36308,32824],{"class":174},[105,36310,36311,36313,36315],{"class":107,"line":32821},[105,36312,32595],{"class":115},[105,36314,161],{"class":111},[105,36316,32600],{"class":115},[105,36318,36319],{"class":107,"line":32827},[105,36320,32839],{"class":174},[105,36322,36323,36325,36327],{"class":107,"line":32836},[105,36324,32610],{"class":115},[105,36326,161],{"class":111},[105,36328,32615],{"class":115},[105,36330,36331],{"class":107,"line":32842},[105,36332,32854],{"class":174},[105,36334,36335],{"class":107,"line":32851},[105,36336,32860],{"class":115},[105,36338,36339],{"class":107,"line":32857},[105,36340,36341],{"class":174},"            # 验证时不计算梯度以节省内存\u002F计算\n",[105,36343,36344,36346],{"class":107,"line":32863},[105,36345,32866],{"class":111},[105,36347,32869],{"class":115},[105,36349,36350],{"class":107,"line":32872},[105,36351,32875],{"class":174},[105,36353,36354,36357,36359],{"class":107,"line":32878},[105,36355,36356],{"class":115},"                output",[105,36358,161],{"class":111},[105,36360,32650],{"class":115},[105,36362,36363],{"class":107,"line":32889},[105,36364,32892],{"class":174},[105,36366,36367,36370,36372,36374,36376,36378,36380],{"class":107,"line":32895},[105,36368,36369],{"class":115},"                pre_lab",[105,36371,161],{"class":111},[105,36373,32667],{"class":115},[105,36375,32670],{"class":5208},[105,36377,161],{"class":111},[105,36379,333],{"class":164},[105,36381,122],{"class":115},[105,36383,36384],{"class":107,"line":32914},[105,36385,32917],{"class":174},[105,36387,36388,36391,36393],{"class":107,"line":32920},[105,36389,36390],{"class":115},"                val_batch_loss",[105,36392,161],{"class":111},[105,36394,32693],{"class":115},[105,36396,36397],{"class":107,"line":32931},[105,36398,32934],{"class":174},[105,36400,36401,36404,36406,36409,36411,36413,36415],{"class":107,"line":32937},[105,36402,36403],{"class":115},"                val_loss",[105,36405,9469],{"class":111},[105,36407,36408],{"class":115},"val_batch_loss.item()",[105,36410,571],{"class":111},[105,36412,32751],{"class":115},[105,36414,307],{"class":164},[105,36416,122],{"class":115},[105,36418,36419,36422,36424,36426,36428],{"class":107,"line":32957},[105,36420,36421],{"class":115},"                val_corrects",[105,36423,9469],{"class":111},[105,36425,32772],{"class":115},[105,36427,2940],{"class":111},[105,36429,32777],{"class":115},[105,36431,36432],{"class":107,"line":32973},[105,36433,36434],{"class":174},"            # 当前用于验证的样本数量\n",[105,36436,36437,36440,36442,36444,36446],{"class":107,"line":32979},[105,36438,36439],{"class":115},"            val_num",[105,36441,9469],{"class":111},[105,36443,32751],{"class":115},[105,36445,307],{"class":164},[105,36447,122],{"class":115},[105,36449,36450],{"class":107,"line":32993},[105,36451,32996],{"class":174},[105,36453,36454],{"class":107,"line":32999},[105,36455,33002],{"class":174},[105,36457,36458,36460,36462],{"class":107,"line":33005},[105,36459,33008],{"class":115},[105,36461,700],{"class":111},[105,36463,33013],{"class":115},[105,36465,36466],{"class":107,"line":33016},[105,36467,33019],{"class":174},[105,36469,36470],{"class":107,"line":33022},[105,36471,33025],{"class":174},[105,36473,36474,36476,36478],{"class":107,"line":33028},[105,36475,33031],{"class":115},[105,36477,700],{"class":111},[105,36479,33013],{"class":115},[105,36481,36482],{"class":107,"line":33038},[105,36483,33041],{"class":174},[105,36485,36486,36488,36490],{"class":107,"line":33044},[105,36487,33047],{"class":115},[105,36489,700],{"class":111},[105,36491,33052],{"class":115},[105,36493,36494],{"class":107,"line":33055},[105,36495,33058],{"class":174},[105,36497,36498,36500,36502],{"class":107,"line":33061},[105,36499,33064],{"class":115},[105,36501,700],{"class":111},[105,36503,33052],{"class":115},[105,36505,36506],{"class":107,"line":33071},[105,36507,2391],{"emptyLinePlaceholder":32},[105,36509,36510],{"class":107,"line":33076},[105,36511,33079],{"class":174},[105,36513,36514,36516,36518,36520,36522,36524,36526,36528,36530,36532,36534,36536,36538,36540,36542,36544,36546,36548,36550,36552],{"class":107,"line":33082},[105,36515,32436],{"class":164},[105,36517,116],{"class":115},[105,36519,3583],{"class":220},[105,36521,32444],{"class":164},[105,36523,33093],{"class":220},[105,36525,1012],{"class":164},[105,36527,33098],{"class":111},[105,36529,1062],{"class":164},[105,36531,33103],{"class":220},[105,36533,1012],{"class":164},[105,36535,33098],{"class":111},[105,36537,1062],{"class":164},[105,36539,3583],{"class":220},[105,36541,33114],{"class":115},[105,36543,648],{"class":111},[105,36545,333],{"class":164},[105,36547,33121],{"class":115},[105,36549,648],{"class":111},[105,36551,333],{"class":164},[105,36553,33128],{"class":115},[105,36555,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584,36586,36588,36590,36592,36594],{"class":107,"line":33131},[105,36557,32436],{"class":164},[105,36559,116],{"class":115},[105,36561,3583],{"class":220},[105,36563,32444],{"class":164},[105,36565,33142],{"class":220},[105,36567,1012],{"class":164},[105,36569,33098],{"class":111},[105,36571,1062],{"class":164},[105,36573,33151],{"class":220},[105,36575,1012],{"class":164},[105,36577,33098],{"class":111},[105,36579,1062],{"class":164},[105,36581,3583],{"class":220},[105,36583,33162],{"class":115},[105,36585,648],{"class":111},[105,36587,333],{"class":164},[105,36589,33169],{"class":115},[105,36591,648],{"class":111},[105,36593,333],{"class":164},[105,36595,33128],{"class":115},[105,36597,36598],{"class":107,"line":33178},[105,36599,2391],{"emptyLinePlaceholder":32},[105,36601,36602],{"class":107,"line":33183},[105,36603,33186],{"class":174},[105,36605,36606,36608,36610,36612,36614,36616,36618],{"class":107,"line":33189},[105,36607,2488],{"class":111},[105,36609,33194],{"class":115},[105,36611,648],{"class":111},[105,36613,333],{"class":164},[105,36615,1056],{"class":115},[105,36617,1076],{"class":111},[105,36619,33205],{"class":115},[105,36621,36622],{"class":107,"line":33208},[105,36623,33211],{"class":174},[105,36625,36626,36628,36630,36632,36634,36636,36638],{"class":107,"line":33214},[105,36627,33217],{"class":115},[105,36629,155],{"class":164},[105,36631,161],{"class":111},[105,36633,33224],{"class":115},[105,36635,648],{"class":111},[105,36637,333],{"class":164},[105,36639,33231],{"class":115},[105,36641,36642],{"class":107,"line":33234},[105,36643,33237],{"class":174},[105,36645,36646],{"class":107,"line":33240},[105,36647,33243],{"class":174},[105,36649,36650,36652,36654],{"class":107,"line":33246},[105,36651,33249],{"class":115},[105,36653,161],{"class":111},[105,36655,32299],{"class":115},[105,36657,36658],{"class":107,"line":33256},[105,36659,2391],{"emptyLinePlaceholder":32},[105,36661,36662],{"class":107,"line":33261},[105,36663,33264],{"class":174},[105,36665,36666,36668,36670,36672,36674],{"class":107,"line":33267},[105,36667,33270],{"class":115},[105,36669,161],{"class":111},[105,36671,33275],{"class":115},[105,36673,648],{"class":111},[105,36675,33280],{"class":115},[105,36677,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706,36708,36710,36712],{"class":107,"line":33283},[105,36679,32436],{"class":164},[105,36681,116],{"class":115},[105,36683,33290],{"class":220},[105,36685,1012],{"class":164},[105,36687,33295],{"class":111},[105,36689,1062],{"class":164},[105,36691,660],{"class":220},[105,36693,1012],{"class":164},[105,36695,33295],{"class":111},[105,36697,1062],{"class":164},[105,36699,33308],{"class":220},[105,36701,33311],{"class":115},[105,36703,33314],{"class":111},[105,36705,1023],{"class":164},[105,36707,33319],{"class":115},[105,36709,444],{"class":111},[105,36711,1023],{"class":164},[105,36713,30482],{"class":115},[105,36715,36716],{"class":107,"line":33328},[105,36717,36718],{"class":174},"    # 选择最优参数并保存\n",[105,36720,36721],{"class":107,"line":33334},[105,36722,36723],{"class":174},"    # 保存最佳模型权重字典\n",[105,36725,36726,36729,36731],{"class":107,"line":33340},[105,36727,36728],{"class":115},"    torch.save(best_model_wts,",[105,36730,33352],{"class":220},[105,36732,122],{"class":115},[105,36734,36735],{"class":107,"line":33346},[105,36736,33372],{"class":174},[105,36738,36739,36741,36743,36745,36747,36749],{"class":107,"line":33357},[105,36740,33378],{"class":115},[105,36742,161],{"class":111},[105,36744,33383],{"class":115},[105,36746,33386],{"class":5208},[105,36748,161],{"class":111},[105,36750,1537],{"class":115},[105,36752,36753,36755,36757,36759],{"class":107,"line":33363},[105,36754,33396],{"class":220},[105,36756,975],{"class":115},[105,36758,33401],{"class":164},[105,36760,33404],{"class":115},[105,36762,36763,36765],{"class":107,"line":33369},[105,36764,33410],{"class":220},[105,36766,33413],{"class":115},[105,36768,36769,36771],{"class":107,"line":33375},[105,36770,33419],{"class":220},[105,36772,33422],{"class":115},[105,36774,36775,36777],{"class":107,"line":33393},[105,36776,33428],{"class":220},[105,36778,33431],{"class":115},[105,36780,36781,36783],{"class":107,"line":33407},[105,36782,33437],{"class":220},[105,36784,33440],{"class":115},[105,36786,36787],{"class":107,"line":33416},[105,36788,33446],{"class":115},[105,36790,36791],{"class":107,"line":33425},[105,36792,33452],{"class":174},[105,36794,36795,36797],{"class":107,"line":33434},[105,36796,4081],{"class":111},[105,36798,33460],{"class":115},[105,36800,36801],{"class":107,"line":33443},[105,36802,2391],{"emptyLinePlaceholder":32},[105,36804,36805],{"class":107,"line":33449},[105,36806,33471],{"class":174},[105,36808,36809,36811,36813],{"class":107,"line":33455},[105,36810,31932],{"class":111},[105,36812,33479],{"class":1954},[105,36814,33482],{"class":115},[105,36816,36817],{"class":107,"line":33463},[105,36818,33488],{"class":174},[105,36820,36821,36823,36825,36827,36829,36831,36833,36835],{"class":107,"line":33468},[105,36822,33494],{"class":115},[105,36824,31678],{"class":5208},[105,36826,161],{"class":111},[105,36828,116],{"class":115},[105,36830,614],{"class":164},[105,36832,494],{"class":115},[105,36834,409],{"class":164},[105,36836,30482],{"class":115},[105,36838,36839],{"class":107,"line":33474},[105,36840,33514],{"class":174},[105,36842,36843],{"class":107,"line":33485},[105,36844,33520],{"class":174},[105,36846,36847],{"class":107,"line":33491},[105,36848,33526],{"class":174},[105,36850,36851,36853,36855,36857,36859,36861,36863],{"class":107,"line":33511},[105,36852,31712],{"class":115},[105,36854,333],{"class":164},[105,36856,494],{"class":115},[105,36858,193],{"class":164},[105,36860,494],{"class":115},[105,36862,333],{"class":164},[105,36864,122],{"class":115},[105,36866,36867],{"class":107,"line":33517},[105,36868,33549],{"class":174},[105,36870,36871],{"class":107,"line":33523},[105,36872,33555],{"class":174},[105,36874,36875],{"class":107,"line":33529},[105,36876,33561],{"class":174},[105,36878,36879],{"class":107,"line":33546},[105,36880,33567],{"class":174},[105,36882,36883],{"class":107,"line":33552},[105,36884,33573],{"class":174},[105,36886,36887,36889,36891,36893,36895,36897,36899,36901,36903],{"class":107,"line":33558},[105,36888,33579],{"class":115},[105,36890,33582],{"class":220},[105,36892,33585],{"class":115},[105,36894,33588],{"class":220},[105,36896,494],{"class":115},[105,36898,33593],{"class":5208},[105,36900,161],{"class":111},[105,36902,33598],{"class":220},[105,36904,122],{"class":115},[105,36906,36907,36909,36911,36913,36915,36917,36919,36921,36923],{"class":107,"line":33564},[105,36908,33579],{"class":115},[105,36910,33582],{"class":220},[105,36912,33610],{"class":115},[105,36914,33613],{"class":220},[105,36916,494],{"class":115},[105,36918,33593],{"class":5208},[105,36920,161],{"class":111},[105,36922,33622],{"class":220},[105,36924,122],{"class":115},[105,36926,36927],{"class":107,"line":33570},[105,36928,33630],{"class":174},[105,36930,36931],{"class":107,"line":33576},[105,36932,33636],{"class":115},[105,36934,36935],{"class":107,"line":33603},[105,36936,33642],{"class":174},[105,36938,36939,36941,36943],{"class":107,"line":33627},[105,36940,33648],{"class":115},[105,36942,33651],{"class":220},[105,36944,122],{"class":115},[105,36946,36947,36949,36951],{"class":107,"line":33633},[105,36948,33659],{"class":115},[105,36950,33662],{"class":220},[105,36952,122],{"class":115},[105,36954,36955],{"class":107,"line":33639},[105,36956,33670],{"class":174},[105,36958,36959,36961,36963,36965,36967,36969,36971],{"class":107,"line":33645},[105,36960,31712],{"class":115},[105,36962,333],{"class":164},[105,36964,494],{"class":115},[105,36966,193],{"class":164},[105,36968,494],{"class":115},[105,36970,193],{"class":164},[105,36972,122],{"class":115},[105,36974,36975,36977,36979,36981,36983,36985,36987,36989,36991],{"class":107,"line":33656},[105,36976,33579],{"class":115},[105,36978,33582],{"class":220},[105,36980,33697],{"class":115},[105,36982,33588],{"class":220},[105,36984,494],{"class":115},[105,36986,33593],{"class":5208},[105,36988,161],{"class":111},[105,36990,33708],{"class":220},[105,36992,122],{"class":115},[105,36994,36995,36997,36999,37001,37003,37005,37007,37009,37011],{"class":107,"line":33667},[105,36996,33579],{"class":115},[105,36998,33582],{"class":220},[105,37000,33720],{"class":115},[105,37002,33613],{"class":220},[105,37004,494],{"class":115},[105,37006,33593],{"class":5208},[105,37008,161],{"class":111},[105,37010,33731],{"class":220},[105,37012,122],{"class":115},[105,37014,37015],{"class":107,"line":33673},[105,37016,33739],{"class":174},[105,37018,37019],{"class":107,"line":33690},[105,37020,33636],{"class":115},[105,37022,37023,37025,37027],{"class":107,"line":33713},[105,37024,33648],{"class":115},[105,37026,33582],{"class":220},[105,37028,122],{"class":115},[105,37030,37031,37033,37035],{"class":107,"line":33736},[105,37032,33659],{"class":115},[105,37034,33761],{"class":220},[105,37036,122],{"class":115},[105,37038,37039],{"class":107,"line":33742},[105,37040,33769],{"class":115},[105,37042,37043],{"class":107,"line":33747},[105,37044,2391],{"emptyLinePlaceholder":32},[105,37046,37047],{"class":107,"line":33756},[105,37048,33780],{"class":174},[105,37050,37051,37053,37055,37057,37059],{"class":107,"line":33766},[105,37052,1522],{"class":111},[105,37054,31205],{"class":164},[105,37056,2940],{"class":111},[105,37058,31210],{"class":220},[105,37060,3730],{"class":115},[105,37062,37063],{"class":107,"line":33772},[105,37064,33799],{"class":174},[105,37066,37067,37070,37072],{"class":107,"line":33777},[105,37068,37069],{"class":115},"    AlexNet",[105,37071,161],{"class":111},[105,37073,37074],{"class":115},"AlexNet()\n",[105,37076,37077,37079,37081],{"class":107,"line":33783},[105,37078,33816],{"class":115},[105,37080,161],{"class":111},[105,37082,33821],{"class":115},[105,37084,37085,37087,37089,37092,37094,37096,37098],{"class":107,"line":33796},[105,37086,33378],{"class":115},[105,37088,161],{"class":111},[105,37090,37091],{"class":115},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[105,37093,33834],{"class":5208},[105,37095,161],{"class":111},[105,37097,816],{"class":164},[105,37099,122],{"class":115},[105,37101,37102],{"class":107,"line":33802},[105,37103,33846],{"class":115},[59,37105,37106],{"start":1171},[62,37107,33859],{},[96,37109,37111],{"className":30363,"code":37110,"language":30365,"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",[102,37112,37113,37119,37129,37139,37149,37153,37163,37173,37184,37188,37192,37196,37204,37220,37230,37246,37256,37270,37274,37284,37294,37304,37310,37314,37318,37326,37330,37346,37354,37358,37362,37370,37378,37382,37386,37390,37394,37400,37404,37414,37422,37430,37434,37438,37442,37450,37454,37470,37474,37478,37482,37494,37498,37510,37514,37518,37530,37534,37544,37548,37552,37564,37568,37576,37580,37584,37592,37596,37604,37608,37612,37616,37620,37624,37640,37648,37652,37656,37704,37710,37714,37724,37732,37740,37744,37748,37752,37756,37764,37768,37784,37788,37796,37804],{"__ignoreMap":22},[105,37114,37115,37117],{"class":107,"line":108},[105,37116,30377],{"class":111},[105,37118,30380],{"class":115},[105,37120,37121,37123,37125,37127],{"class":107,"line":28},[105,37122,30377],{"class":111},[105,37124,31400],{"class":115},[105,37126,31368],{"class":111},[105,37128,31405],{"class":115},[105,37130,37131,37133,37135,37137],{"class":107,"line":1171},[105,37132,30722],{"class":111},[105,37134,33887],{"class":115},[105,37136,30377],{"class":111},[105,37138,33892],{"class":115},[105,37140,37141,37143,37145,37147],{"class":107,"line":1186},[105,37142,30722],{"class":111},[105,37144,31383],{"class":115},[105,37146,30377],{"class":111},[105,37148,31388],{"class":115},[105,37150,37151],{"class":107,"line":1192},[105,37152,33907],{"class":174},[105,37154,37155,37157,37159,37161],{"class":107,"line":1206},[105,37156,30722],{"class":111},[105,37158,31353],{"class":115},[105,37160,30377],{"class":111},[105,37162,31358],{"class":115},[105,37164,37165,37167,37169,37171],{"class":107,"line":1212},[105,37166,30722],{"class":111},[105,37168,31899],{"class":115},[105,37170,30377],{"class":111},[105,37172,35542],{"class":115},[105,37174,37175,37177,37180,37182],{"class":107,"line":1303},[105,37176,30722],{"class":111},[105,37178,37179],{"class":115}," 练习.AlexNet.model ",[105,37181,30377],{"class":111},[105,37183,35542],{"class":115},[105,37185,37186],{"class":107,"line":1309},[105,37187,2391],{"emptyLinePlaceholder":32},[105,37189,37190],{"class":107,"line":1321},[105,37191,2391],{"emptyLinePlaceholder":32},[105,37193,37194],{"class":107,"line":1603},[105,37195,33936],{"class":174},[105,37197,37198,37200,37202],{"class":107,"line":1608},[105,37199,31932],{"class":111},[105,37201,33943],{"class":1954},[105,37203,31938],{"class":115},[105,37205,37206,37208,37210,37212,37214,37216,37218],{"class":107,"line":1614},[105,37207,33950],{"class":115},[105,37209,161],{"class":111},[105,37211,31440],{"class":115},[105,37213,31443],{"class":5208},[105,37215,161],{"class":111},[105,37217,31448],{"class":220},[105,37219,31451],{"class":115},[105,37221,37222,37224,37226,37228],{"class":107,"line":1619},[105,37223,33967],{"class":5208},[105,37225,161],{"class":111},[105,37227,33972],{"class":164},[105,37229,31451],{"class":115},[105,37231,37232,37234,37236,37238,37240,37242,37244],{"class":107,"line":1633},[105,37233,33979],{"class":5208},[105,37235,161],{"class":111},[105,37237,31478],{"class":115},[105,37239,31481],{"class":5208},[105,37241,161],{"class":111},[105,37243,35434],{"class":164},[105,37245,31489],{"class":115},[105,37247,37248,37250,37252,37254],{"class":107,"line":1638},[105,37249,33996],{"class":5208},[105,37251,161],{"class":111},[105,37253,31461],{"class":164},[105,37255,122],{"class":115},[105,37257,37258,37260,37262,37264,37266,37268],{"class":107,"line":1644},[105,37259,34007],{"class":115},[105,37261,161],{"class":111},[105,37263,31519],{"class":115},[105,37265,31522],{"class":5208},[105,37267,161],{"class":111},[105,37269,34018],{"class":115},[105,37271,37272],{"class":107,"line":1665},[105,37273,34023],{"class":174},[105,37275,37276,37278,37280,37282],{"class":107,"line":1670},[105,37277,34028],{"class":5208},[105,37279,161],{"class":111},[105,37281,333],{"class":164},[105,37283,31451],{"class":115},[105,37285,37286,37288,37290,37292],{"class":107,"line":1684},[105,37287,34039],{"class":5208},[105,37289,161],{"class":111},[105,37291,31461],{"class":164},[105,37293,31451],{"class":115},[105,37295,37296,37298,37300,37302],{"class":107,"line":1689},[105,37297,34050],{"class":5208},[105,37299,161],{"class":111},[105,37301,307],{"class":164},[105,37303,122],{"class":115},[105,37305,37306,37308],{"class":107,"line":1718},[105,37307,4081],{"class":111},[105,37309,34063],{"class":115},[105,37311,37312],{"class":107,"line":1723},[105,37313,2391],{"emptyLinePlaceholder":32},[105,37315,37316],{"class":107,"line":1740},[105,37317,34072],{"class":174},[105,37319,37320,37322,37324],{"class":107,"line":1745},[105,37321,31932],{"class":111},[105,37323,34079],{"class":1954},[105,37325,34082],{"class":115},[105,37327,37328],{"class":107,"line":1750},[105,37329,34087],{"class":174},[105,37331,37332,37334,37336,37338,37340,37342,37344],{"class":107,"line":1755},[105,37333,31222],{"class":115},[105,37335,161],{"class":111},[105,37337,31229],{"class":220},[105,37339,1695],{"class":111},[105,37341,31234],{"class":115},[105,37343,1692],{"class":111},[105,37345,34104],{"class":220},[105,37347,37348,37350,37352],{"class":107,"line":1769},[105,37349,31274],{"class":115},[105,37351,161],{"class":111},[105,37353,32274],{"class":115},[105,37355,37356],{"class":107,"line":1774},[105,37357,2391],{"emptyLinePlaceholder":32},[105,37359,37360],{"class":107,"line":2568},[105,37361,34121],{"class":174},[105,37363,37364,37366,37368],{"class":107,"line":2582},[105,37365,34126],{"class":115},[105,37367,161],{"class":111},[105,37369,32327],{"class":164},[105,37371,37372,37374,37376],{"class":107,"line":2590},[105,37373,34135],{"class":115},[105,37375,161],{"class":111},[105,37377,3076],{"class":164},[105,37379,37380],{"class":107,"line":2595},[105,37381,2391],{"emptyLinePlaceholder":32},[105,37383,37384],{"class":107,"line":2601},[105,37385,34148],{"class":174},[105,37387,37388],{"class":107,"line":2607},[105,37389,34153],{"class":174},[105,37391,37392],{"class":107,"line":2612},[105,37393,34158],{"class":174},[105,37395,37396,37398],{"class":107,"line":7940},[105,37397,34163],{"class":111},[105,37399,32869],{"class":115},[105,37401,37402],{"class":107,"line":7964},[105,37403,34170],{"class":174},[105,37405,37406,37408,37410,37412],{"class":107,"line":7969},[105,37407,3394],{"class":111},[105,37409,34177],{"class":115},[105,37411,26028],{"class":111},[105,37413,34182],{"class":115},[105,37415,37416,37418,37420],{"class":107,"line":7975},[105,37417,34187],{"class":115},[105,37419,161],{"class":111},[105,37421,34192],{"class":115},[105,37423,37424,37426,37428],{"class":107,"line":8002},[105,37425,34197],{"class":115},[105,37427,161],{"class":111},[105,37429,34202],{"class":115},[105,37431,37432],{"class":107,"line":8007},[105,37433,34207],{"class":174},[105,37435,37436],{"class":107,"line":8013},[105,37437,32860],{"class":115},[105,37439,37440],{"class":107,"line":8025},[105,37441,34216],{"class":174},[105,37443,37444,37446,37448],{"class":107,"line":8037},[105,37445,32645],{"class":115},[105,37447,161],{"class":111},[105,37449,34225],{"class":115},[105,37451,37452],{"class":107,"line":8049},[105,37453,34230],{"class":174},[105,37455,37456,37458,37460,37462,37464,37466,37468],{"class":107,"line":9708},[105,37457,32662],{"class":115},[105,37459,161],{"class":111},[105,37461,32667],{"class":115},[105,37463,32670],{"class":5208},[105,37465,161],{"class":111},[105,37467,333],{"class":164},[105,37469,122],{"class":115},[105,37471,37472],{"class":107,"line":9733},[105,37473,34251],{"class":174},[105,37475,37476],{"class":107,"line":9756},[105,37477,34256],{"class":174},[105,37479,37480],{"class":107,"line":9780},[105,37481,34261],{"class":174},[105,37483,37484,37486,37488,37490,37492],{"class":107,"line":9785},[105,37485,34266],{"class":115},[105,37487,9469],{"class":111},[105,37489,32772],{"class":115},[105,37491,2940],{"class":111},[105,37493,34275],{"class":115},[105,37495,37496],{"class":107,"line":9790},[105,37497,34280],{"class":174},[105,37499,37500,37502,37504,37506,37508],{"class":107,"line":9795},[105,37501,34285],{"class":115},[105,37503,9469],{"class":111},[105,37505,34290],{"class":115},[105,37507,307],{"class":164},[105,37509,122],{"class":115},[105,37511,37512],{"class":107,"line":9804},[105,37513,2391],{"emptyLinePlaceholder":32},[105,37515,37516],{"class":107,"line":9809},[105,37517,34303],{"class":174},[105,37519,37520,37522,37524,37526,37528],{"class":107,"line":9815},[105,37521,34308],{"class":115},[105,37523,161],{"class":111},[105,37525,34313],{"class":115},[105,37527,700],{"class":111},[105,37529,34318],{"class":115},[105,37531,37532],{"class":107,"line":9836},[105,37533,34323],{"class":174},[105,37535,37536,37538,37540,37542],{"class":107,"line":9842},[105,37537,32436],{"class":164},[105,37539,116],{"class":115},[105,37541,34332],{"class":220},[105,37543,34335],{"class":115},[105,37545,37546],{"class":107,"line":9856},[105,37547,2391],{"emptyLinePlaceholder":32},[105,37549,37550],{"class":107,"line":9862},[105,37551,34344],{"class":174},[105,37553,37554,37556,37558,37560,37562],{"class":107,"line":9889},[105,37555,1522],{"class":111},[105,37557,31205],{"class":164},[105,37559,2940],{"class":111},[105,37561,31210],{"class":220},[105,37563,3730],{"class":115},[105,37565,37566],{"class":107,"line":9898},[105,37567,34361],{"class":174},[105,37569,37570,37572,37574],{"class":107,"line":9904},[105,37571,31274],{"class":115},[105,37573,161],{"class":111},[105,37575,37074],{"class":115},[105,37577,37578],{"class":107,"line":9912},[105,37579,34374],{"class":174},[105,37581,37582],{"class":107,"line":9917},[105,37583,34379],{"class":174},[105,37585,37586,37588,37590],{"class":107,"line":16596},[105,37587,34384],{"class":115},[105,37589,34387],{"class":220},[105,37591,30482],{"class":115},[105,37593,37594],{"class":107,"line":16602},[105,37595,34394],{"class":174},[105,37597,37598,37600,37602],{"class":107,"line":16625},[105,37599,34007],{"class":115},[105,37601,161],{"class":111},[105,37603,34403],{"class":115},[105,37605,37606],{"class":107,"line":16631},[105,37607,34408],{"class":174},[105,37609,37610],{"class":107,"line":16654},[105,37611,34413],{"class":115},[105,37613,37614],{"class":107,"line":16668},[105,37615,2391],{"emptyLinePlaceholder":32},[105,37617,37618],{"class":107,"line":16688},[105,37619,34422],{"class":174},[105,37621,37622],{"class":107,"line":16694},[105,37623,34427],{"class":174},[105,37625,37626,37628,37630,37632,37634,37636,37638],{"class":107,"line":16705},[105,37627,31222],{"class":115},[105,37629,161],{"class":111},[105,37631,31229],{"class":220},[105,37633,1695],{"class":111},[105,37635,31234],{"class":115},[105,37637,1692],{"class":111},[105,37639,34104],{"class":220},[105,37641,37642,37644,37646],{"class":107,"line":16728},[105,37643,31274],{"class":115},[105,37645,161],{"class":111},[105,37647,32274],{"class":115},[105,37649,37650],{"class":107,"line":16750},[105,37651,34456],{"class":174},[105,37653,37654],{"class":107,"line":16755},[105,37655,34461],{"class":174},[105,37657,37658,37660,37662,37664,37666,37668,37670,37672,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696,37698,37700,37702],{"class":107,"line":16761},[105,37659,34466],{"class":115},[105,37661,161],{"class":111},[105,37663,1006],{"class":115},[105,37665,34473],{"class":220},[105,37667,494],{"class":115},[105,37669,34478],{"class":220},[105,37671,494],{"class":115},[105,37673,34483],{"class":220},[105,37675,494],{"class":115},[105,37677,34488],{"class":220},[105,37679,494],{"class":115},[105,37681,34493],{"class":220},[105,37683,494],{"class":115},[105,37685,34498],{"class":220},[105,37687,494],{"class":115},[105,37689,34503],{"class":220},[105,37691,494],{"class":115},[105,37693,34508],{"class":220},[105,37695,494],{"class":115},[105,37697,34513],{"class":220},[105,37699,494],{"class":115},[105,37701,34518],{"class":220},[105,37703,33231],{"class":115},[105,37705,37706,37708],{"class":107,"line":16775},[105,37707,34163],{"class":111},[105,37709,32869],{"class":115},[105,37711,37712],{"class":107,"line":16788},[105,37713,34531],{"class":174},[105,37715,37716,37718,37720,37722],{"class":107,"line":16793},[105,37717,3394],{"class":111},[105,37719,34538],{"class":115},[105,37721,26028],{"class":111},[105,37723,34182],{"class":115},[105,37725,37726,37728,37730],{"class":107,"line":16807},[105,37727,32595],{"class":115},[105,37729,161],{"class":111},[105,37731,32600],{"class":115},[105,37733,37734,37736,37738],{"class":107,"line":16812},[105,37735,32610],{"class":115},[105,37737,161],{"class":111},[105,37739,32615],{"class":115},[105,37741,37742],{"class":107,"line":16818},[105,37743,2391],{"emptyLinePlaceholder":32},[105,37745,37746],{"class":107,"line":16823},[105,37747,34567],{"class":174},[105,37749,37750],{"class":107,"line":16837},[105,37751,32860],{"class":115},[105,37753,37754],{"class":107,"line":16842},[105,37755,34576],{"class":174},[105,37757,37758,37760,37762],{"class":107,"line":16847},[105,37759,32645],{"class":115},[105,37761,161],{"class":111},[105,37763,32650],{"class":115},[105,37765,37766],{"class":107,"line":16861},[105,37767,34589],{"class":174},[105,37769,37770,37772,37774,37776,37778,37780,37782],{"class":107,"line":16873},[105,37771,32662],{"class":115},[105,37773,161],{"class":111},[105,37775,32667],{"class":115},[105,37777,32670],{"class":5208},[105,37779,161],{"class":111},[105,37781,333],{"class":164},[105,37783,122],{"class":115},[105,37785,37786],{"class":107,"line":16878},[105,37787,34610],{"class":174},[105,37789,37790,37792,37794],{"class":107,"line":16891},[105,37791,34615],{"class":115},[105,37793,161],{"class":111},[105,37795,34620],{"class":115},[105,37797,37798,37800,37802],{"class":107,"line":16896},[105,37799,34625],{"class":115},[105,37801,161],{"class":111},[105,37803,34630],{"class":115},[105,37805,37806,37808,37810,37812,37814,37816,37818,37820],{"class":107,"line":16901},[105,37807,34635],{"class":164},[105,37809,116],{"class":115},[105,37811,34640],{"class":220},[105,37813,34643],{"class":115},[105,37815,34646],{"class":220},[105,37817,494],{"class":115},[105,37819,34651],{"class":220},[105,37821,34654],{"class":115},[76,37823,37825],{"id":37824},"_22vgg","2.2.VGG",[21990,37827,37829],{"id":37828},"_221原理","2.2.1.原理",[14,37831,37832],{},[20,37833],{"alt":22,"src":37834},"\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,37836,37837],{},[20,37838],{"alt":22,"src":37839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[14,37841,37842],{},[20,37843],{"alt":22,"src":37844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[14,37846,37847],{},"参数详细描述：",[14,37849,37850],{},[20,37851],{"alt":22,"src":37852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[14,37854,37855],{},[20,37856],{"alt":22,"src":37857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[14,37859,37860],{},[20,37861],{"alt":22,"src":37862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,37864,37865],{},[20,37866],{"alt":22,"src":37867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[14,37869,37870],{},[20,37871],{"alt":22,"src":37872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-022.png",[21990,37874,37876],{"id":37875},"_222代码实现","2.2.2.代码实现",[59,37878,37879],{},[62,37880,37881],{},"网络搭建",[96,37883,37885],{"className":30363,"code":37884,"language":30365,"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",[102,37886,37887,37893,37905,37915,37925,37929,37946,37954,37973,37978,37983,37995,38033,38038,38074,38078,38107,38112,38117,38128,38164,38168,38204,38208,38236,38240,38245,38256,38292,38296,38332,38336,38372,38376,38404,38408,38413,38424,38461,38465,38501,38505,38541,38545,38573,38577,38582,38593,38629,38633,38669,38673,38709,38713,38741,38745,38750,38761,38766,38771,38776,38797,38801,38813,38817,38829,38833,38837,38842,38847,38862,38867,38877,38882,38897,38902,38921,38926,38935,38940,38950,38955,38960,38974,38979,38993,39001,39005,39009,39017,39028,39039,39050,39061,39072,39083,39089,39093,39098,39111,39131,39137,39146],{"__ignoreMap":22},[105,37888,37889,37891],{"class":107,"line":108},[105,37890,30377],{"class":111},[105,37892,30380],{"class":115},[105,37894,37895,37897,37900,37902],{"class":107,"line":28},[105,37896,30722],{"class":111},[105,37898,37899],{"class":115}," sympy.core.sympify ",[105,37901,30377],{"class":111},[105,37903,37904],{"class":115}," kernS\n",[105,37906,37907,37909,37911,37913],{"class":107,"line":1171},[105,37908,30722],{"class":111},[105,37910,30725],{"class":115},[105,37912,30377],{"class":111},[105,37914,30730],{"class":115},[105,37916,37917,37919,37921,37923],{"class":107,"line":1186},[105,37918,30722],{"class":111},[105,37920,30742],{"class":115},[105,37922,30377],{"class":111},[105,37924,30747],{"class":115},[105,37926,37927],{"class":107,"line":1192},[105,37928,2391],{"emptyLinePlaceholder":32},[105,37930,37931,37933,37936,37938,37940,37942,37944],{"class":107,"line":1206},[105,37932,14686],{"class":111},[105,37934,37935],{"class":1954}," VGG16",[105,37937,116],{"class":115},[105,37939,30763],{"class":1954},[105,37941,674],{"class":115},[105,37943,30768],{"class":1954},[105,37945,30771],{"class":115},[105,37947,37948,37950,37952],{"class":107,"line":1212},[105,37949,30786],{"class":111},[105,37951,30789],{"class":164},[105,37953,30792],{"class":115},[105,37955,37956,37958,37960,37963,37965,37967,37969,37971],{"class":107,"line":1303},[105,37957,30802],{"class":164},[105,37959,116],{"class":115},[105,37961,37962],{"class":164},"VGG16",[105,37964,12427],{"class":115},[105,37966,30808],{"class":164},[105,37968,30811],{"class":115},[105,37970,30814],{"class":164},[105,37972,1967],{"class":115},[105,37974,37975],{"class":107,"line":1309},[105,37976,37977],{"class":174},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[105,37979,37980],{"class":107,"line":1321},[105,37981,37982],{"class":174},"        # 这里用的是灰度图\n",[105,37984,37985,37987,37990,37992],{"class":107,"line":1603},[105,37986,30830],{"class":164},[105,37988,37989],{"class":115},".block1",[105,37991,161],{"class":111},[105,37993,37994],{"class":115},"nn.Sequential(\n",[105,37996,37997,38000,38002,38004,38006,38008,38010,38012,38014,38016,38018,38020,38022,38024,38026,38028,38030],{"class":107,"line":1608},[105,37998,37999],{"class":115},"            nn.Conv2d(",[105,38001,30841],{"class":5208},[105,38003,161],{"class":111},[105,38005,333],{"class":164},[105,38007,494],{"class":115},[105,38009,30850],{"class":5208},[105,38011,161],{"class":111},[105,38013,319],{"class":164},[105,38015,494],{"class":115},[105,38017,30859],{"class":5208},[105,38019,161],{"class":111},[105,38021,187],{"class":164},[105,38023,494],{"class":115},[105,38025,30868],{"class":5208},[105,38027,161],{"class":111},[105,38029,333],{"class":164},[105,38031,38032],{"class":115},"),\n",[105,38034,38035],{"class":107,"line":1614},[105,38036,38037],{"class":115},"            nn.ReLU(),\n",[105,38039,38040,38042,38044,38046,38048,38050,38052,38054,38056,38058,38060,38062,38064,38066,38068,38070,38072],{"class":107,"line":1619},[105,38041,37999],{"class":115},[105,38043,30841],{"class":5208},[105,38045,161],{"class":111},[105,38047,319],{"class":164},[105,38049,494],{"class":115},[105,38051,30850],{"class":5208},[105,38053,161],{"class":111},[105,38055,319],{"class":164},[105,38057,494],{"class":115},[105,38059,30859],{"class":5208},[105,38061,161],{"class":111},[105,38063,187],{"class":164},[105,38065,494],{"class":115},[105,38067,30868],{"class":5208},[105,38069,161],{"class":111},[105,38071,333],{"class":164},[105,38073,38032],{"class":115},[105,38075,38076],{"class":107,"line":1633},[105,38077,38037],{"class":115},[105,38079,38080,38083,38085,38087,38089,38091,38093,38095,38097,38099,38101,38103,38105],{"class":107,"line":1638},[105,38081,38082],{"class":115},"            nn.MaxPool2d(",[105,38084,30859],{"class":5208},[105,38086,161],{"class":111},[105,38088,193],{"class":164},[105,38090,494],{"class":115},[105,38092,30914],{"class":5208},[105,38094,161],{"class":111},[105,38096,193],{"class":164},[105,38098,494],{"class":115},[105,38100,30868],{"class":5208},[105,38102,161],{"class":111},[105,38104,307],{"class":164},[105,38106,122],{"class":115},[105,38108,38109],{"class":107,"line":1644},[105,38110,38111],{"class":115},"        )\n",[105,38113,38114],{"class":107,"line":1665},[105,38115,38116],{"class":174},"        # 第二层\n",[105,38118,38119,38121,38124,38126],{"class":107,"line":1670},[105,38120,30830],{"class":164},[105,38122,38123],{"class":115},".block2",[105,38125,161],{"class":111},[105,38127,37994],{"class":115},[105,38129,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156,38158,38160,38162],{"class":107,"line":1684},[105,38131,37999],{"class":115},[105,38133,30841],{"class":5208},[105,38135,161],{"class":111},[105,38137,319],{"class":164},[105,38139,494],{"class":115},[105,38141,30850],{"class":5208},[105,38143,161],{"class":111},[105,38145,32055],{"class":164},[105,38147,494],{"class":115},[105,38149,30859],{"class":5208},[105,38151,161],{"class":111},[105,38153,187],{"class":164},[105,38155,494],{"class":115},[105,38157,30868],{"class":5208},[105,38159,161],{"class":111},[105,38161,333],{"class":164},[105,38163,38032],{"class":115},[105,38165,38166],{"class":107,"line":1689},[105,38167,38037],{"class":115},[105,38169,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198,38200,38202],{"class":107,"line":1718},[105,38171,37999],{"class":115},[105,38173,30841],{"class":5208},[105,38175,161],{"class":111},[105,38177,32055],{"class":164},[105,38179,494],{"class":115},[105,38181,30850],{"class":5208},[105,38183,161],{"class":111},[105,38185,32055],{"class":164},[105,38187,494],{"class":115},[105,38189,30859],{"class":5208},[105,38191,161],{"class":111},[105,38193,187],{"class":164},[105,38195,494],{"class":115},[105,38197,30868],{"class":5208},[105,38199,161],{"class":111},[105,38201,333],{"class":164},[105,38203,38032],{"class":115},[105,38205,38206],{"class":107,"line":1723},[105,38207,38037],{"class":115},[105,38209,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234],{"class":107,"line":1740},[105,38211,38082],{"class":115},[105,38213,30859],{"class":5208},[105,38215,161],{"class":111},[105,38217,193],{"class":164},[105,38219,494],{"class":115},[105,38221,30914],{"class":5208},[105,38223,161],{"class":111},[105,38225,193],{"class":164},[105,38227,494],{"class":115},[105,38229,30868],{"class":5208},[105,38231,161],{"class":111},[105,38233,307],{"class":164},[105,38235,122],{"class":115},[105,38237,38238],{"class":107,"line":1745},[105,38239,38111],{"class":115},[105,38241,38242],{"class":107,"line":1750},[105,38243,38244],{"class":174},"        # 第三层\n",[105,38246,38247,38249,38252,38254],{"class":107,"line":1755},[105,38248,30830],{"class":164},[105,38250,38251],{"class":115},".block3",[105,38253,161],{"class":111},[105,38255,37994],{"class":115},[105,38257,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284,38286,38288,38290],{"class":107,"line":1769},[105,38259,37999],{"class":115},[105,38261,30841],{"class":5208},[105,38263,161],{"class":111},[105,38265,32055],{"class":164},[105,38267,494],{"class":115},[105,38269,30850],{"class":5208},[105,38271,161],{"class":111},[105,38273,34855],{"class":164},[105,38275,494],{"class":115},[105,38277,30859],{"class":5208},[105,38279,161],{"class":111},[105,38281,187],{"class":164},[105,38283,494],{"class":115},[105,38285,30868],{"class":5208},[105,38287,161],{"class":111},[105,38289,333],{"class":164},[105,38291,38032],{"class":115},[105,38293,38294],{"class":107,"line":1774},[105,38295,38037],{"class":115},[105,38297,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324,38326,38328,38330],{"class":107,"line":2568},[105,38299,37999],{"class":115},[105,38301,30841],{"class":5208},[105,38303,161],{"class":111},[105,38305,34855],{"class":164},[105,38307,494],{"class":115},[105,38309,30850],{"class":5208},[105,38311,161],{"class":111},[105,38313,34855],{"class":164},[105,38315,494],{"class":115},[105,38317,30859],{"class":5208},[105,38319,161],{"class":111},[105,38321,187],{"class":164},[105,38323,494],{"class":115},[105,38325,30868],{"class":5208},[105,38327,161],{"class":111},[105,38329,333],{"class":164},[105,38331,38032],{"class":115},[105,38333,38334],{"class":107,"line":2582},[105,38335,38037],{"class":115},[105,38337,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370],{"class":107,"line":2590},[105,38339,37999],{"class":115},[105,38341,30841],{"class":5208},[105,38343,161],{"class":111},[105,38345,34855],{"class":164},[105,38347,494],{"class":115},[105,38349,30850],{"class":5208},[105,38351,161],{"class":111},[105,38353,34855],{"class":164},[105,38355,494],{"class":115},[105,38357,30859],{"class":5208},[105,38359,161],{"class":111},[105,38361,187],{"class":164},[105,38363,494],{"class":115},[105,38365,30868],{"class":5208},[105,38367,161],{"class":111},[105,38369,333],{"class":164},[105,38371,38032],{"class":115},[105,38373,38374],{"class":107,"line":2595},[105,38375,38037],{"class":115},[105,38377,38378,38380,38382,38384,38386,38388,38390,38392,38394,38396,38398,38400,38402],{"class":107,"line":2601},[105,38379,38082],{"class":115},[105,38381,30859],{"class":5208},[105,38383,161],{"class":111},[105,38385,193],{"class":164},[105,38387,494],{"class":115},[105,38389,30914],{"class":5208},[105,38391,161],{"class":111},[105,38393,193],{"class":164},[105,38395,494],{"class":115},[105,38397,30868],{"class":5208},[105,38399,161],{"class":111},[105,38401,307],{"class":164},[105,38403,122],{"class":115},[105,38405,38406],{"class":107,"line":2607},[105,38407,38111],{"class":115},[105,38409,38410],{"class":107,"line":2612},[105,38411,38412],{"class":174},"        # 第四层\n",[105,38414,38415,38417,38420,38422],{"class":107,"line":7940},[105,38416,30830],{"class":164},[105,38418,38419],{"class":115},".block4",[105,38421,161],{"class":111},[105,38423,37994],{"class":115},[105,38425,38426,38428,38430,38432,38434,38436,38438,38440,38443,38445,38447,38449,38451,38453,38455,38457,38459],{"class":107,"line":7964},[105,38427,37999],{"class":115},[105,38429,30841],{"class":5208},[105,38431,161],{"class":111},[105,38433,34855],{"class":164},[105,38435,494],{"class":115},[105,38437,30850],{"class":5208},[105,38439,161],{"class":111},[105,38441,38442],{"class":164},"512",[105,38444,494],{"class":115},[105,38446,30859],{"class":5208},[105,38448,161],{"class":111},[105,38450,187],{"class":164},[105,38452,494],{"class":115},[105,38454,30868],{"class":5208},[105,38456,161],{"class":111},[105,38458,333],{"class":164},[105,38460,38032],{"class":115},[105,38462,38463],{"class":107,"line":7969},[105,38464,38037],{"class":115},[105,38466,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499],{"class":107,"line":7975},[105,38468,37999],{"class":115},[105,38470,30841],{"class":5208},[105,38472,161],{"class":111},[105,38474,38442],{"class":164},[105,38476,494],{"class":115},[105,38478,30850],{"class":5208},[105,38480,161],{"class":111},[105,38482,38442],{"class":164},[105,38484,494],{"class":115},[105,38486,30859],{"class":5208},[105,38488,161],{"class":111},[105,38490,187],{"class":164},[105,38492,494],{"class":115},[105,38494,30868],{"class":5208},[105,38496,161],{"class":111},[105,38498,333],{"class":164},[105,38500,38032],{"class":115},[105,38502,38503],{"class":107,"line":8002},[105,38504,38037],{"class":115},[105,38506,38507,38509,38511,38513,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535,38537,38539],{"class":107,"line":8007},[105,38508,37999],{"class":115},[105,38510,30841],{"class":5208},[105,38512,161],{"class":111},[105,38514,38442],{"class":164},[105,38516,494],{"class":115},[105,38518,30850],{"class":5208},[105,38520,161],{"class":111},[105,38522,38442],{"class":164},[105,38524,494],{"class":115},[105,38526,30859],{"class":5208},[105,38528,161],{"class":111},[105,38530,187],{"class":164},[105,38532,494],{"class":115},[105,38534,30868],{"class":5208},[105,38536,161],{"class":111},[105,38538,333],{"class":164},[105,38540,38032],{"class":115},[105,38542,38543],{"class":107,"line":8013},[105,38544,38037],{"class":115},[105,38546,38547,38549,38551,38553,38555,38557,38559,38561,38563,38565,38567,38569,38571],{"class":107,"line":8025},[105,38548,38082],{"class":115},[105,38550,30859],{"class":5208},[105,38552,161],{"class":111},[105,38554,193],{"class":164},[105,38556,494],{"class":115},[105,38558,30914],{"class":5208},[105,38560,161],{"class":111},[105,38562,193],{"class":164},[105,38564,494],{"class":115},[105,38566,30868],{"class":5208},[105,38568,161],{"class":111},[105,38570,307],{"class":164},[105,38572,122],{"class":115},[105,38574,38575],{"class":107,"line":8037},[105,38576,38111],{"class":115},[105,38578,38579],{"class":107,"line":8049},[105,38580,38581],{"class":174},"        # 第五层\n",[105,38583,38584,38586,38589,38591],{"class":107,"line":9708},[105,38585,30830],{"class":164},[105,38587,38588],{"class":115},".block5",[105,38590,161],{"class":111},[105,38592,37994],{"class":115},[105,38594,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621,38623,38625,38627],{"class":107,"line":9733},[105,38596,37999],{"class":115},[105,38598,30841],{"class":5208},[105,38600,161],{"class":111},[105,38602,38442],{"class":164},[105,38604,494],{"class":115},[105,38606,30850],{"class":5208},[105,38608,161],{"class":111},[105,38610,38442],{"class":164},[105,38612,494],{"class":115},[105,38614,30859],{"class":5208},[105,38616,161],{"class":111},[105,38618,187],{"class":164},[105,38620,494],{"class":115},[105,38622,30868],{"class":5208},[105,38624,161],{"class":111},[105,38626,333],{"class":164},[105,38628,38032],{"class":115},[105,38630,38631],{"class":107,"line":9756},[105,38632,38037],{"class":115},[105,38634,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667],{"class":107,"line":9780},[105,38636,37999],{"class":115},[105,38638,30841],{"class":5208},[105,38640,161],{"class":111},[105,38642,38442],{"class":164},[105,38644,494],{"class":115},[105,38646,30850],{"class":5208},[105,38648,161],{"class":111},[105,38650,38442],{"class":164},[105,38652,494],{"class":115},[105,38654,30859],{"class":5208},[105,38656,161],{"class":111},[105,38658,187],{"class":164},[105,38660,494],{"class":115},[105,38662,30868],{"class":5208},[105,38664,161],{"class":111},[105,38666,333],{"class":164},[105,38668,38032],{"class":115},[105,38670,38671],{"class":107,"line":9785},[105,38672,38037],{"class":115},[105,38674,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707],{"class":107,"line":9790},[105,38676,37999],{"class":115},[105,38678,30841],{"class":5208},[105,38680,161],{"class":111},[105,38682,38442],{"class":164},[105,38684,494],{"class":115},[105,38686,30850],{"class":5208},[105,38688,161],{"class":111},[105,38690,38442],{"class":164},[105,38692,494],{"class":115},[105,38694,30859],{"class":5208},[105,38696,161],{"class":111},[105,38698,187],{"class":164},[105,38700,494],{"class":115},[105,38702,30868],{"class":5208},[105,38704,161],{"class":111},[105,38706,333],{"class":164},[105,38708,38032],{"class":115},[105,38710,38711],{"class":107,"line":9795},[105,38712,38037],{"class":115},[105,38714,38715,38717,38719,38721,38723,38725,38727,38729,38731,38733,38735,38737,38739],{"class":107,"line":9804},[105,38716,38082],{"class":115},[105,38718,30859],{"class":5208},[105,38720,161],{"class":111},[105,38722,193],{"class":164},[105,38724,494],{"class":115},[105,38726,30914],{"class":5208},[105,38728,161],{"class":111},[105,38730,193],{"class":164},[105,38732,494],{"class":115},[105,38734,30868],{"class":5208},[105,38736,161],{"class":111},[105,38738,307],{"class":164},[105,38740,122],{"class":115},[105,38742,38743],{"class":107,"line":9809},[105,38744,38111],{"class":115},[105,38746,38747],{"class":107,"line":9815},[105,38748,38749],{"class":174},"        # 全连接层\n",[105,38751,38752,38754,38757,38759],{"class":107,"line":9836},[105,38753,30830],{"class":164},[105,38755,38756],{"class":115},".block6",[105,38758,161],{"class":111},[105,38760,37994],{"class":115},[105,38762,38763],{"class":107,"line":9842},[105,38764,38765],{"class":174},"            # 平展操作\n",[105,38767,38768],{"class":107,"line":9856},[105,38769,38770],{"class":174},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[105,38772,38773],{"class":107,"line":9862},[105,38774,38775],{"class":115},"            nn.Flatten(),\n",[105,38777,38778,38781,38783,38785,38787,38789,38791,38793,38795],{"class":107,"line":9889},[105,38779,38780],{"class":115},"            nn.Linear(",[105,38782,485],{"class":164},[105,38784,571],{"class":111},[105,38786,485],{"class":164},[105,38788,571],{"class":111},[105,38790,38442],{"class":164},[105,38792,494],{"class":115},[105,38794,34855],{"class":164},[105,38796,38032],{"class":115},[105,38798,38799],{"class":107,"line":9898},[105,38800,38037],{"class":115},[105,38802,38803,38805,38807,38809,38811],{"class":107,"line":9904},[105,38804,38780],{"class":115},[105,38806,34855],{"class":164},[105,38808,494],{"class":115},[105,38810,32055],{"class":164},[105,38812,38032],{"class":115},[105,38814,38815],{"class":107,"line":9912},[105,38816,38037],{"class":115},[105,38818,38819,38821,38823,38825,38827],{"class":107,"line":9917},[105,38820,38780],{"class":115},[105,38822,32055],{"class":164},[105,38824,494],{"class":115},[105,38826,562],{"class":164},[105,38828,122],{"class":115},[105,38830,38831],{"class":107,"line":16596},[105,38832,38111],{"class":115},[105,38834,38835],{"class":107,"line":16602},[105,38836,2391],{"emptyLinePlaceholder":32},[105,38838,38839],{"class":107,"line":16625},[105,38840,38841],{"class":174},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[105,38843,38844],{"class":107,"line":16631},[105,38845,38846],{"class":174},"        # 循环遍历模型\n",[105,38848,38849,38851,38854,38856,38859],{"class":107,"line":16654},[105,38850,3394],{"class":111},[105,38852,38853],{"class":115}," m ",[105,38855,26028],{"class":111},[105,38857,38858],{"class":164}," self",[105,38860,38861],{"class":115},".modules():\n",[105,38863,38864],{"class":107,"line":16668},[105,38865,38866],{"class":174},"            # print(m)\n",[105,38868,38869,38871,38874],{"class":107,"line":16688},[105,38870,4633],{"class":111},[105,38872,38873],{"class":164}," isinstance",[105,38875,38876],{"class":115},"(m,nn.Conv2d):\n",[105,38878,38879],{"class":107,"line":16694},[105,38880,38881],{"class":174},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[105,38883,38884,38887,38890,38892,38895],{"class":107,"line":16705},[105,38885,38886],{"class":115},"                nn.init.kaiming_normal_(m.weight,",[105,38888,38889],{"class":5208},"nonlinearity",[105,38891,161],{"class":111},[105,38893,38894],{"class":220},"'relu'",[105,38896,122],{"class":115},[105,38898,38899],{"class":107,"line":16728},[105,38900,38901],{"class":174},"                # 判断b参数是否存在\n",[105,38903,38904,38907,38910,38913,38916,38919],{"class":107,"line":16750},[105,38905,38906],{"class":111},"                if",[105,38908,38909],{"class":115}," m.bias ",[105,38911,38912],{"class":111},"is",[105,38914,38915],{"class":111}," not",[105,38917,38918],{"class":164}," None",[105,38920,3730],{"class":115},[105,38922,38923],{"class":107,"line":16755},[105,38924,38925],{"class":174},"                    # 如果参数不存在的化初始化b=0\n",[105,38927,38928,38931,38933],{"class":107,"line":16761},[105,38929,38930],{"class":115},"                    nn.init.constant_(m.bias,",[105,38932,307],{"class":164},[105,38934,122],{"class":115},[105,38936,38937],{"class":107,"line":16775},[105,38938,38939],{"class":174},"            # 全连接层初始化\n",[105,38941,38942,38945,38947],{"class":107,"line":16788},[105,38943,38944],{"class":111},"            elif",[105,38946,38873],{"class":164},[105,38948,38949],{"class":115},"(m,nn.Linear):\n",[105,38951,38952],{"class":107,"line":16793},[105,38953,38954],{"class":174},"                # 这个初始化方法是利用的是正太分布的方式\n",[105,38956,38957],{"class":107,"line":16807},[105,38958,38959],{"class":174},"                # 均值为0，方差为0.01\n",[105,38961,38962,38965,38967,38969,38972],{"class":107,"line":16812},[105,38963,38964],{"class":115},"                nn.init.normal_(m.weight,",[105,38966,307],{"class":164},[105,38968,494],{"class":115},[105,38970,38971],{"class":164},"0.01",[105,38973,122],{"class":115},[105,38975,38976],{"class":107,"line":16818},[105,38977,38978],{"class":174},"                # 初始化b参数\n",[105,38980,38981,38983,38985,38987,38989,38991],{"class":107,"line":16823},[105,38982,38906],{"class":111},[105,38984,38909],{"class":115},[105,38986,38912],{"class":111},[105,38988,38915],{"class":111},[105,38990,38918],{"class":164},[105,38992,3730],{"class":115},[105,38994,38995,38997,38999],{"class":107,"line":16837},[105,38996,38930],{"class":115},[105,38998,307],{"class":164},[105,39000,122],{"class":115},[105,39002,39003],{"class":107,"line":16842},[105,39004,2391],{"emptyLinePlaceholder":32},[105,39006,39007],{"class":107,"line":16847},[105,39008,35150],{"class":174},[105,39010,39011,39013,39015],{"class":107,"line":16861},[105,39012,30786],{"class":111},[105,39014,31078],{"class":1954},[105,39016,31081],{"class":115},[105,39018,39019,39021,39023,39025],{"class":107,"line":16873},[105,39020,31086],{"class":115},[105,39022,161],{"class":111},[105,39024,30808],{"class":164},[105,39026,39027],{"class":115},".block1(x)\n",[105,39029,39030,39032,39034,39036],{"class":107,"line":16878},[105,39031,31086],{"class":115},[105,39033,161],{"class":111},[105,39035,30808],{"class":164},[105,39037,39038],{"class":115},".block2(x)\n",[105,39040,39041,39043,39045,39047],{"class":107,"line":16891},[105,39042,31086],{"class":115},[105,39044,161],{"class":111},[105,39046,30808],{"class":164},[105,39048,39049],{"class":115},".block3(x)\n",[105,39051,39052,39054,39056,39058],{"class":107,"line":16896},[105,39053,31086],{"class":115},[105,39055,161],{"class":111},[105,39057,30808],{"class":164},[105,39059,39060],{"class":115},".block4(x)\n",[105,39062,39063,39065,39067,39069],{"class":107,"line":16901},[105,39064,31086],{"class":115},[105,39066,161],{"class":111},[105,39068,30808],{"class":164},[105,39070,39071],{"class":115},".block5(x)\n",[105,39073,39074,39076,39078,39080],{"class":107,"line":16906},[105,39075,31086],{"class":115},[105,39077,161],{"class":111},[105,39079,30808],{"class":164},[105,39081,39082],{"class":115},".block6(x)\n",[105,39084,39085,39087],{"class":107,"line":16919},[105,39086,14744],{"class":111},[105,39088,31194],{"class":115},[105,39090,39091],{"class":107,"line":16924},[105,39092,2391],{"emptyLinePlaceholder":32},[105,39094,39095],{"class":107,"line":32618},[105,39096,39097],{"class":174},"# 验证模型\n",[105,39099,39100,39102,39104,39106,39109],{"class":107,"line":32624},[105,39101,1522],{"class":111},[105,39103,31205],{"class":164},[105,39105,2940],{"class":111},[105,39107,39108],{"class":220},"'__main__'",[105,39110,3730],{"class":115},[105,39112,39113,39115,39117,39119,39121,39123,39125,39127,39129],{"class":107,"line":32630},[105,39114,31222],{"class":115},[105,39116,161],{"class":111},[105,39118,30436],{"class":115},[105,39120,31229],{"class":220},[105,39122,1695],{"class":111},[105,39124,31234],{"class":115},[105,39126,1692],{"class":111},[105,39128,30461],{"class":220},[105,39130,122],{"class":115},[105,39132,39133,39135],{"class":107,"line":32636},[105,39134,31284],{"class":164},[105,39136,30470],{"class":115},[105,39138,39139,39141,39143],{"class":107,"line":32642},[105,39140,31274],{"class":115},[105,39142,161],{"class":111},[105,39144,39145],{"class":115},"VGG16().to(device)\n",[105,39147,39148,39150,39152,39154,39156,39158,39160,39162],{"class":107,"line":32653},[105,39149,31284],{"class":164},[105,39151,31287],{"class":115},[105,39153,333],{"class":164},[105,39155,494],{"class":115},[105,39157,31486],{"class":164},[105,39159,494],{"class":115},[105,39161,31486],{"class":164},[105,39163,31300],{"class":115},[59,39165,39166],{"start":28},[62,39167,39168],{},"训练代码",[14,39170,39171],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39173,39174],{},"解决方式:",[14,39176,39177],{},"①权重初始化",[96,39179,39181],{"className":30363,"code":39180,"language":30365,"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",[102,39182,39183,39188,39193,39205,39210,39218,39223,39236,39241,39255,39260,39269,39274,39283,39288,39293,39306,39311,39325],{"__ignoreMap":22},[105,39184,39185],{"class":107,"line":108},[105,39186,39187],{"class":174},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[105,39189,39190],{"class":107,"line":28},[105,39191,39192],{"class":174},"# 循环遍历模型\n",[105,39194,39195,39197,39199,39201,39203],{"class":107,"line":1171},[105,39196,3016],{"class":111},[105,39198,38853],{"class":115},[105,39200,26028],{"class":111},[105,39202,38858],{"class":164},[105,39204,38861],{"class":115},[105,39206,39207],{"class":107,"line":1186},[105,39208,39209],{"class":174},"    # print(m)\n",[105,39211,39212,39214,39216],{"class":107,"line":1192},[105,39213,3092],{"class":111},[105,39215,38873],{"class":164},[105,39217,38876],{"class":115},[105,39219,39220],{"class":107,"line":1206},[105,39221,39222],{"class":174},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[105,39224,39225,39228,39230,39232,39234],{"class":107,"line":1212},[105,39226,39227],{"class":115},"        nn.init.kaiming_normal_(m.weight,",[105,39229,38889],{"class":5208},[105,39231,161],{"class":111},[105,39233,38894],{"class":220},[105,39235,122],{"class":115},[105,39237,39238],{"class":107,"line":1303},[105,39239,39240],{"class":174},"        # 判断b参数是否存在\n",[105,39242,39243,39245,39247,39249,39251,39253],{"class":107,"line":1309},[105,39244,2488],{"class":111},[105,39246,38909],{"class":115},[105,39248,38912],{"class":111},[105,39250,38915],{"class":111},[105,39252,38918],{"class":164},[105,39254,3730],{"class":115},[105,39256,39257],{"class":107,"line":1321},[105,39258,39259],{"class":174},"            # 如果参数不存在的化初始化b=0\n",[105,39261,39262,39265,39267],{"class":107,"line":1603},[105,39263,39264],{"class":115},"            nn.init.constant_(m.bias,",[105,39266,307],{"class":164},[105,39268,122],{"class":115},[105,39270,39271],{"class":107,"line":1608},[105,39272,39273],{"class":174},"    # 全连接层初始化\n",[105,39275,39276,39279,39281],{"class":107,"line":1614},[105,39277,39278],{"class":111},"    elif",[105,39280,38873],{"class":164},[105,39282,38949],{"class":115},[105,39284,39285],{"class":107,"line":1619},[105,39286,39287],{"class":174},"        # 这个初始化方法是利用的是正太分布的方式\n",[105,39289,39290],{"class":107,"line":1633},[105,39291,39292],{"class":174},"        # 均值为0，方差为0.01\n",[105,39294,39295,39298,39300,39302,39304],{"class":107,"line":1638},[105,39296,39297],{"class":115},"        nn.init.normal_(m.weight,",[105,39299,307],{"class":164},[105,39301,494],{"class":115},[105,39303,38971],{"class":164},[105,39305,122],{"class":115},[105,39307,39308],{"class":107,"line":1644},[105,39309,39310],{"class":174},"        # 初始化b参数\n",[105,39312,39313,39315,39317,39319,39321,39323],{"class":107,"line":1665},[105,39314,2488],{"class":111},[105,39316,38909],{"class":115},[105,39318,38912],{"class":111},[105,39320,38915],{"class":111},[105,39322,38918],{"class":164},[105,39324,3730],{"class":115},[105,39326,39327,39329,39331],{"class":107,"line":1670},[105,39328,39264],{"class":115},[105,39330,307],{"class":164},[105,39332,122],{"class":115},[14,39334,39335],{},"②尽可能地增加批次",[14,39337,39338],{},"训练完整代码：",[96,39340,39341],{"className":30363,"code":37884,"language":30365,"meta":22,"style":22},[102,39342,39343,39349,39359,39369,39379,39383,39399,39407,39425,39429,39433,39443,39479,39483,39519,39523,39551,39555,39559,39569,39605,39609,39645,39649,39677,39681,39685,39695,39731,39735,39771,39775,39811,39815,39843,39847,39851,39861,39897,39901,39937,39941,39977,39981,40009,40013,40017,40027,40063,40067,40103,40107,40143,40147,40175,40179,40183,40193,40197,40201,40205,40225,40229,40241,40245,40257,40261,40265,40269,40273,40285,40289,40297,40301,40313,40317,40331,40335,40343,40347,40355,40359,40363,40375,40379,40393,40401,40405,40409,40417,40427,40437,40447,40457,40467,40477,40483,40487,40491,40503,40523,40529,40537],{"__ignoreMap":22},[105,39344,39345,39347],{"class":107,"line":108},[105,39346,30377],{"class":111},[105,39348,30380],{"class":115},[105,39350,39351,39353,39355,39357],{"class":107,"line":28},[105,39352,30722],{"class":111},[105,39354,37899],{"class":115},[105,39356,30377],{"class":111},[105,39358,37904],{"class":115},[105,39360,39361,39363,39365,39367],{"class":107,"line":1171},[105,39362,30722],{"class":111},[105,39364,30725],{"class":115},[105,39366,30377],{"class":111},[105,39368,30730],{"class":115},[105,39370,39371,39373,39375,39377],{"class":107,"line":1186},[105,39372,30722],{"class":111},[105,39374,30742],{"class":115},[105,39376,30377],{"class":111},[105,39378,30747],{"class":115},[105,39380,39381],{"class":107,"line":1192},[105,39382,2391],{"emptyLinePlaceholder":32},[105,39384,39385,39387,39389,39391,39393,39395,39397],{"class":107,"line":1206},[105,39386,14686],{"class":111},[105,39388,37935],{"class":1954},[105,39390,116],{"class":115},[105,39392,30763],{"class":1954},[105,39394,674],{"class":115},[105,39396,30768],{"class":1954},[105,39398,30771],{"class":115},[105,39400,39401,39403,39405],{"class":107,"line":1212},[105,39402,30786],{"class":111},[105,39404,30789],{"class":164},[105,39406,30792],{"class":115},[105,39408,39409,39411,39413,39415,39417,39419,39421,39423],{"class":107,"line":1303},[105,39410,30802],{"class":164},[105,39412,116],{"class":115},[105,39414,37962],{"class":164},[105,39416,12427],{"class":115},[105,39418,30808],{"class":164},[105,39420,30811],{"class":115},[105,39422,30814],{"class":164},[105,39424,1967],{"class":115},[105,39426,39427],{"class":107,"line":1309},[105,39428,37977],{"class":174},[105,39430,39431],{"class":107,"line":1321},[105,39432,37982],{"class":174},[105,39434,39435,39437,39439,39441],{"class":107,"line":1603},[105,39436,30830],{"class":164},[105,39438,37989],{"class":115},[105,39440,161],{"class":111},[105,39442,37994],{"class":115},[105,39444,39445,39447,39449,39451,39453,39455,39457,39459,39461,39463,39465,39467,39469,39471,39473,39475,39477],{"class":107,"line":1608},[105,39446,37999],{"class":115},[105,39448,30841],{"class":5208},[105,39450,161],{"class":111},[105,39452,333],{"class":164},[105,39454,494],{"class":115},[105,39456,30850],{"class":5208},[105,39458,161],{"class":111},[105,39460,319],{"class":164},[105,39462,494],{"class":115},[105,39464,30859],{"class":5208},[105,39466,161],{"class":111},[105,39468,187],{"class":164},[105,39470,494],{"class":115},[105,39472,30868],{"class":5208},[105,39474,161],{"class":111},[105,39476,333],{"class":164},[105,39478,38032],{"class":115},[105,39480,39481],{"class":107,"line":1614},[105,39482,38037],{"class":115},[105,39484,39485,39487,39489,39491,39493,39495,39497,39499,39501,39503,39505,39507,39509,39511,39513,39515,39517],{"class":107,"line":1619},[105,39486,37999],{"class":115},[105,39488,30841],{"class":5208},[105,39490,161],{"class":111},[105,39492,319],{"class":164},[105,39494,494],{"class":115},[105,39496,30850],{"class":5208},[105,39498,161],{"class":111},[105,39500,319],{"class":164},[105,39502,494],{"class":115},[105,39504,30859],{"class":5208},[105,39506,161],{"class":111},[105,39508,187],{"class":164},[105,39510,494],{"class":115},[105,39512,30868],{"class":5208},[105,39514,161],{"class":111},[105,39516,333],{"class":164},[105,39518,38032],{"class":115},[105,39520,39521],{"class":107,"line":1633},[105,39522,38037],{"class":115},[105,39524,39525,39527,39529,39531,39533,39535,39537,39539,39541,39543,39545,39547,39549],{"class":107,"line":1638},[105,39526,38082],{"class":115},[105,39528,30859],{"class":5208},[105,39530,161],{"class":111},[105,39532,193],{"class":164},[105,39534,494],{"class":115},[105,39536,30914],{"class":5208},[105,39538,161],{"class":111},[105,39540,193],{"class":164},[105,39542,494],{"class":115},[105,39544,30868],{"class":5208},[105,39546,161],{"class":111},[105,39548,307],{"class":164},[105,39550,122],{"class":115},[105,39552,39553],{"class":107,"line":1644},[105,39554,38111],{"class":115},[105,39556,39557],{"class":107,"line":1665},[105,39558,38116],{"class":174},[105,39560,39561,39563,39565,39567],{"class":107,"line":1670},[105,39562,30830],{"class":164},[105,39564,38123],{"class":115},[105,39566,161],{"class":111},[105,39568,37994],{"class":115},[105,39570,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597,39599,39601,39603],{"class":107,"line":1684},[105,39572,37999],{"class":115},[105,39574,30841],{"class":5208},[105,39576,161],{"class":111},[105,39578,319],{"class":164},[105,39580,494],{"class":115},[105,39582,30850],{"class":5208},[105,39584,161],{"class":111},[105,39586,32055],{"class":164},[105,39588,494],{"class":115},[105,39590,30859],{"class":5208},[105,39592,161],{"class":111},[105,39594,187],{"class":164},[105,39596,494],{"class":115},[105,39598,30868],{"class":5208},[105,39600,161],{"class":111},[105,39602,333],{"class":164},[105,39604,38032],{"class":115},[105,39606,39607],{"class":107,"line":1689},[105,39608,38037],{"class":115},[105,39610,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641,39643],{"class":107,"line":1718},[105,39612,37999],{"class":115},[105,39614,30841],{"class":5208},[105,39616,161],{"class":111},[105,39618,32055],{"class":164},[105,39620,494],{"class":115},[105,39622,30850],{"class":5208},[105,39624,161],{"class":111},[105,39626,32055],{"class":164},[105,39628,494],{"class":115},[105,39630,30859],{"class":5208},[105,39632,161],{"class":111},[105,39634,187],{"class":164},[105,39636,494],{"class":115},[105,39638,30868],{"class":5208},[105,39640,161],{"class":111},[105,39642,333],{"class":164},[105,39644,38032],{"class":115},[105,39646,39647],{"class":107,"line":1723},[105,39648,38037],{"class":115},[105,39650,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675],{"class":107,"line":1740},[105,39652,38082],{"class":115},[105,39654,30859],{"class":5208},[105,39656,161],{"class":111},[105,39658,193],{"class":164},[105,39660,494],{"class":115},[105,39662,30914],{"class":5208},[105,39664,161],{"class":111},[105,39666,193],{"class":164},[105,39668,494],{"class":115},[105,39670,30868],{"class":5208},[105,39672,161],{"class":111},[105,39674,307],{"class":164},[105,39676,122],{"class":115},[105,39678,39679],{"class":107,"line":1745},[105,39680,38111],{"class":115},[105,39682,39683],{"class":107,"line":1750},[105,39684,38244],{"class":174},[105,39686,39687,39689,39691,39693],{"class":107,"line":1755},[105,39688,30830],{"class":164},[105,39690,38251],{"class":115},[105,39692,161],{"class":111},[105,39694,37994],{"class":115},[105,39696,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723,39725,39727,39729],{"class":107,"line":1769},[105,39698,37999],{"class":115},[105,39700,30841],{"class":5208},[105,39702,161],{"class":111},[105,39704,32055],{"class":164},[105,39706,494],{"class":115},[105,39708,30850],{"class":5208},[105,39710,161],{"class":111},[105,39712,34855],{"class":164},[105,39714,494],{"class":115},[105,39716,30859],{"class":5208},[105,39718,161],{"class":111},[105,39720,187],{"class":164},[105,39722,494],{"class":115},[105,39724,30868],{"class":5208},[105,39726,161],{"class":111},[105,39728,333],{"class":164},[105,39730,38032],{"class":115},[105,39732,39733],{"class":107,"line":1774},[105,39734,38037],{"class":115},[105,39736,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767,39769],{"class":107,"line":2568},[105,39738,37999],{"class":115},[105,39740,30841],{"class":5208},[105,39742,161],{"class":111},[105,39744,34855],{"class":164},[105,39746,494],{"class":115},[105,39748,30850],{"class":5208},[105,39750,161],{"class":111},[105,39752,34855],{"class":164},[105,39754,494],{"class":115},[105,39756,30859],{"class":5208},[105,39758,161],{"class":111},[105,39760,187],{"class":164},[105,39762,494],{"class":115},[105,39764,30868],{"class":5208},[105,39766,161],{"class":111},[105,39768,333],{"class":164},[105,39770,38032],{"class":115},[105,39772,39773],{"class":107,"line":2582},[105,39774,38037],{"class":115},[105,39776,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809],{"class":107,"line":2590},[105,39778,37999],{"class":115},[105,39780,30841],{"class":5208},[105,39782,161],{"class":111},[105,39784,34855],{"class":164},[105,39786,494],{"class":115},[105,39788,30850],{"class":5208},[105,39790,161],{"class":111},[105,39792,34855],{"class":164},[105,39794,494],{"class":115},[105,39796,30859],{"class":5208},[105,39798,161],{"class":111},[105,39800,187],{"class":164},[105,39802,494],{"class":115},[105,39804,30868],{"class":5208},[105,39806,161],{"class":111},[105,39808,333],{"class":164},[105,39810,38032],{"class":115},[105,39812,39813],{"class":107,"line":2595},[105,39814,38037],{"class":115},[105,39816,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841],{"class":107,"line":2601},[105,39818,38082],{"class":115},[105,39820,30859],{"class":5208},[105,39822,161],{"class":111},[105,39824,193],{"class":164},[105,39826,494],{"class":115},[105,39828,30914],{"class":5208},[105,39830,161],{"class":111},[105,39832,193],{"class":164},[105,39834,494],{"class":115},[105,39836,30868],{"class":5208},[105,39838,161],{"class":111},[105,39840,307],{"class":164},[105,39842,122],{"class":115},[105,39844,39845],{"class":107,"line":2607},[105,39846,38111],{"class":115},[105,39848,39849],{"class":107,"line":2612},[105,39850,38412],{"class":174},[105,39852,39853,39855,39857,39859],{"class":107,"line":7940},[105,39854,30830],{"class":164},[105,39856,38419],{"class":115},[105,39858,161],{"class":111},[105,39860,37994],{"class":115},[105,39862,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889,39891,39893,39895],{"class":107,"line":7964},[105,39864,37999],{"class":115},[105,39866,30841],{"class":5208},[105,39868,161],{"class":111},[105,39870,34855],{"class":164},[105,39872,494],{"class":115},[105,39874,30850],{"class":5208},[105,39876,161],{"class":111},[105,39878,38442],{"class":164},[105,39880,494],{"class":115},[105,39882,30859],{"class":5208},[105,39884,161],{"class":111},[105,39886,187],{"class":164},[105,39888,494],{"class":115},[105,39890,30868],{"class":5208},[105,39892,161],{"class":111},[105,39894,333],{"class":164},[105,39896,38032],{"class":115},[105,39898,39899],{"class":107,"line":7969},[105,39900,38037],{"class":115},[105,39902,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935],{"class":107,"line":7975},[105,39904,37999],{"class":115},[105,39906,30841],{"class":5208},[105,39908,161],{"class":111},[105,39910,38442],{"class":164},[105,39912,494],{"class":115},[105,39914,30850],{"class":5208},[105,39916,161],{"class":111},[105,39918,38442],{"class":164},[105,39920,494],{"class":115},[105,39922,30859],{"class":5208},[105,39924,161],{"class":111},[105,39926,187],{"class":164},[105,39928,494],{"class":115},[105,39930,30868],{"class":5208},[105,39932,161],{"class":111},[105,39934,333],{"class":164},[105,39936,38032],{"class":115},[105,39938,39939],{"class":107,"line":8002},[105,39940,38037],{"class":115},[105,39942,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975],{"class":107,"line":8007},[105,39944,37999],{"class":115},[105,39946,30841],{"class":5208},[105,39948,161],{"class":111},[105,39950,38442],{"class":164},[105,39952,494],{"class":115},[105,39954,30850],{"class":5208},[105,39956,161],{"class":111},[105,39958,38442],{"class":164},[105,39960,494],{"class":115},[105,39962,30859],{"class":5208},[105,39964,161],{"class":111},[105,39966,187],{"class":164},[105,39968,494],{"class":115},[105,39970,30868],{"class":5208},[105,39972,161],{"class":111},[105,39974,333],{"class":164},[105,39976,38032],{"class":115},[105,39978,39979],{"class":107,"line":8013},[105,39980,38037],{"class":115},[105,39982,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007],{"class":107,"line":8025},[105,39984,38082],{"class":115},[105,39986,30859],{"class":5208},[105,39988,161],{"class":111},[105,39990,193],{"class":164},[105,39992,494],{"class":115},[105,39994,30914],{"class":5208},[105,39996,161],{"class":111},[105,39998,193],{"class":164},[105,40000,494],{"class":115},[105,40002,30868],{"class":5208},[105,40004,161],{"class":111},[105,40006,307],{"class":164},[105,40008,122],{"class":115},[105,40010,40011],{"class":107,"line":8037},[105,40012,38111],{"class":115},[105,40014,40015],{"class":107,"line":8049},[105,40016,38581],{"class":174},[105,40018,40019,40021,40023,40025],{"class":107,"line":9708},[105,40020,30830],{"class":164},[105,40022,38588],{"class":115},[105,40024,161],{"class":111},[105,40026,37994],{"class":115},[105,40028,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055,40057,40059,40061],{"class":107,"line":9733},[105,40030,37999],{"class":115},[105,40032,30841],{"class":5208},[105,40034,161],{"class":111},[105,40036,38442],{"class":164},[105,40038,494],{"class":115},[105,40040,30850],{"class":5208},[105,40042,161],{"class":111},[105,40044,38442],{"class":164},[105,40046,494],{"class":115},[105,40048,30859],{"class":5208},[105,40050,161],{"class":111},[105,40052,187],{"class":164},[105,40054,494],{"class":115},[105,40056,30868],{"class":5208},[105,40058,161],{"class":111},[105,40060,333],{"class":164},[105,40062,38032],{"class":115},[105,40064,40065],{"class":107,"line":9756},[105,40066,38037],{"class":115},[105,40068,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101],{"class":107,"line":9780},[105,40070,37999],{"class":115},[105,40072,30841],{"class":5208},[105,40074,161],{"class":111},[105,40076,38442],{"class":164},[105,40078,494],{"class":115},[105,40080,30850],{"class":5208},[105,40082,161],{"class":111},[105,40084,38442],{"class":164},[105,40086,494],{"class":115},[105,40088,30859],{"class":5208},[105,40090,161],{"class":111},[105,40092,187],{"class":164},[105,40094,494],{"class":115},[105,40096,30868],{"class":5208},[105,40098,161],{"class":111},[105,40100,333],{"class":164},[105,40102,38032],{"class":115},[105,40104,40105],{"class":107,"line":9785},[105,40106,38037],{"class":115},[105,40108,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141],{"class":107,"line":9790},[105,40110,37999],{"class":115},[105,40112,30841],{"class":5208},[105,40114,161],{"class":111},[105,40116,38442],{"class":164},[105,40118,494],{"class":115},[105,40120,30850],{"class":5208},[105,40122,161],{"class":111},[105,40124,38442],{"class":164},[105,40126,494],{"class":115},[105,40128,30859],{"class":5208},[105,40130,161],{"class":111},[105,40132,187],{"class":164},[105,40134,494],{"class":115},[105,40136,30868],{"class":5208},[105,40138,161],{"class":111},[105,40140,333],{"class":164},[105,40142,38032],{"class":115},[105,40144,40145],{"class":107,"line":9795},[105,40146,38037],{"class":115},[105,40148,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173],{"class":107,"line":9804},[105,40150,38082],{"class":115},[105,40152,30859],{"class":5208},[105,40154,161],{"class":111},[105,40156,193],{"class":164},[105,40158,494],{"class":115},[105,40160,30914],{"class":5208},[105,40162,161],{"class":111},[105,40164,193],{"class":164},[105,40166,494],{"class":115},[105,40168,30868],{"class":5208},[105,40170,161],{"class":111},[105,40172,307],{"class":164},[105,40174,122],{"class":115},[105,40176,40177],{"class":107,"line":9809},[105,40178,38111],{"class":115},[105,40180,40181],{"class":107,"line":9815},[105,40182,38749],{"class":174},[105,40184,40185,40187,40189,40191],{"class":107,"line":9836},[105,40186,30830],{"class":164},[105,40188,38756],{"class":115},[105,40190,161],{"class":111},[105,40192,37994],{"class":115},[105,40194,40195],{"class":107,"line":9842},[105,40196,38765],{"class":174},[105,40198,40199],{"class":107,"line":9856},[105,40200,38770],{"class":174},[105,40202,40203],{"class":107,"line":9862},[105,40204,38775],{"class":115},[105,40206,40207,40209,40211,40213,40215,40217,40219,40221,40223],{"class":107,"line":9889},[105,40208,38780],{"class":115},[105,40210,485],{"class":164},[105,40212,571],{"class":111},[105,40214,485],{"class":164},[105,40216,571],{"class":111},[105,40218,38442],{"class":164},[105,40220,494],{"class":115},[105,40222,34855],{"class":164},[105,40224,38032],{"class":115},[105,40226,40227],{"class":107,"line":9898},[105,40228,38037],{"class":115},[105,40230,40231,40233,40235,40237,40239],{"class":107,"line":9904},[105,40232,38780],{"class":115},[105,40234,34855],{"class":164},[105,40236,494],{"class":115},[105,40238,32055],{"class":164},[105,40240,38032],{"class":115},[105,40242,40243],{"class":107,"line":9912},[105,40244,38037],{"class":115},[105,40246,40247,40249,40251,40253,40255],{"class":107,"line":9917},[105,40248,38780],{"class":115},[105,40250,32055],{"class":164},[105,40252,494],{"class":115},[105,40254,562],{"class":164},[105,40256,122],{"class":115},[105,40258,40259],{"class":107,"line":16596},[105,40260,38111],{"class":115},[105,40262,40263],{"class":107,"line":16602},[105,40264,2391],{"emptyLinePlaceholder":32},[105,40266,40267],{"class":107,"line":16625},[105,40268,38841],{"class":174},[105,40270,40271],{"class":107,"line":16631},[105,40272,38846],{"class":174},[105,40274,40275,40277,40279,40281,40283],{"class":107,"line":16654},[105,40276,3394],{"class":111},[105,40278,38853],{"class":115},[105,40280,26028],{"class":111},[105,40282,38858],{"class":164},[105,40284,38861],{"class":115},[105,40286,40287],{"class":107,"line":16668},[105,40288,38866],{"class":174},[105,40290,40291,40293,40295],{"class":107,"line":16688},[105,40292,4633],{"class":111},[105,40294,38873],{"class":164},[105,40296,38876],{"class":115},[105,40298,40299],{"class":107,"line":16694},[105,40300,38881],{"class":174},[105,40302,40303,40305,40307,40309,40311],{"class":107,"line":16705},[105,40304,38886],{"class":115},[105,40306,38889],{"class":5208},[105,40308,161],{"class":111},[105,40310,38894],{"class":220},[105,40312,122],{"class":115},[105,40314,40315],{"class":107,"line":16728},[105,40316,38901],{"class":174},[105,40318,40319,40321,40323,40325,40327,40329],{"class":107,"line":16750},[105,40320,38906],{"class":111},[105,40322,38909],{"class":115},[105,40324,38912],{"class":111},[105,40326,38915],{"class":111},[105,40328,38918],{"class":164},[105,40330,3730],{"class":115},[105,40332,40333],{"class":107,"line":16755},[105,40334,38925],{"class":174},[105,40336,40337,40339,40341],{"class":107,"line":16761},[105,40338,38930],{"class":115},[105,40340,307],{"class":164},[105,40342,122],{"class":115},[105,40344,40345],{"class":107,"line":16775},[105,40346,38939],{"class":174},[105,40348,40349,40351,40353],{"class":107,"line":16788},[105,40350,38944],{"class":111},[105,40352,38873],{"class":164},[105,40354,38949],{"class":115},[105,40356,40357],{"class":107,"line":16793},[105,40358,38954],{"class":174},[105,40360,40361],{"class":107,"line":16807},[105,40362,38959],{"class":174},[105,40364,40365,40367,40369,40371,40373],{"class":107,"line":16812},[105,40366,38964],{"class":115},[105,40368,307],{"class":164},[105,40370,494],{"class":115},[105,40372,38971],{"class":164},[105,40374,122],{"class":115},[105,40376,40377],{"class":107,"line":16818},[105,40378,38978],{"class":174},[105,40380,40381,40383,40385,40387,40389,40391],{"class":107,"line":16823},[105,40382,38906],{"class":111},[105,40384,38909],{"class":115},[105,40386,38912],{"class":111},[105,40388,38915],{"class":111},[105,40390,38918],{"class":164},[105,40392,3730],{"class":115},[105,40394,40395,40397,40399],{"class":107,"line":16837},[105,40396,38930],{"class":115},[105,40398,307],{"class":164},[105,40400,122],{"class":115},[105,40402,40403],{"class":107,"line":16842},[105,40404,2391],{"emptyLinePlaceholder":32},[105,40406,40407],{"class":107,"line":16847},[105,40408,35150],{"class":174},[105,40410,40411,40413,40415],{"class":107,"line":16861},[105,40412,30786],{"class":111},[105,40414,31078],{"class":1954},[105,40416,31081],{"class":115},[105,40418,40419,40421,40423,40425],{"class":107,"line":16873},[105,40420,31086],{"class":115},[105,40422,161],{"class":111},[105,40424,30808],{"class":164},[105,40426,39027],{"class":115},[105,40428,40429,40431,40433,40435],{"class":107,"line":16878},[105,40430,31086],{"class":115},[105,40432,161],{"class":111},[105,40434,30808],{"class":164},[105,40436,39038],{"class":115},[105,40438,40439,40441,40443,40445],{"class":107,"line":16891},[105,40440,31086],{"class":115},[105,40442,161],{"class":111},[105,40444,30808],{"class":164},[105,40446,39049],{"class":115},[105,40448,40449,40451,40453,40455],{"class":107,"line":16896},[105,40450,31086],{"class":115},[105,40452,161],{"class":111},[105,40454,30808],{"class":164},[105,40456,39060],{"class":115},[105,40458,40459,40461,40463,40465],{"class":107,"line":16901},[105,40460,31086],{"class":115},[105,40462,161],{"class":111},[105,40464,30808],{"class":164},[105,40466,39071],{"class":115},[105,40468,40469,40471,40473,40475],{"class":107,"line":16906},[105,40470,31086],{"class":115},[105,40472,161],{"class":111},[105,40474,30808],{"class":164},[105,40476,39082],{"class":115},[105,40478,40479,40481],{"class":107,"line":16919},[105,40480,14744],{"class":111},[105,40482,31194],{"class":115},[105,40484,40485],{"class":107,"line":16924},[105,40486,2391],{"emptyLinePlaceholder":32},[105,40488,40489],{"class":107,"line":32618},[105,40490,39097],{"class":174},[105,40492,40493,40495,40497,40499,40501],{"class":107,"line":32624},[105,40494,1522],{"class":111},[105,40496,31205],{"class":164},[105,40498,2940],{"class":111},[105,40500,39108],{"class":220},[105,40502,3730],{"class":115},[105,40504,40505,40507,40509,40511,40513,40515,40517,40519,40521],{"class":107,"line":32630},[105,40506,31222],{"class":115},[105,40508,161],{"class":111},[105,40510,30436],{"class":115},[105,40512,31229],{"class":220},[105,40514,1695],{"class":111},[105,40516,31234],{"class":115},[105,40518,1692],{"class":111},[105,40520,30461],{"class":220},[105,40522,122],{"class":115},[105,40524,40525,40527],{"class":107,"line":32636},[105,40526,31284],{"class":164},[105,40528,30470],{"class":115},[105,40530,40531,40533,40535],{"class":107,"line":32642},[105,40532,31274],{"class":115},[105,40534,161],{"class":111},[105,40536,39145],{"class":115},[105,40538,40539,40541,40543,40545,40547,40549,40551,40553],{"class":107,"line":32653},[105,40540,31284],{"class":164},[105,40542,31287],{"class":115},[105,40544,333],{"class":164},[105,40546,494],{"class":115},[105,40548,31486],{"class":164},[105,40550,494],{"class":115},[105,40552,31486],{"class":164},[105,40554,31300],{"class":115},[59,40556,40557],{"start":1171},[62,40558,40559],{},"测试代码",[96,40561,40563],{"className":30363,"code":40562,"language":30365,"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",[102,40564,40565,40571,40581,40591,40595,40605,40616,40620,40624,40628,40636,40652,40662,40678,40688,40702,40706,40716,40726,40736,40742,40746,40750,40758,40762,40778,40786,40790,40794,40802,40810,40814,40818,40822,40826,40832,40836,40846,40854,40862,40866,40870,40874,40882,40886,40902,40906,40910,40914,40926,40930,40942,40946,40950,40962,40966,40976,40980,40984,40996,41000,41009,41013,41017,41025,41029,41037,41041,41045,41049,41053,41057,41073,41081,41085,41089,41137,41143,41147,41157,41165,41173,41177,41181,41185,41189,41197,41201,41217,41221,41229,41237],{"__ignoreMap":22},[105,40566,40567,40569],{"class":107,"line":108},[105,40568,30377],{"class":111},[105,40570,30380],{"class":115},[105,40572,40573,40575,40577,40579],{"class":107,"line":28},[105,40574,30377],{"class":111},[105,40576,31400],{"class":115},[105,40578,31368],{"class":111},[105,40580,31405],{"class":115},[105,40582,40583,40585,40587,40589],{"class":107,"line":1171},[105,40584,30722],{"class":111},[105,40586,31383],{"class":115},[105,40588,30377],{"class":111},[105,40590,31388],{"class":115},[105,40592,40593],{"class":107,"line":1186},[105,40594,33907],{"class":174},[105,40596,40597,40599,40601,40603],{"class":107,"line":1192},[105,40598,30722],{"class":111},[105,40600,31353],{"class":115},[105,40602,30377],{"class":111},[105,40604,31358],{"class":115},[105,40606,40607,40609,40611,40613],{"class":107,"line":1206},[105,40608,30722],{"class":111},[105,40610,31899],{"class":115},[105,40612,30377],{"class":111},[105,40614,40615],{"class":164}," VGG16\n",[105,40617,40618],{"class":107,"line":1212},[105,40619,2391],{"emptyLinePlaceholder":32},[105,40621,40622],{"class":107,"line":1303},[105,40623,2391],{"emptyLinePlaceholder":32},[105,40625,40626],{"class":107,"line":1309},[105,40627,33936],{"class":174},[105,40629,40630,40632,40634],{"class":107,"line":1321},[105,40631,31932],{"class":111},[105,40633,33943],{"class":1954},[105,40635,31938],{"class":115},[105,40637,40638,40640,40642,40644,40646,40648,40650],{"class":107,"line":1603},[105,40639,33950],{"class":115},[105,40641,161],{"class":111},[105,40643,31440],{"class":115},[105,40645,31443],{"class":5208},[105,40647,161],{"class":111},[105,40649,31448],{"class":220},[105,40651,31451],{"class":115},[105,40653,40654,40656,40658,40660],{"class":107,"line":1608},[105,40655,33967],{"class":5208},[105,40657,161],{"class":111},[105,40659,33972],{"class":164},[105,40661,31451],{"class":115},[105,40663,40664,40666,40668,40670,40672,40674,40676],{"class":107,"line":1614},[105,40665,33979],{"class":5208},[105,40667,161],{"class":111},[105,40669,31478],{"class":115},[105,40671,31481],{"class":5208},[105,40673,161],{"class":111},[105,40675,31486],{"class":164},[105,40677,31489],{"class":115},[105,40679,40680,40682,40684,40686],{"class":107,"line":1619},[105,40681,33996],{"class":5208},[105,40683,161],{"class":111},[105,40685,31461],{"class":164},[105,40687,122],{"class":115},[105,40689,40690,40692,40694,40696,40698,40700],{"class":107,"line":1633},[105,40691,34007],{"class":115},[105,40693,161],{"class":111},[105,40695,31519],{"class":115},[105,40697,31522],{"class":5208},[105,40699,161],{"class":111},[105,40701,34018],{"class":115},[105,40703,40704],{"class":107,"line":1638},[105,40705,34023],{"class":174},[105,40707,40708,40710,40712,40714],{"class":107,"line":1644},[105,40709,34028],{"class":5208},[105,40711,161],{"class":111},[105,40713,333],{"class":164},[105,40715,31451],{"class":115},[105,40717,40718,40720,40722,40724],{"class":107,"line":1665},[105,40719,34039],{"class":5208},[105,40721,161],{"class":111},[105,40723,31461],{"class":164},[105,40725,31451],{"class":115},[105,40727,40728,40730,40732,40734],{"class":107,"line":1670},[105,40729,34050],{"class":5208},[105,40731,161],{"class":111},[105,40733,307],{"class":164},[105,40735,122],{"class":115},[105,40737,40738,40740],{"class":107,"line":1684},[105,40739,4081],{"class":111},[105,40741,34063],{"class":115},[105,40743,40744],{"class":107,"line":1689},[105,40745,2391],{"emptyLinePlaceholder":32},[105,40747,40748],{"class":107,"line":1718},[105,40749,34072],{"class":174},[105,40751,40752,40754,40756],{"class":107,"line":1723},[105,40753,31932],{"class":111},[105,40755,34079],{"class":1954},[105,40757,34082],{"class":115},[105,40759,40760],{"class":107,"line":1740},[105,40761,34087],{"class":174},[105,40763,40764,40766,40768,40770,40772,40774,40776],{"class":107,"line":1745},[105,40765,31222],{"class":115},[105,40767,161],{"class":111},[105,40769,31229],{"class":220},[105,40771,1695],{"class":111},[105,40773,31234],{"class":115},[105,40775,1692],{"class":111},[105,40777,34104],{"class":220},[105,40779,40780,40782,40784],{"class":107,"line":1750},[105,40781,31274],{"class":115},[105,40783,161],{"class":111},[105,40785,32274],{"class":115},[105,40787,40788],{"class":107,"line":1755},[105,40789,2391],{"emptyLinePlaceholder":32},[105,40791,40792],{"class":107,"line":1769},[105,40793,34121],{"class":174},[105,40795,40796,40798,40800],{"class":107,"line":1774},[105,40797,34126],{"class":115},[105,40799,161],{"class":111},[105,40801,32327],{"class":164},[105,40803,40804,40806,40808],{"class":107,"line":2568},[105,40805,34135],{"class":115},[105,40807,161],{"class":111},[105,40809,3076],{"class":164},[105,40811,40812],{"class":107,"line":2582},[105,40813,2391],{"emptyLinePlaceholder":32},[105,40815,40816],{"class":107,"line":2590},[105,40817,34148],{"class":174},[105,40819,40820],{"class":107,"line":2595},[105,40821,34153],{"class":174},[105,40823,40824],{"class":107,"line":2601},[105,40825,34158],{"class":174},[105,40827,40828,40830],{"class":107,"line":2607},[105,40829,34163],{"class":111},[105,40831,32869],{"class":115},[105,40833,40834],{"class":107,"line":2612},[105,40835,34170],{"class":174},[105,40837,40838,40840,40842,40844],{"class":107,"line":7940},[105,40839,3394],{"class":111},[105,40841,34177],{"class":115},[105,40843,26028],{"class":111},[105,40845,34182],{"class":115},[105,40847,40848,40850,40852],{"class":107,"line":7964},[105,40849,34187],{"class":115},[105,40851,161],{"class":111},[105,40853,34192],{"class":115},[105,40855,40856,40858,40860],{"class":107,"line":7969},[105,40857,34197],{"class":115},[105,40859,161],{"class":111},[105,40861,34202],{"class":115},[105,40863,40864],{"class":107,"line":7975},[105,40865,34207],{"class":174},[105,40867,40868],{"class":107,"line":8002},[105,40869,32860],{"class":115},[105,40871,40872],{"class":107,"line":8007},[105,40873,34216],{"class":174},[105,40875,40876,40878,40880],{"class":107,"line":8013},[105,40877,32645],{"class":115},[105,40879,161],{"class":111},[105,40881,34225],{"class":115},[105,40883,40884],{"class":107,"line":8025},[105,40885,34230],{"class":174},[105,40887,40888,40890,40892,40894,40896,40898,40900],{"class":107,"line":8037},[105,40889,32662],{"class":115},[105,40891,161],{"class":111},[105,40893,32667],{"class":115},[105,40895,32670],{"class":5208},[105,40897,161],{"class":111},[105,40899,333],{"class":164},[105,40901,122],{"class":115},[105,40903,40904],{"class":107,"line":8049},[105,40905,34251],{"class":174},[105,40907,40908],{"class":107,"line":9708},[105,40909,34256],{"class":174},[105,40911,40912],{"class":107,"line":9733},[105,40913,34261],{"class":174},[105,40915,40916,40918,40920,40922,40924],{"class":107,"line":9756},[105,40917,34266],{"class":115},[105,40919,9469],{"class":111},[105,40921,32772],{"class":115},[105,40923,2940],{"class":111},[105,40925,34275],{"class":115},[105,40927,40928],{"class":107,"line":9780},[105,40929,34280],{"class":174},[105,40931,40932,40934,40936,40938,40940],{"class":107,"line":9785},[105,40933,34285],{"class":115},[105,40935,9469],{"class":111},[105,40937,34290],{"class":115},[105,40939,307],{"class":164},[105,40941,122],{"class":115},[105,40943,40944],{"class":107,"line":9790},[105,40945,2391],{"emptyLinePlaceholder":32},[105,40947,40948],{"class":107,"line":9795},[105,40949,34303],{"class":174},[105,40951,40952,40954,40956,40958,40960],{"class":107,"line":9804},[105,40953,34308],{"class":115},[105,40955,161],{"class":111},[105,40957,34313],{"class":115},[105,40959,700],{"class":111},[105,40961,34318],{"class":115},[105,40963,40964],{"class":107,"line":9809},[105,40965,34323],{"class":174},[105,40967,40968,40970,40972,40974],{"class":107,"line":9815},[105,40969,32436],{"class":164},[105,40971,116],{"class":115},[105,40973,34332],{"class":220},[105,40975,34335],{"class":115},[105,40977,40978],{"class":107,"line":9836},[105,40979,2391],{"emptyLinePlaceholder":32},[105,40981,40982],{"class":107,"line":9842},[105,40983,34344],{"class":174},[105,40985,40986,40988,40990,40992,40994],{"class":107,"line":9856},[105,40987,1522],{"class":111},[105,40989,31205],{"class":164},[105,40991,2940],{"class":111},[105,40993,31210],{"class":220},[105,40995,3730],{"class":115},[105,40997,40998],{"class":107,"line":9862},[105,40999,34361],{"class":174},[105,41001,41002,41004,41006],{"class":107,"line":9889},[105,41003,31274],{"class":115},[105,41005,161],{"class":111},[105,41007,41008],{"class":115},"VGG16()\n",[105,41010,41011],{"class":107,"line":9898},[105,41012,34374],{"class":174},[105,41014,41015],{"class":107,"line":9904},[105,41016,34379],{"class":174},[105,41018,41019,41021,41023],{"class":107,"line":9912},[105,41020,34384],{"class":115},[105,41022,34387],{"class":220},[105,41024,30482],{"class":115},[105,41026,41027],{"class":107,"line":9917},[105,41028,34394],{"class":174},[105,41030,41031,41033,41035],{"class":107,"line":16596},[105,41032,34007],{"class":115},[105,41034,161],{"class":111},[105,41036,34403],{"class":115},[105,41038,41039],{"class":107,"line":16602},[105,41040,34408],{"class":174},[105,41042,41043],{"class":107,"line":16625},[105,41044,34413],{"class":115},[105,41046,41047],{"class":107,"line":16631},[105,41048,2391],{"emptyLinePlaceholder":32},[105,41050,41051],{"class":107,"line":16654},[105,41052,34422],{"class":174},[105,41054,41055],{"class":107,"line":16668},[105,41056,34427],{"class":174},[105,41058,41059,41061,41063,41065,41067,41069,41071],{"class":107,"line":16688},[105,41060,31222],{"class":115},[105,41062,161],{"class":111},[105,41064,31229],{"class":220},[105,41066,1695],{"class":111},[105,41068,31234],{"class":115},[105,41070,1692],{"class":111},[105,41072,34104],{"class":220},[105,41074,41075,41077,41079],{"class":107,"line":16694},[105,41076,31274],{"class":115},[105,41078,161],{"class":111},[105,41080,32274],{"class":115},[105,41082,41083],{"class":107,"line":16705},[105,41084,34456],{"class":174},[105,41086,41087],{"class":107,"line":16728},[105,41088,34461],{"class":174},[105,41090,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129,41131,41133,41135],{"class":107,"line":16750},[105,41092,34466],{"class":115},[105,41094,161],{"class":111},[105,41096,1006],{"class":115},[105,41098,34473],{"class":220},[105,41100,494],{"class":115},[105,41102,34478],{"class":220},[105,41104,494],{"class":115},[105,41106,34483],{"class":220},[105,41108,494],{"class":115},[105,41110,34488],{"class":220},[105,41112,494],{"class":115},[105,41114,34493],{"class":220},[105,41116,494],{"class":115},[105,41118,34498],{"class":220},[105,41120,494],{"class":115},[105,41122,34503],{"class":220},[105,41124,494],{"class":115},[105,41126,34508],{"class":220},[105,41128,494],{"class":115},[105,41130,34513],{"class":220},[105,41132,494],{"class":115},[105,41134,34518],{"class":220},[105,41136,33231],{"class":115},[105,41138,41139,41141],{"class":107,"line":16755},[105,41140,34163],{"class":111},[105,41142,32869],{"class":115},[105,41144,41145],{"class":107,"line":16761},[105,41146,34531],{"class":174},[105,41148,41149,41151,41153,41155],{"class":107,"line":16775},[105,41150,3394],{"class":111},[105,41152,34538],{"class":115},[105,41154,26028],{"class":111},[105,41156,34182],{"class":115},[105,41158,41159,41161,41163],{"class":107,"line":16788},[105,41160,32595],{"class":115},[105,41162,161],{"class":111},[105,41164,32600],{"class":115},[105,41166,41167,41169,41171],{"class":107,"line":16793},[105,41168,32610],{"class":115},[105,41170,161],{"class":111},[105,41172,32615],{"class":115},[105,41174,41175],{"class":107,"line":16807},[105,41176,2391],{"emptyLinePlaceholder":32},[105,41178,41179],{"class":107,"line":16812},[105,41180,34567],{"class":174},[105,41182,41183],{"class":107,"line":16818},[105,41184,32860],{"class":115},[105,41186,41187],{"class":107,"line":16823},[105,41188,34576],{"class":174},[105,41190,41191,41193,41195],{"class":107,"line":16837},[105,41192,32645],{"class":115},[105,41194,161],{"class":111},[105,41196,32650],{"class":115},[105,41198,41199],{"class":107,"line":16842},[105,41200,34589],{"class":174},[105,41202,41203,41205,41207,41209,41211,41213,41215],{"class":107,"line":16847},[105,41204,32662],{"class":115},[105,41206,161],{"class":111},[105,41208,32667],{"class":115},[105,41210,32670],{"class":5208},[105,41212,161],{"class":111},[105,41214,333],{"class":164},[105,41216,122],{"class":115},[105,41218,41219],{"class":107,"line":16861},[105,41220,34610],{"class":174},[105,41222,41223,41225,41227],{"class":107,"line":16873},[105,41224,34615],{"class":115},[105,41226,161],{"class":111},[105,41228,34620],{"class":115},[105,41230,41231,41233,41235],{"class":107,"line":16878},[105,41232,34625],{"class":115},[105,41234,161],{"class":111},[105,41236,34630],{"class":115},[105,41238,41239,41241,41243,41245,41247,41249,41251,41253],{"class":107,"line":16891},[105,41240,34635],{"class":164},[105,41242,116],{"class":115},[105,41244,34640],{"class":220},[105,41246,34643],{"class":115},[105,41248,34646],{"class":220},[105,41250,494],{"class":115},[105,41252,34651],{"class":220},[105,41254,34654],{"class":115},[76,41256,41258],{"id":41257},"_23googlenet","2.3.GoogLeNet",[21990,41260,41262],{"id":41261},"_231原理","2.3.1.原理",[59,41264,41265],{},[62,41266,41267],{},"网络结构",[14,41269,41270],{},[20,41271],{"alt":22,"src":41272},"\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,41274,41275],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41277,41278],{},[20,41279],{"alt":22,"src":41280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,41282,41283],{},[20,41284],{"alt":22,"src":41285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,41287,41288],{},[20,41289],{"alt":22,"src":41290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[59,41292,41293],{"start":28},[62,41294,41295],{},"1x1卷积的优点",[14,41297,41298],{},[20,41299],{"alt":22,"src":41300},"\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",[59,41302,41303],{"start":1171},[62,41304,41305],{},"全局平均池化层优点",[14,41307,41308],{},[20,41309],{"alt":22,"src":41310},"\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,41312,41313],{},[20,41314],{"alt":22,"src":41315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[59,41317,41318],{"start":1186},[62,41319,41320],{},"参数详细描述",[14,41322,41323],{},[20,41324],{"alt":22,"src":41325},"\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,41327,41328],{},[20,41329],{"alt":22,"src":41330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,41332,41333],{},[20,41334],{"alt":22,"src":41335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[14,41337,41338],{},[20,41339],{"alt":22,"src":41340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,41342,41343],{},[20,41344],{"alt":22,"src":41345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,41347,41348],{},[20,41349],{"alt":22,"src":41350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[14,41352,41353],{},[20,41354],{"alt":22,"src":41355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[14,41357,41358],{},[20,41359],{"alt":22,"src":41360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[14,41362,41363],{},[20,41364],{"alt":22,"src":41365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[14,41367,41368],{},[20,41369],{"alt":22,"src":41370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[14,41372,41373],{},[20,41374],{"alt":22,"src":41375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,41377,41378],{},[20,41379],{"alt":22,"src":41380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[14,41382,41383],{},[20,41384],{"alt":22,"src":41385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[14,41387,41388],{},[20,41389],{"alt":22,"src":41390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,41392,41393],{},[20,41394],{"alt":22,"src":41395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[14,41397,41398],{},[20,41399],{"alt":22,"src":41400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[14,41402,41403],{},[20,41404],{"alt":22,"src":41405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[14,41407,41408],{},[20,41409],{"alt":22,"src":41410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[14,41412,41413],{},[20,41414],{"alt":22,"src":41415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[14,41417,41418],{},[20,41419],{"alt":22,"src":41420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[14,41422,41423],{},[20,41424],{"alt":22,"src":41425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-050.png",[21990,41427,41429],{"id":41428},"_232代码实现","2.3.2.代码实现",[59,41431,41432],{},[62,41433,30696],{},[14,41435,41436],{},"根据原理一步一步搭建即可",[96,41438,41440],{"className":30363,"code":41439,"language":30365,"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",[102,41441,41442,41448,41458,41468,41472,41489,41498,41513,41523,41528,41561,41566,41603,41650,41655,41691,41738,41743,41748,41783,41815,41819,41827,41843,41867,41892,41913,41918,41933,41937,41941,41946,41963,41968,41977,41992,42003,42047,42051,42079,42083,42094,42122,42126,42163,42167,42195,42199,42210,42246,42278,42306,42310,42321,42355,42387,42419,42452,42486,42514,42518,42529,42562,42594,42608,42612,42625,42629,42634,42646,42654,42676,42681,42686,42691,42696,42701,42706,42720,42728,42737,42750,42765,42774,42778,42786,42797,42808,42819,42830,42841,42847,42851,42856,42868,42888,42897],{"__ignoreMap":22},[105,41443,41444,41446],{"class":107,"line":108},[105,41445,30377],{"class":111},[105,41447,30380],{"class":115},[105,41449,41450,41452,41454,41456],{"class":107,"line":28},[105,41451,30722],{"class":111},[105,41453,30725],{"class":115},[105,41455,30377],{"class":111},[105,41457,30730],{"class":115},[105,41459,41460,41462,41464,41466],{"class":107,"line":1171},[105,41461,30722],{"class":111},[105,41463,30742],{"class":115},[105,41465,30377],{"class":111},[105,41467,30747],{"class":115},[105,41469,41470],{"class":107,"line":1186},[105,41471,2391],{"emptyLinePlaceholder":32},[105,41473,41474,41476,41479,41481,41483,41485,41487],{"class":107,"line":1192},[105,41475,14686],{"class":111},[105,41477,41478],{"class":1954}," Inception",[105,41480,116],{"class":115},[105,41482,30763],{"class":1954},[105,41484,674],{"class":115},[105,41486,30768],{"class":1954},[105,41488,30771],{"class":115},[105,41490,41491,41493,41495],{"class":107,"line":1206},[105,41492,30786],{"class":111},[105,41494,30789],{"class":164},[105,41496,41497],{"class":115},"(self,in_channels,c1,c2,c3,c4):\n",[105,41499,41500,41502,41505,41507,41509,41511],{"class":107,"line":1212},[105,41501,30802],{"class":164},[105,41503,41504],{"class":115},"(Inception,",[105,41506,30808],{"class":164},[105,41508,30811],{"class":115},[105,41510,30814],{"class":164},[105,41512,1967],{"class":115},[105,41514,41515,41517,41519,41521],{"class":107,"line":1303},[105,41516,30830],{"class":164},[105,41518,34756],{"class":115},[105,41520,161],{"class":111},[105,41522,34761],{"class":115},[105,41524,41525],{"class":107,"line":1309},[105,41526,41527],{"class":174},"        # 路线1：定义1*1卷积\n",[105,41529,41530,41532,41535,41537,41539,41541,41543,41546,41548,41550,41553,41555,41557,41559],{"class":107,"line":1321},[105,41531,30830],{"class":164},[105,41533,41534],{"class":115},".p1_1",[105,41536,161],{"class":111},[105,41538,30838],{"class":115},[105,41540,30841],{"class":5208},[105,41542,161],{"class":111},[105,41544,41545],{"class":115},"in_channels,",[105,41547,30850],{"class":5208},[105,41549,161],{"class":111},[105,41551,41552],{"class":115},"c1,",[105,41554,30859],{"class":5208},[105,41556,161],{"class":111},[105,41558,333],{"class":164},[105,41560,122],{"class":115},[105,41562,41563],{"class":107,"line":1603},[105,41564,41565],{"class":174},"        # 路线2：定义1*1卷积和3*3\n",[105,41567,41568,41570,41573,41575,41577,41579,41581,41583,41585,41587,41590,41592,41595,41597,41599,41601],{"class":107,"line":1608},[105,41569,30830],{"class":164},[105,41571,41572],{"class":115},".p2_1",[105,41574,161],{"class":111},[105,41576,30838],{"class":115},[105,41578,30841],{"class":5208},[105,41580,161],{"class":111},[105,41582,41545],{"class":115},[105,41584,30850],{"class":5208},[105,41586,161],{"class":111},[105,41588,41589],{"class":115},"c2[",[105,41591,307],{"class":164},[105,41593,41594],{"class":115},"],",[105,41596,30859],{"class":5208},[105,41598,161],{"class":111},[105,41600,333],{"class":164},[105,41602,122],{"class":115},[105,41604,41605,41607,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642,41644,41646,41648],{"class":107,"line":1614},[105,41606,30830],{"class":164},[105,41608,41609],{"class":115},".p2_2",[105,41611,161],{"class":111},[105,41613,30838],{"class":115},[105,41615,30841],{"class":5208},[105,41617,161],{"class":111},[105,41619,41589],{"class":115},[105,41621,307],{"class":164},[105,41623,41594],{"class":115},[105,41625,30850],{"class":5208},[105,41627,161],{"class":111},[105,41629,41589],{"class":115},[105,41631,333],{"class":164},[105,41633,41594],{"class":115},[105,41635,30859],{"class":5208},[105,41637,161],{"class":111},[105,41639,187],{"class":164},[105,41641,494],{"class":115},[105,41643,30868],{"class":5208},[105,41645,161],{"class":111},[105,41647,333],{"class":164},[105,41649,122],{"class":115},[105,41651,41652],{"class":107,"line":1619},[105,41653,41654],{"class":174},"        # 路线3：定义1*1卷积和5*5\n",[105,41656,41657,41659,41662,41664,41666,41668,41670,41672,41674,41676,41679,41681,41683,41685,41687,41689],{"class":107,"line":1633},[105,41658,30830],{"class":164},[105,41660,41661],{"class":115},".p3_1",[105,41663,161],{"class":111},[105,41665,30838],{"class":115},[105,41667,30841],{"class":5208},[105,41669,161],{"class":111},[105,41671,41545],{"class":115},[105,41673,30850],{"class":5208},[105,41675,161],{"class":111},[105,41677,41678],{"class":115},"c3[",[105,41680,307],{"class":164},[105,41682,41594],{"class":115},[105,41684,30859],{"class":5208},[105,41686,161],{"class":111},[105,41688,333],{"class":164},[105,41690,122],{"class":115},[105,41692,41693,41695,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730,41732,41734,41736],{"class":107,"line":1638},[105,41694,30830],{"class":164},[105,41696,41697],{"class":115},".p3_2",[105,41699,161],{"class":111},[105,41701,30838],{"class":115},[105,41703,30841],{"class":5208},[105,41705,161],{"class":111},[105,41707,41678],{"class":115},[105,41709,307],{"class":164},[105,41711,41594],{"class":115},[105,41713,30850],{"class":5208},[105,41715,161],{"class":111},[105,41717,41678],{"class":115},[105,41719,333],{"class":164},[105,41721,41594],{"class":115},[105,41723,30859],{"class":5208},[105,41725,161],{"class":111},[105,41727,435],{"class":164},[105,41729,494],{"class":115},[105,41731,30868],{"class":5208},[105,41733,161],{"class":111},[105,41735,193],{"class":164},[105,41737,122],{"class":115},[105,41739,41740],{"class":107,"line":1644},[105,41741,41742],{"class":174},"        # 路线4：定义3*3最大池化和1*1卷积\n",[105,41744,41745],{"class":107,"line":1665},[105,41746,41747],{"class":174},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[105,41749,41750,41752,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775,41777,41779,41781],{"class":107,"line":1670},[105,41751,30830],{"class":164},[105,41753,41754],{"class":115},".p4_1",[105,41756,161],{"class":111},[105,41758,34814],{"class":115},[105,41760,30859],{"class":5208},[105,41762,161],{"class":111},[105,41764,187],{"class":164},[105,41766,494],{"class":115},[105,41768,30914],{"class":5208},[105,41770,161],{"class":111},[105,41772,333],{"class":164},[105,41774,494],{"class":115},[105,41776,30868],{"class":5208},[105,41778,161],{"class":111},[105,41780,333],{"class":164},[105,41782,122],{"class":115},[105,41784,41785,41787,41790,41792,41794,41796,41798,41800,41802,41804,41807,41809,41811,41813],{"class":107,"line":1684},[105,41786,30830],{"class":164},[105,41788,41789],{"class":115},".p4_2",[105,41791,161],{"class":111},[105,41793,30838],{"class":115},[105,41795,30841],{"class":5208},[105,41797,161],{"class":111},[105,41799,41545],{"class":115},[105,41801,30850],{"class":5208},[105,41803,161],{"class":111},[105,41805,41806],{"class":115},"c4,",[105,41808,30859],{"class":5208},[105,41810,161],{"class":111},[105,41812,333],{"class":164},[105,41814,122],{"class":115},[105,41816,41817],{"class":107,"line":1689},[105,41818,2391],{"emptyLinePlaceholder":32},[105,41820,41821,41823,41825],{"class":107,"line":1718},[105,41822,30786],{"class":111},[105,41824,31078],{"class":1954},[105,41826,31081],{"class":115},[105,41828,41829,41832,41834,41836,41838,41840],{"class":107,"line":1723},[105,41830,41831],{"class":115},"        p1",[105,41833,161],{"class":111},[105,41835,30808],{"class":164},[105,41837,35169],{"class":115},[105,41839,30808],{"class":164},[105,41841,41842],{"class":115},".p1_1(x))\n",[105,41844,41845,41847,41849,41851,41853,41855,41858,41860,41862,41864],{"class":107,"line":1740},[105,41846,7077],{"class":115},[105,41848,161],{"class":111},[105,41850,30808],{"class":164},[105,41852,35169],{"class":115},[105,41854,30808],{"class":164},[105,41856,41857],{"class":115},".p2_2(",[105,41859,30808],{"class":164},[105,41861,35169],{"class":115},[105,41863,30808],{"class":164},[105,41865,41866],{"class":115},".p2_1(x))))\n",[105,41868,41869,41872,41874,41876,41878,41880,41883,41885,41887,41889],{"class":107,"line":1745},[105,41870,41871],{"class":115},"        p3",[105,41873,161],{"class":111},[105,41875,30808],{"class":164},[105,41877,35169],{"class":115},[105,41879,30808],{"class":164},[105,41881,41882],{"class":115},".p3_2(",[105,41884,30808],{"class":164},[105,41886,35169],{"class":115},[105,41888,30808],{"class":164},[105,41890,41891],{"class":115},".p3_1(x))))\n",[105,41893,41894,41897,41899,41901,41903,41905,41908,41910],{"class":107,"line":1750},[105,41895,41896],{"class":115},"        p4",[105,41898,161],{"class":111},[105,41900,30808],{"class":164},[105,41902,35169],{"class":115},[105,41904,30808],{"class":164},[105,41906,41907],{"class":115},".p4_2(",[105,41909,30808],{"class":164},[105,41911,41912],{"class":115},".p4_1(x)))\n",[105,41914,41915],{"class":107,"line":1755},[105,41916,41917],{"class":174},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[105,41919,41920,41922,41925,41927,41929,41931],{"class":107,"line":1769},[105,41921,14744],{"class":111},[105,41923,41924],{"class":115}," torch.cat((p1,p2,p3,p4),",[105,41926,32670],{"class":5208},[105,41928,161],{"class":111},[105,41930,333],{"class":164},[105,41932,122],{"class":115},[105,41934,41935],{"class":107,"line":1774},[105,41936,2391],{"emptyLinePlaceholder":32},[105,41938,41939],{"class":107,"line":2568},[105,41940,2391],{"emptyLinePlaceholder":32},[105,41942,41943],{"class":107,"line":2582},[105,41944,41945],{"class":174},"# 搭建GoogLeNet网络\n",[105,41947,41948,41950,41953,41955,41957,41959,41961],{"class":107,"line":2590},[105,41949,14686],{"class":111},[105,41951,41952],{"class":1954}," GoogLeNet",[105,41954,116],{"class":115},[105,41956,30763],{"class":1954},[105,41958,674],{"class":115},[105,41960,30768],{"class":1954},[105,41962,30771],{"class":115},[105,41964,41965],{"class":107,"line":2595},[105,41966,41967],{"class":174},"    # 必须把Inception导入到里边\n",[105,41969,41970,41972,41974],{"class":107,"line":2601},[105,41971,30786],{"class":111},[105,41973,30789],{"class":164},[105,41975,41976],{"class":115},"(self,Inception):\n",[105,41978,41979,41981,41984,41986,41988,41990],{"class":107,"line":2607},[105,41980,30802],{"class":164},[105,41982,41983],{"class":115},"(GoogLeNet,",[105,41985,30808],{"class":164},[105,41987,30811],{"class":115},[105,41989,30814],{"class":164},[105,41991,1967],{"class":115},[105,41993,41994,41996,41999,42001],{"class":107,"line":2612},[105,41995,30830],{"class":164},[105,41997,41998],{"class":115},".b1",[105,42000,161],{"class":111},[105,42002,37994],{"class":115},[105,42004,42005,42007,42009,42011,42013,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039,42041,42043,42045],{"class":107,"line":7940},[105,42006,37999],{"class":115},[105,42008,30841],{"class":5208},[105,42010,161],{"class":111},[105,42012,333],{"class":164},[105,42014,494],{"class":115},[105,42016,30850],{"class":5208},[105,42018,161],{"class":111},[105,42020,319],{"class":164},[105,42022,494],{"class":115},[105,42024,30859],{"class":5208},[105,42026,161],{"class":111},[105,42028,485],{"class":164},[105,42030,494],{"class":115},[105,42032,30914],{"class":5208},[105,42034,161],{"class":111},[105,42036,193],{"class":164},[105,42038,494],{"class":115},[105,42040,30868],{"class":5208},[105,42042,161],{"class":111},[105,42044,187],{"class":164},[105,42046,38032],{"class":115},[105,42048,42049],{"class":107,"line":7964},[105,42050,38037],{"class":115},[105,42052,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071,42073,42075,42077],{"class":107,"line":7969},[105,42054,38082],{"class":115},[105,42056,30859],{"class":5208},[105,42058,161],{"class":111},[105,42060,187],{"class":164},[105,42062,494],{"class":115},[105,42064,30914],{"class":5208},[105,42066,161],{"class":111},[105,42068,193],{"class":164},[105,42070,494],{"class":115},[105,42072,30868],{"class":5208},[105,42074,161],{"class":111},[105,42076,333],{"class":164},[105,42078,122],{"class":115},[105,42080,42081],{"class":107,"line":7975},[105,42082,38111],{"class":115},[105,42084,42085,42087,42090,42092],{"class":107,"line":8002},[105,42086,30830],{"class":164},[105,42088,42089],{"class":115},".b2",[105,42091,161],{"class":111},[105,42093,37994],{"class":115},[105,42095,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114,42116,42118,42120],{"class":107,"line":8007},[105,42097,37999],{"class":115},[105,42099,30841],{"class":5208},[105,42101,161],{"class":111},[105,42103,319],{"class":164},[105,42105,494],{"class":115},[105,42107,30850],{"class":5208},[105,42109,161],{"class":111},[105,42111,319],{"class":164},[105,42113,494],{"class":115},[105,42115,30859],{"class":5208},[105,42117,161],{"class":111},[105,42119,333],{"class":164},[105,42121,38032],{"class":115},[105,42123,42124],{"class":107,"line":8013},[105,42125,38037],{"class":115},[105,42127,42128,42130,42132,42134,42136,42138,42140,42142,42145,42147,42149,42151,42153,42155,42157,42159,42161],{"class":107,"line":8025},[105,42129,37999],{"class":115},[105,42131,30841],{"class":5208},[105,42133,161],{"class":111},[105,42135,319],{"class":164},[105,42137,494],{"class":115},[105,42139,30850],{"class":5208},[105,42141,161],{"class":111},[105,42143,42144],{"class":164},"192",[105,42146,494],{"class":115},[105,42148,30859],{"class":5208},[105,42150,161],{"class":111},[105,42152,187],{"class":164},[105,42154,494],{"class":115},[105,42156,30868],{"class":5208},[105,42158,161],{"class":111},[105,42160,333],{"class":164},[105,42162,38032],{"class":115},[105,42164,42165],{"class":107,"line":8037},[105,42166,38037],{"class":115},[105,42168,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187,42189,42191,42193],{"class":107,"line":8049},[105,42170,38082],{"class":115},[105,42172,30859],{"class":5208},[105,42174,161],{"class":111},[105,42176,187],{"class":164},[105,42178,494],{"class":115},[105,42180,30914],{"class":5208},[105,42182,161],{"class":111},[105,42184,193],{"class":164},[105,42186,494],{"class":115},[105,42188,30868],{"class":5208},[105,42190,161],{"class":111},[105,42192,333],{"class":164},[105,42194,122],{"class":115},[105,42196,42197],{"class":107,"line":9708},[105,42198,38111],{"class":115},[105,42200,42201,42203,42206,42208],{"class":107,"line":9733},[105,42202,30830],{"class":164},[105,42204,42205],{"class":115},".b3",[105,42207,161],{"class":111},[105,42209,37994],{"class":115},[105,42211,42212,42215,42217,42219,42221,42224,42226,42228,42230,42233,42235,42237,42239,42242,42244],{"class":107,"line":9756},[105,42213,42214],{"class":115},"            Inception(",[105,42216,42144],{"class":164},[105,42218,494],{"class":115},[105,42220,319],{"class":164},[105,42222,42223],{"class":115},",(",[105,42225,325],{"class":164},[105,42227,494],{"class":115},[105,42229,32055],{"class":164},[105,42231,42232],{"class":115},"),(",[105,42234,717],{"class":164},[105,42236,494],{"class":115},[105,42238,313],{"class":164},[105,42240,42241],{"class":115},"),",[105,42243,313],{"class":164},[105,42245,38032],{"class":115},[105,42247,42248,42250,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276],{"class":107,"line":9780},[105,42249,42214],{"class":115},[105,42251,34855],{"class":164},[105,42253,494],{"class":115},[105,42255,32055],{"class":164},[105,42257,42223],{"class":115},[105,42259,32055],{"class":164},[105,42261,494],{"class":115},[105,42263,42144],{"class":164},[105,42265,42232],{"class":115},[105,42267,313],{"class":164},[105,42269,494],{"class":115},[105,42271,325],{"class":164},[105,42273,42241],{"class":115},[105,42275,319],{"class":164},[105,42277,38032],{"class":115},[105,42279,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302,42304],{"class":107,"line":9785},[105,42281,38082],{"class":115},[105,42283,30859],{"class":5208},[105,42285,161],{"class":111},[105,42287,187],{"class":164},[105,42289,494],{"class":115},[105,42291,30914],{"class":5208},[105,42293,161],{"class":111},[105,42295,193],{"class":164},[105,42297,494],{"class":115},[105,42299,30868],{"class":5208},[105,42301,161],{"class":111},[105,42303,333],{"class":164},[105,42305,122],{"class":115},[105,42307,42308],{"class":107,"line":9790},[105,42309,38111],{"class":115},[105,42311,42312,42314,42317,42319],{"class":107,"line":9795},[105,42313,30830],{"class":164},[105,42315,42316],{"class":115},".b4",[105,42318,161],{"class":111},[105,42320,37994],{"class":115},[105,42322,42323,42325,42328,42330,42332,42334,42336,42338,42341,42343,42345,42347,42349,42351,42353],{"class":107,"line":9804},[105,42324,42214],{"class":115},[105,42326,42327],{"class":164},"480",[105,42329,494],{"class":115},[105,42331,42144],{"class":164},[105,42333,42223],{"class":115},[105,42335,325],{"class":164},[105,42337,494],{"class":115},[105,42339,42340],{"class":164},"208",[105,42342,42232],{"class":115},[105,42344,717],{"class":164},[105,42346,494],{"class":115},[105,42348,723],{"class":164},[105,42350,42241],{"class":115},[105,42352,319],{"class":164},[105,42354,38032],{"class":115},[105,42356,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379,42381,42383,42385],{"class":107,"line":9809},[105,42358,42214],{"class":115},[105,42360,38442],{"class":164},[105,42362,494],{"class":115},[105,42364,21040],{"class":164},[105,42366,42223],{"class":115},[105,42368,734],{"class":164},[105,42370,494],{"class":115},[105,42372,31486],{"class":164},[105,42374,42232],{"class":115},[105,42376,916],{"class":164},[105,42378,494],{"class":115},[105,42380,319],{"class":164},[105,42382,42241],{"class":115},[105,42384,319],{"class":164},[105,42386,38032],{"class":115},[105,42388,42389,42391,42393,42395,42397,42399,42401,42403,42405,42407,42409,42411,42413,42415,42417],{"class":107,"line":9815},[105,42390,42214],{"class":115},[105,42392,38442],{"class":164},[105,42394,494],{"class":115},[105,42396,32055],{"class":164},[105,42398,42223],{"class":115},[105,42400,32055],{"class":164},[105,42402,494],{"class":115},[105,42404,34855],{"class":164},[105,42406,42232],{"class":115},[105,42408,916],{"class":164},[105,42410,494],{"class":115},[105,42412,319],{"class":164},[105,42414,42241],{"class":115},[105,42416,319],{"class":164},[105,42418,38032],{"class":115},[105,42420,42421,42423,42425,42427,42429,42431,42433,42435,42438,42440,42442,42444,42446,42448,42450],{"class":107,"line":9836},[105,42422,42214],{"class":115},[105,42424,38442],{"class":164},[105,42426,494],{"class":115},[105,42428,734],{"class":164},[105,42430,42223],{"class":115},[105,42432,32055],{"class":164},[105,42434,494],{"class":115},[105,42436,42437],{"class":164},"288",[105,42439,42232],{"class":115},[105,42441,313],{"class":164},[105,42443,494],{"class":115},[105,42445,319],{"class":164},[105,42447,42241],{"class":115},[105,42449,319],{"class":164},[105,42451,38032],{"class":115},[105,42453,42454,42456,42459,42461,42463,42465,42467,42469,42472,42474,42476,42478,42480,42482,42484],{"class":107,"line":9842},[105,42455,42214],{"class":115},[105,42457,42458],{"class":164},"528",[105,42460,494],{"class":115},[105,42462,34855],{"class":164},[105,42464,42223],{"class":115},[105,42466,21040],{"class":164},[105,42468,494],{"class":115},[105,42470,42471],{"class":164},"320",[105,42473,42232],{"class":115},[105,42475,313],{"class":164},[105,42477,494],{"class":115},[105,42479,32055],{"class":164},[105,42481,42241],{"class":115},[105,42483,32055],{"class":164},[105,42485,38032],{"class":115},[105,42487,42488,42490,42492,42494,42496,42498,42500,42502,42504,42506,42508,42510,42512],{"class":107,"line":9856},[105,42489,38082],{"class":115},[105,42491,30859],{"class":5208},[105,42493,161],{"class":111},[105,42495,187],{"class":164},[105,42497,494],{"class":115},[105,42499,30914],{"class":5208},[105,42501,161],{"class":111},[105,42503,193],{"class":164},[105,42505,494],{"class":115},[105,42507,30868],{"class":5208},[105,42509,161],{"class":111},[105,42511,333],{"class":164},[105,42513,122],{"class":115},[105,42515,42516],{"class":107,"line":9862},[105,42517,38111],{"class":115},[105,42519,42520,42522,42525,42527],{"class":107,"line":9889},[105,42521,30830],{"class":164},[105,42523,42524],{"class":115},".b5",[105,42526,161],{"class":111},[105,42528,37994],{"class":115},[105,42530,42531,42533,42536,42538,42540,42542,42544,42546,42548,42550,42552,42554,42556,42558,42560],{"class":107,"line":9898},[105,42532,42214],{"class":115},[105,42534,42535],{"class":164},"832",[105,42537,494],{"class":115},[105,42539,34855],{"class":164},[105,42541,42223],{"class":115},[105,42543,21040],{"class":164},[105,42545,494],{"class":115},[105,42547,42471],{"class":164},[105,42549,42232],{"class":115},[105,42551,313],{"class":164},[105,42553,494],{"class":115},[105,42555,32055],{"class":164},[105,42557,42241],{"class":115},[105,42559,32055],{"class":164},[105,42561,38032],{"class":115},[105,42563,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590,42592],{"class":107,"line":9904},[105,42565,42214],{"class":115},[105,42567,42535],{"class":164},[105,42569,494],{"class":115},[105,42571,34925],{"class":164},[105,42573,42223],{"class":115},[105,42575,42144],{"class":164},[105,42577,494],{"class":115},[105,42579,34925],{"class":164},[105,42581,42232],{"class":115},[105,42583,723],{"class":164},[105,42585,494],{"class":115},[105,42587,32055],{"class":164},[105,42589,42241],{"class":115},[105,42591,32055],{"class":164},[105,42593,38032],{"class":115},[105,42595,42596,42599,42601,42603,42605],{"class":107,"line":9912},[105,42597,42598],{"class":115},"            nn.AdaptiveAvgPool2d((",[105,42600,333],{"class":164},[105,42602,494],{"class":115},[105,42604,333],{"class":164},[105,42606,42607],{"class":115},")),\n",[105,42609,42610],{"class":107,"line":9917},[105,42611,38775],{"class":115},[105,42613,42614,42616,42619,42621,42623],{"class":107,"line":16596},[105,42615,38780],{"class":115},[105,42617,42618],{"class":164},"1024",[105,42620,494],{"class":115},[105,42622,562],{"class":164},[105,42624,122],{"class":115},[105,42626,42627],{"class":107,"line":16602},[105,42628,38111],{"class":115},[105,42630,42631],{"class":107,"line":16625},[105,42632,42633],{"class":174},"        # 对模型参数初始化\n",[105,42635,42636,42638,42640,42642,42644],{"class":107,"line":16631},[105,42637,3394],{"class":111},[105,42639,38853],{"class":115},[105,42641,26028],{"class":111},[105,42643,38858],{"class":164},[105,42645,38861],{"class":115},[105,42647,42648,42650,42652],{"class":107,"line":16654},[105,42649,4633],{"class":111},[105,42651,38873],{"class":164},[105,42653,38876],{"class":115},[105,42655,42656,42658,42661,42663,42666,42668,42670,42672,42674],{"class":107,"line":16668},[105,42657,38886],{"class":115},[105,42659,42660],{"class":5208},"mode",[105,42662,161],{"class":111},[105,42664,42665],{"class":220},"'fan_out'",[105,42667,494],{"class":115},[105,42669,38889],{"class":5208},[105,42671,161],{"class":111},[105,42673,38894],{"class":220},[105,42675,122],{"class":115},[105,42677,42678],{"class":107,"line":16688},[105,42679,42680],{"class":174},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[105,42682,42683],{"class":107,"line":16694},[105,42684,42685],{"class":174},"                # ② mode = 'fan_out'决定使用的fan值：\n",[105,42687,42688],{"class":107,"line":16705},[105,42689,42690],{"class":174},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[105,42692,42693],{"class":107,"line":16728},[105,42694,42695],{"class":174},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[105,42697,42698],{"class":107,"line":16750},[105,42699,42700],{"class":174},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[105,42702,42703],{"class":107,"line":16755},[105,42704,42705],{"class":174},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[105,42707,42708,42710,42712,42714,42716,42718],{"class":107,"line":16761},[105,42709,38906],{"class":111},[105,42711,38909],{"class":115},[105,42713,38912],{"class":111},[105,42715,38915],{"class":111},[105,42717,38918],{"class":164},[105,42719,3730],{"class":115},[105,42721,42722,42724,42726],{"class":107,"line":16775},[105,42723,38930],{"class":115},[105,42725,307],{"class":164},[105,42727,122],{"class":115},[105,42729,42730,42733,42735],{"class":107,"line":16788},[105,42731,42732],{"class":111},"                elif",[105,42734,38873],{"class":164},[105,42736,38949],{"class":115},[105,42738,42739,42742,42744,42746,42748],{"class":107,"line":16793},[105,42740,42741],{"class":115},"                    nn.init.normal_(m.weight,",[105,42743,307],{"class":164},[105,42745,494],{"class":115},[105,42747,38971],{"class":164},[105,42749,122],{"class":115},[105,42751,42752,42755,42757,42759,42761,42763],{"class":107,"line":16807},[105,42753,42754],{"class":111},"                    if",[105,42756,38909],{"class":115},[105,42758,38912],{"class":111},[105,42760,38915],{"class":111},[105,42762,38918],{"class":164},[105,42764,3730],{"class":115},[105,42766,42767,42770,42772],{"class":107,"line":16812},[105,42768,42769],{"class":115},"                        nn.init.constant_(m.bias,",[105,42771,307],{"class":164},[105,42773,122],{"class":115},[105,42775,42776],{"class":107,"line":16818},[105,42777,35150],{"class":174},[105,42779,42780,42782,42784],{"class":107,"line":16823},[105,42781,30786],{"class":111},[105,42783,31078],{"class":1954},[105,42785,31081],{"class":115},[105,42787,42788,42790,42792,42794],{"class":107,"line":16837},[105,42789,31086],{"class":115},[105,42791,161],{"class":111},[105,42793,30808],{"class":164},[105,42795,42796],{"class":115},".b1(x)\n",[105,42798,42799,42801,42803,42805],{"class":107,"line":16842},[105,42800,31086],{"class":115},[105,42802,161],{"class":111},[105,42804,30808],{"class":164},[105,42806,42807],{"class":115},".b2(x)\n",[105,42809,42810,42812,42814,42816],{"class":107,"line":16847},[105,42811,31086],{"class":115},[105,42813,161],{"class":111},[105,42815,30808],{"class":164},[105,42817,42818],{"class":115},".b3(x)\n",[105,42820,42821,42823,42825,42827],{"class":107,"line":16861},[105,42822,31086],{"class":115},[105,42824,161],{"class":111},[105,42826,30808],{"class":164},[105,42828,42829],{"class":115},".b4(x)\n",[105,42831,42832,42834,42836,42838],{"class":107,"line":16873},[105,42833,31086],{"class":115},[105,42835,161],{"class":111},[105,42837,30808],{"class":164},[105,42839,42840],{"class":115},".b5(x)\n",[105,42842,42843,42845],{"class":107,"line":16878},[105,42844,14744],{"class":111},[105,42846,31194],{"class":115},[105,42848,42849],{"class":107,"line":16891},[105,42850,2391],{"emptyLinePlaceholder":32},[105,42852,42853],{"class":107,"line":16896},[105,42854,42855],{"class":174},"# 模型展示\n",[105,42857,42858,42860,42862,42864,42866],{"class":107,"line":16901},[105,42859,1522],{"class":111},[105,42861,31205],{"class":164},[105,42863,2940],{"class":111},[105,42865,31210],{"class":220},[105,42867,3730],{"class":115},[105,42869,42870,42872,42874,42876,42878,42880,42882,42884,42886],{"class":107,"line":16906},[105,42871,31222],{"class":115},[105,42873,161],{"class":111},[105,42875,30436],{"class":115},[105,42877,31229],{"class":220},[105,42879,1695],{"class":111},[105,42881,31234],{"class":115},[105,42883,1692],{"class":111},[105,42885,30461],{"class":220},[105,42887,122],{"class":115},[105,42889,42890,42892,42894],{"class":107,"line":16919},[105,42891,31274],{"class":115},[105,42893,161],{"class":111},[105,42895,42896],{"class":115},"GoogLeNet(Inception).to(device)\n",[105,42898,42899,42901,42903,42905,42907,42909,42911,42913],{"class":107,"line":16924},[105,42900,31284],{"class":164},[105,42902,31287],{"class":115},[105,42904,333],{"class":164},[105,42906,494],{"class":115},[105,42908,31486],{"class":164},[105,42910,494],{"class":115},[105,42912,31486],{"class":164},[105,42914,31300],{"class":115},[59,42916,42917],{"start":28},[62,42918,39168],{},[96,42920,42922],{"className":30363,"code":42921,"language":30365,"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",[102,42923,42924,42930,42936,42946,42952,42962,42972,42982,42992,43002,43006,43017,43027,43031,43035,43039,43047,43059,43069,43085,43095,43127,43141,43151,43161,43165,43175,43189,43199,43209,43219,43225,43229,43233,43237,43241,43245,43253,43273,43277,43281,43285,43289,43293,43309,43313,43317,43325,43329,43333,43341,43345,43349,43353,43361,43365,43369,43373,43377,43385,43389,43397,43401,43409,43413,43421,43425,43433,43437,43441,43449,43453,43457,43461,43473,43497,43511,43515,43519,43523,43531,43535,43543,43547,43555,43559,43567,43571,43579,43583,43591,43595,43607,43611,43619,43623,43631,43635,43639,43643,43647,43655,43659,43675,43679,43687,43691,43695,43699,43703,43707,43711,43715,43731,43735,43747,43751,43763,43767,43779,43783,43791,43795,43803,43807,43811,43815,43821,43825,43833,43837,43853,43857,43865,43869,43885,43897,43901,43913,43917,43921,43929,43933,43937,43945,43949,43957,43961,43969,43973,43977,44019,44061,44065,44069,44085,44089,44105,44109,44113,44121,44125,44129,44141,44179,44183,44187,44195,44199,44213,44223,44229,44235,44241,44247,44251,44255,44261,44265,44269,44277,44281,44299,44303,44307,44311,44327,44331,44335,44339,44343,44347,44367,44387,44391,44395,44399,44407,44415,44419,44435,44455,44475,44479,44483,44491,44499,44503,44507,44511,44523,44527,44537,44545,44562],{"__ignoreMap":22},[105,42925,42926,42928],{"class":107,"line":108},[105,42927,30377],{"class":111},[105,42929,31807],{"class":115},[105,42931,42932,42934],{"class":107,"line":28},[105,42933,30377],{"class":111},[105,42935,31814],{"class":115},[105,42937,42938,42940,42942,42944],{"class":107,"line":1171},[105,42939,30377],{"class":111},[105,42941,31825],{"class":115},[105,42943,31368],{"class":111},[105,42945,31830],{"class":115},[105,42947,42948,42950],{"class":107,"line":1186},[105,42949,30377],{"class":111},[105,42951,30380],{"class":115},[105,42953,42954,42956,42958,42960],{"class":107,"line":1192},[105,42955,30722],{"class":111},[105,42957,31400],{"class":115},[105,42959,30377],{"class":111},[105,42961,31847],{"class":115},[105,42963,42964,42966,42968,42970],{"class":107,"line":1206},[105,42965,30722],{"class":111},[105,42967,31353],{"class":115},[105,42969,30377],{"class":111},[105,42971,31358],{"class":115},[105,42973,42974,42976,42978,42980],{"class":107,"line":1212},[105,42975,30722],{"class":111},[105,42977,31383],{"class":115},[105,42979,30377],{"class":111},[105,42981,31388],{"class":115},[105,42983,42984,42986,42988,42990],{"class":107,"line":1303},[105,42985,30377],{"class":111},[105,42987,31400],{"class":115},[105,42989,31368],{"class":111},[105,42991,31405],{"class":115},[105,42993,42994,42996,42998,43000],{"class":107,"line":1309},[105,42995,30377],{"class":111},[105,42997,31417],{"class":115},[105,42999,31368],{"class":111},[105,43001,31422],{"class":115},[105,43003,43004],{"class":107,"line":1321},[105,43005,31892],{"class":174},[105,43007,43008,43010,43012,43014],{"class":107,"line":1603},[105,43009,30722],{"class":111},[105,43011,31899],{"class":115},[105,43013,30377],{"class":111},[105,43015,43016],{"class":115}," GoogLeNet, Inception\n",[105,43018,43019,43021,43023,43025],{"class":107,"line":1608},[105,43020,30722],{"class":111},[105,43022,30725],{"class":115},[105,43024,30377],{"class":111},[105,43026,30730],{"class":115},[105,43028,43029],{"class":107,"line":1614},[105,43030,2391],{"emptyLinePlaceholder":32},[105,43032,43033],{"class":107,"line":1619},[105,43034,2391],{"emptyLinePlaceholder":32},[105,43036,43037],{"class":107,"line":1633},[105,43038,31927],{"class":174},[105,43040,43041,43043,43045],{"class":107,"line":1638},[105,43042,31932],{"class":111},[105,43044,31935],{"class":1954},[105,43046,31938],{"class":115},[105,43048,43049,43051,43053,43055,43057],{"class":107,"line":1644},[105,43050,31943],{"class":115},[105,43052,161],{"class":111},[105,43054,31440],{"class":115},[105,43056,31448],{"class":220},[105,43058,31451],{"class":115},[105,43060,43061,43063,43065,43067],{"class":107,"line":1665},[105,43062,31956],{"class":5208},[105,43064,161],{"class":111},[105,43066,31461],{"class":164},[105,43068,31451],{"class":115},[105,43070,43071,43073,43075,43077,43079,43081,43083],{"class":107,"line":1670},[105,43072,31967],{"class":5208},[105,43074,161],{"class":111},[105,43076,31478],{"class":115},[105,43078,31481],{"class":5208},[105,43080,161],{"class":111},[105,43082,35434],{"class":164},[105,43084,31489],{"class":115},[105,43086,43087,43089,43091,43093],{"class":107,"line":1684},[105,43088,31984],{"class":5208},[105,43090,161],{"class":111},[105,43092,31461],{"class":164},[105,43094,122],{"class":115},[105,43096,43097,43099,43101,43103,43105,43107,43109,43111,43113,43115,43117,43119,43121,43123,43125],{"class":107,"line":1689},[105,43098,31995],{"class":115},[105,43100,161],{"class":111},[105,43102,32000],{"class":115},[105,43104,32003],{"class":164},[105,43106,116],{"class":115},[105,43108,32008],{"class":164},[105,43110,571],{"class":111},[105,43112,7350],{"class":164},[105,43114,32015],{"class":115},[105,43116,32003],{"class":164},[105,43118,116],{"class":115},[105,43120,32022],{"class":164},[105,43122,571],{"class":111},[105,43124,7350],{"class":164},[105,43126,32029],{"class":115},[105,43128,43129,43131,43133,43135,43137,43139],{"class":107,"line":1718},[105,43130,32034],{"class":115},[105,43132,161],{"class":111},[105,43134,32039],{"class":115},[105,43136,31522],{"class":5208},[105,43138,161],{"class":111},[105,43140,31527],{"class":115},[105,43142,43143,43145,43147,43149],{"class":107,"line":1723},[105,43144,32050],{"class":5208},[105,43146,161],{"class":111},[105,43148,313],{"class":164},[105,43150,31451],{"class":115},[105,43152,43153,43155,43157,43159],{"class":107,"line":1740},[105,43154,32062],{"class":5208},[105,43156,161],{"class":111},[105,43158,31461],{"class":164},[105,43160,31451],{"class":115},[105,43162,43163],{"class":107,"line":1745},[105,43164,32073],{"class":174},[105,43166,43167,43169,43171,43173],{"class":107,"line":1750},[105,43168,32078],{"class":5208},[105,43170,161],{"class":111},[105,43172,511],{"class":164},[105,43174,122],{"class":115},[105,43176,43177,43179,43181,43183,43185,43187],{"class":107,"line":1755},[105,43178,32089],{"class":115},[105,43180,161],{"class":111},[105,43182,31519],{"class":115},[105,43184,31522],{"class":5208},[105,43186,161],{"class":111},[105,43188,32100],{"class":115},[105,43190,43191,43193,43195,43197],{"class":107,"line":1769},[105,43192,32105],{"class":5208},[105,43194,161],{"class":111},[105,43196,313],{"class":164},[105,43198,31451],{"class":115},[105,43200,43201,43203,43205,43207],{"class":107,"line":1774},[105,43202,32116],{"class":5208},[105,43204,161],{"class":111},[105,43206,31461],{"class":164},[105,43208,31451],{"class":115},[105,43210,43211,43213,43215,43217],{"class":107,"line":2568},[105,43212,32127],{"class":5208},[105,43214,161],{"class":111},[105,43216,511],{"class":164},[105,43218,122],{"class":115},[105,43220,43221,43223],{"class":107,"line":2582},[105,43222,4081],{"class":111},[105,43224,32140],{"class":115},[105,43226,43227],{"class":107,"line":2590},[105,43228,2391],{"emptyLinePlaceholder":32},[105,43230,43231],{"class":107,"line":2595},[105,43232,32149],{"class":174},[105,43234,43235],{"class":107,"line":2601},[105,43236,32154],{"class":174},[105,43238,43239],{"class":107,"line":2607},[105,43240,2391],{"emptyLinePlaceholder":32},[105,43242,43243],{"class":107,"line":2612},[105,43244,32163],{"class":174},[105,43246,43247,43249,43251],{"class":107,"line":7940},[105,43248,31932],{"class":111},[105,43250,32170],{"class":1954},[105,43252,32173],{"class":115},[105,43254,43255,43257,43259,43261,43263,43265,43267,43269,43271],{"class":107,"line":7964},[105,43256,31222],{"class":115},[105,43258,161],{"class":111},[105,43260,30436],{"class":115},[105,43262,31229],{"class":220},[105,43264,1695],{"class":111},[105,43266,31234],{"class":115},[105,43268,1692],{"class":111},[105,43270,32192],{"class":220},[105,43272,122],{"class":115},[105,43274,43275],{"class":107,"line":7969},[105,43276,2391],{"emptyLinePlaceholder":32},[105,43278,43279],{"class":107,"line":7975},[105,43280,2391],{"emptyLinePlaceholder":32},[105,43282,43283],{"class":107,"line":8002},[105,43284,32207],{"class":174},[105,43286,43287],{"class":107,"line":8007},[105,43288,32212],{"class":174},[105,43290,43291],{"class":107,"line":8013},[105,43292,32217],{"class":174},[105,43294,43295,43297,43299,43301,43303,43305,43307],{"class":107,"line":8025},[105,43296,32222],{"class":115},[105,43298,161],{"class":111},[105,43300,32227],{"class":115},[105,43302,32230],{"class":5208},[105,43304,161],{"class":111},[105,43306,32235],{"class":164},[105,43308,122],{"class":115},[105,43310,43311],{"class":107,"line":8037},[105,43312,2391],{"emptyLinePlaceholder":32},[105,43314,43315],{"class":107,"line":8049},[105,43316,32246],{"class":174},[105,43318,43319,43321,43323],{"class":107,"line":9708},[105,43320,32251],{"class":115},[105,43322,161],{"class":111},[105,43324,32256],{"class":115},[105,43326,43327],{"class":107,"line":9733},[105,43328,2391],{"emptyLinePlaceholder":32},[105,43330,43331],{"class":107,"line":9756},[105,43332,32265],{"class":174},[105,43334,43335,43337,43339],{"class":107,"line":9780},[105,43336,31274],{"class":115},[105,43338,161],{"class":111},[105,43340,32274],{"class":115},[105,43342,43343],{"class":107,"line":9785},[105,43344,32279],{"class":174},[105,43346,43347],{"class":107,"line":9790},[105,43348,32284],{"class":174},[105,43350,43351],{"class":107,"line":9795},[105,43352,32289],{"class":174},[105,43354,43355,43357,43359],{"class":107,"line":9804},[105,43356,32294],{"class":115},[105,43358,161],{"class":111},[105,43360,32299],{"class":115},[105,43362,43363],{"class":107,"line":9809},[105,43364,2391],{"emptyLinePlaceholder":32},[105,43366,43367],{"class":107,"line":9815},[105,43368,2391],{"emptyLinePlaceholder":32},[105,43370,43371],{"class":107,"line":9836},[105,43372,32312],{"class":174},[105,43374,43375],{"class":107,"line":9842},[105,43376,32317],{"class":174},[105,43378,43379,43381,43383],{"class":107,"line":9856},[105,43380,32322],{"class":115},[105,43382,161],{"class":111},[105,43384,32327],{"class":164},[105,43386,43387],{"class":107,"line":9862},[105,43388,32332],{"class":174},[105,43390,43391,43393,43395],{"class":107,"line":9889},[105,43392,32337],{"class":115},[105,43394,161],{"class":111},[105,43396,32342],{"class":115},[105,43398,43399],{"class":107,"line":9898},[105,43400,32347],{"class":174},[105,43402,43403,43405,43407],{"class":107,"line":9904},[105,43404,32352],{"class":115},[105,43406,161],{"class":111},[105,43408,32342],{"class":115},[105,43410,43411],{"class":107,"line":9912},[105,43412,32361],{"class":174},[105,43414,43415,43417,43419],{"class":107,"line":9917},[105,43416,32366],{"class":115},[105,43418,161],{"class":111},[105,43420,32342],{"class":115},[105,43422,43423],{"class":107,"line":16596},[105,43424,32375],{"class":174},[105,43426,43427,43429,43431],{"class":107,"line":16602},[105,43428,32380],{"class":115},[105,43430,161],{"class":111},[105,43432,32342],{"class":115},[105,43434,43435],{"class":107,"line":16625},[105,43436,2391],{"emptyLinePlaceholder":32},[105,43438,43439],{"class":107,"line":16631},[105,43440,32393],{"class":174},[105,43442,43443,43445,43447],{"class":107,"line":16654},[105,43444,32398],{"class":115},[105,43446,161],{"class":111},[105,43448,32403],{"class":115},[105,43450,43451],{"class":107,"line":16668},[105,43452,2391],{"emptyLinePlaceholder":32},[105,43454,43455],{"class":107,"line":16688},[105,43456,2391],{"emptyLinePlaceholder":32},[105,43458,43459],{"class":107,"line":16694},[105,43460,32416],{"class":174},[105,43462,43463,43465,43467,43469,43471],{"class":107,"line":16705},[105,43464,3192],{"class":111},[105,43466,32423],{"class":115},[105,43468,26028],{"class":111},[105,43470,32428],{"class":164},[105,43472,32431],{"class":115},[105,43474,43475,43477,43479,43481,43483,43485,43487,43489,43491,43493,43495],{"class":107,"line":16728},[105,43476,32436],{"class":164},[105,43478,116],{"class":115},[105,43480,32441],{"class":220},[105,43482,32444],{"class":164},[105,43484,700],{"class":220},[105,43486,32444],{"class":164},[105,43488,367],{"class":220},[105,43490,32453],{"class":115},[105,43492,648],{"class":111},[105,43494,333],{"class":164},[105,43496,30482],{"class":115},[105,43498,43499,43501,43503,43505,43507,43509],{"class":107,"line":16750},[105,43500,32436],{"class":164},[105,43502,116],{"class":115},[105,43504,32468],{"class":220},[105,43506,571],{"class":111},[105,43508,562],{"class":164},[105,43510,122],{"class":115},[105,43512,43513],{"class":107,"line":16755},[105,43514,2391],{"emptyLinePlaceholder":32},[105,43516,43517],{"class":107,"line":16761},[105,43518,32483],{"class":174},[105,43520,43521],{"class":107,"line":16775},[105,43522,32488],{"class":174},[105,43524,43525,43527,43529],{"class":107,"line":16788},[105,43526,32493],{"class":115},[105,43528,161],{"class":111},[105,43530,32327],{"class":164},[105,43532,43533],{"class":107,"line":16793},[105,43534,32502],{"class":174},[105,43536,43537,43539,43541],{"class":107,"line":16807},[105,43538,32507],{"class":115},[105,43540,161],{"class":111},[105,43542,3076],{"class":164},[105,43544,43545],{"class":107,"line":16812},[105,43546,32516],{"class":174},[105,43548,43549,43551,43553],{"class":107,"line":16818},[105,43550,32521],{"class":115},[105,43552,161],{"class":111},[105,43554,32327],{"class":164},[105,43556,43557],{"class":107,"line":16823},[105,43558,32530],{"class":174},[105,43560,43561,43563,43565],{"class":107,"line":16837},[105,43562,32535],{"class":115},[105,43564,161],{"class":111},[105,43566,3076],{"class":164},[105,43568,43569],{"class":107,"line":16842},[105,43570,32544],{"class":174},[105,43572,43573,43575,43577],{"class":107,"line":16847},[105,43574,32549],{"class":115},[105,43576,161],{"class":111},[105,43578,3076],{"class":164},[105,43580,43581],{"class":107,"line":16861},[105,43582,32558],{"class":174},[105,43584,43585,43587,43589],{"class":107,"line":16873},[105,43586,32563],{"class":115},[105,43588,161],{"class":111},[105,43590,3076],{"class":164},[105,43592,43593],{"class":107,"line":16878},[105,43594,32572],{"class":174},[105,43596,43597,43599,43601,43603,43605],{"class":107,"line":16891},[105,43598,3394],{"class":111},[105,43600,31586],{"class":115},[105,43602,26028],{"class":111},[105,43604,31591],{"class":164},[105,43606,32585],{"class":115},[105,43608,43609],{"class":107,"line":16896},[105,43610,32590],{"class":174},[105,43612,43613,43615,43617],{"class":107,"line":16901},[105,43614,32595],{"class":115},[105,43616,161],{"class":111},[105,43618,32600],{"class":115},[105,43620,43621],{"class":107,"line":16906},[105,43622,32605],{"class":174},[105,43624,43625,43627,43629],{"class":107,"line":16919},[105,43626,32610],{"class":115},[105,43628,161],{"class":111},[105,43630,32615],{"class":115},[105,43632,43633],{"class":107,"line":16924},[105,43634,32621],{"class":174},[105,43636,43637],{"class":107,"line":32618},[105,43638,32627],{"class":115},[105,43640,43641],{"class":107,"line":32624},[105,43642,32633],{"class":174},[105,43644,43645],{"class":107,"line":32630},[105,43646,32639],{"class":174},[105,43648,43649,43651,43653],{"class":107,"line":32636},[105,43650,32645],{"class":115},[105,43652,161],{"class":111},[105,43654,32650],{"class":115},[105,43656,43657],{"class":107,"line":32642},[105,43658,32656],{"class":174},[105,43660,43661,43663,43665,43667,43669,43671,43673],{"class":107,"line":32653},[105,43662,32662],{"class":115},[105,43664,161],{"class":111},[105,43666,32667],{"class":115},[105,43668,32670],{"class":5208},[105,43670,161],{"class":111},[105,43672,333],{"class":164},[105,43674,122],{"class":115},[105,43676,43677],{"class":107,"line":32659},[105,43678,32682],{"class":174},[105,43680,43681,43683,43685],{"class":107,"line":32679},[105,43682,32688],{"class":115},[105,43684,161],{"class":111},[105,43686,32693],{"class":115},[105,43688,43689],{"class":107,"line":32685},[105,43690,32699],{"class":174},[105,43692,43693],{"class":107,"line":32696},[105,43694,32705],{"class":115},[105,43696,43697],{"class":107,"line":32702},[105,43698,32711],{"class":174},[105,43700,43701],{"class":107,"line":32708},[105,43702,32717],{"class":115},[105,43704,43705],{"class":107,"line":32714},[105,43706,32723],{"class":174},[105,43708,43709],{"class":107,"line":32720},[105,43710,32729],{"class":115},[105,43712,43713],{"class":107,"line":32726},[105,43714,32735],{"class":174},[105,43716,43717,43719,43721,43723,43725,43727,43729],{"class":107,"line":32732},[105,43718,32741],{"class":115},[105,43720,9469],{"class":111},[105,43722,32746],{"class":115},[105,43724,571],{"class":111},[105,43726,32751],{"class":115},[105,43728,307],{"class":164},[105,43730,122],{"class":115},[105,43732,43733],{"class":107,"line":32738},[105,43734,32761],{"class":174},[105,43736,43737,43739,43741,43743,43745],{"class":107,"line":32758},[105,43738,32767],{"class":115},[105,43740,9469],{"class":111},[105,43742,32772],{"class":115},[105,43744,2940],{"class":111},[105,43746,32777],{"class":115},[105,43748,43749],{"class":107,"line":32764},[105,43750,32783],{"class":174},[105,43752,43753,43755,43757,43759,43761],{"class":107,"line":32780},[105,43754,32789],{"class":115},[105,43756,9469],{"class":111},[105,43758,32751],{"class":115},[105,43760,307],{"class":164},[105,43762,122],{"class":115},[105,43764,43765],{"class":107,"line":32786},[105,43766,32803],{"class":174},[105,43768,43769,43771,43773,43775,43777],{"class":107,"line":32800},[105,43770,3394],{"class":111},[105,43772,32811],{"class":115},[105,43774,26028],{"class":111},[105,43776,31591],{"class":164},[105,43778,32818],{"class":115},[105,43780,43781],{"class":107,"line":32806},[105,43782,32824],{"class":174},[105,43784,43785,43787,43789],{"class":107,"line":32821},[105,43786,32595],{"class":115},[105,43788,161],{"class":111},[105,43790,32600],{"class":115},[105,43792,43793],{"class":107,"line":32827},[105,43794,32839],{"class":174},[105,43796,43797,43799,43801],{"class":107,"line":32836},[105,43798,32610],{"class":115},[105,43800,161],{"class":111},[105,43802,32615],{"class":115},[105,43804,43805],{"class":107,"line":32842},[105,43806,32854],{"class":174},[105,43808,43809],{"class":107,"line":32851},[105,43810,32860],{"class":115},[105,43812,43813],{"class":107,"line":32857},[105,43814,36341],{"class":174},[105,43816,43817,43819],{"class":107,"line":32863},[105,43818,32866],{"class":111},[105,43820,32869],{"class":115},[105,43822,43823],{"class":107,"line":32872},[105,43824,32875],{"class":174},[105,43826,43827,43829,43831],{"class":107,"line":32878},[105,43828,36356],{"class":115},[105,43830,161],{"class":111},[105,43832,32650],{"class":115},[105,43834,43835],{"class":107,"line":32889},[105,43836,32892],{"class":174},[105,43838,43839,43841,43843,43845,43847,43849,43851],{"class":107,"line":32895},[105,43840,36369],{"class":115},[105,43842,161],{"class":111},[105,43844,32667],{"class":115},[105,43846,32670],{"class":5208},[105,43848,161],{"class":111},[105,43850,333],{"class":164},[105,43852,122],{"class":115},[105,43854,43855],{"class":107,"line":32914},[105,43856,32917],{"class":174},[105,43858,43859,43861,43863],{"class":107,"line":32920},[105,43860,36390],{"class":115},[105,43862,161],{"class":111},[105,43864,32693],{"class":115},[105,43866,43867],{"class":107,"line":32931},[105,43868,32934],{"class":174},[105,43870,43871,43873,43875,43877,43879,43881,43883],{"class":107,"line":32937},[105,43872,36403],{"class":115},[105,43874,9469],{"class":111},[105,43876,36408],{"class":115},[105,43878,571],{"class":111},[105,43880,32751],{"class":115},[105,43882,307],{"class":164},[105,43884,122],{"class":115},[105,43886,43887,43889,43891,43893,43895],{"class":107,"line":32957},[105,43888,36421],{"class":115},[105,43890,9469],{"class":111},[105,43892,32772],{"class":115},[105,43894,2940],{"class":111},[105,43896,32777],{"class":115},[105,43898,43899],{"class":107,"line":32973},[105,43900,36434],{"class":174},[105,43902,43903,43905,43907,43909,43911],{"class":107,"line":32979},[105,43904,36439],{"class":115},[105,43906,9469],{"class":111},[105,43908,32751],{"class":115},[105,43910,307],{"class":164},[105,43912,122],{"class":115},[105,43914,43915],{"class":107,"line":32993},[105,43916,32996],{"class":174},[105,43918,43919],{"class":107,"line":32999},[105,43920,33002],{"class":174},[105,43922,43923,43925,43927],{"class":107,"line":33005},[105,43924,33008],{"class":115},[105,43926,700],{"class":111},[105,43928,33013],{"class":115},[105,43930,43931],{"class":107,"line":33016},[105,43932,33019],{"class":174},[105,43934,43935],{"class":107,"line":33022},[105,43936,33025],{"class":174},[105,43938,43939,43941,43943],{"class":107,"line":33028},[105,43940,33031],{"class":115},[105,43942,700],{"class":111},[105,43944,33013],{"class":115},[105,43946,43947],{"class":107,"line":33038},[105,43948,33041],{"class":174},[105,43950,43951,43953,43955],{"class":107,"line":33044},[105,43952,33047],{"class":115},[105,43954,700],{"class":111},[105,43956,33052],{"class":115},[105,43958,43959],{"class":107,"line":33055},[105,43960,33058],{"class":174},[105,43962,43963,43965,43967],{"class":107,"line":33061},[105,43964,33064],{"class":115},[105,43966,700],{"class":111},[105,43968,33052],{"class":115},[105,43970,43971],{"class":107,"line":33071},[105,43972,2391],{"emptyLinePlaceholder":32},[105,43974,43975],{"class":107,"line":33076},[105,43976,33079],{"class":174},[105,43978,43979,43981,43983,43985,43987,43989,43991,43993,43995,43997,43999,44001,44003,44005,44007,44009,44011,44013,44015,44017],{"class":107,"line":33082},[105,43980,32436],{"class":164},[105,43982,116],{"class":115},[105,43984,3583],{"class":220},[105,43986,32444],{"class":164},[105,43988,33093],{"class":220},[105,43990,1012],{"class":164},[105,43992,33098],{"class":111},[105,43994,1062],{"class":164},[105,43996,33103],{"class":220},[105,43998,1012],{"class":164},[105,44000,33098],{"class":111},[105,44002,1062],{"class":164},[105,44004,3583],{"class":220},[105,44006,33114],{"class":115},[105,44008,648],{"class":111},[105,44010,333],{"class":164},[105,44012,33121],{"class":115},[105,44014,648],{"class":111},[105,44016,333],{"class":164},[105,44018,33128],{"class":115},[105,44020,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059],{"class":107,"line":33131},[105,44022,32436],{"class":164},[105,44024,116],{"class":115},[105,44026,3583],{"class":220},[105,44028,32444],{"class":164},[105,44030,33142],{"class":220},[105,44032,1012],{"class":164},[105,44034,33098],{"class":111},[105,44036,1062],{"class":164},[105,44038,33151],{"class":220},[105,44040,1012],{"class":164},[105,44042,33098],{"class":111},[105,44044,1062],{"class":164},[105,44046,3583],{"class":220},[105,44048,33162],{"class":115},[105,44050,648],{"class":111},[105,44052,333],{"class":164},[105,44054,33169],{"class":115},[105,44056,648],{"class":111},[105,44058,333],{"class":164},[105,44060,33128],{"class":115},[105,44062,44063],{"class":107,"line":33178},[105,44064,2391],{"emptyLinePlaceholder":32},[105,44066,44067],{"class":107,"line":33183},[105,44068,33186],{"class":174},[105,44070,44071,44073,44075,44077,44079,44081,44083],{"class":107,"line":33189},[105,44072,2488],{"class":111},[105,44074,33194],{"class":115},[105,44076,648],{"class":111},[105,44078,333],{"class":164},[105,44080,1056],{"class":115},[105,44082,1076],{"class":111},[105,44084,33205],{"class":115},[105,44086,44087],{"class":107,"line":33208},[105,44088,33211],{"class":174},[105,44090,44091,44093,44095,44097,44099,44101,44103],{"class":107,"line":33214},[105,44092,33217],{"class":115},[105,44094,155],{"class":164},[105,44096,161],{"class":111},[105,44098,33224],{"class":115},[105,44100,648],{"class":111},[105,44102,333],{"class":164},[105,44104,33231],{"class":115},[105,44106,44107],{"class":107,"line":33234},[105,44108,33237],{"class":174},[105,44110,44111],{"class":107,"line":33240},[105,44112,33243],{"class":174},[105,44114,44115,44117,44119],{"class":107,"line":33246},[105,44116,33249],{"class":115},[105,44118,161],{"class":111},[105,44120,32299],{"class":115},[105,44122,44123],{"class":107,"line":33256},[105,44124,2391],{"emptyLinePlaceholder":32},[105,44126,44127],{"class":107,"line":33261},[105,44128,33264],{"class":174},[105,44130,44131,44133,44135,44137,44139],{"class":107,"line":33267},[105,44132,33270],{"class":115},[105,44134,161],{"class":111},[105,44136,33275],{"class":115},[105,44138,648],{"class":111},[105,44140,33280],{"class":115},[105,44142,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171,44173,44175,44177],{"class":107,"line":33283},[105,44144,32436],{"class":164},[105,44146,116],{"class":115},[105,44148,33290],{"class":220},[105,44150,1012],{"class":164},[105,44152,33295],{"class":111},[105,44154,1062],{"class":164},[105,44156,660],{"class":220},[105,44158,1012],{"class":164},[105,44160,33295],{"class":111},[105,44162,1062],{"class":164},[105,44164,33308],{"class":220},[105,44166,33311],{"class":115},[105,44168,33314],{"class":111},[105,44170,1023],{"class":164},[105,44172,33319],{"class":115},[105,44174,444],{"class":111},[105,44176,1023],{"class":164},[105,44178,30482],{"class":115},[105,44180,44181],{"class":107,"line":33328},[105,44182,36718],{"class":174},[105,44184,44185],{"class":107,"line":33334},[105,44186,36723],{"class":174},[105,44188,44189,44191,44193],{"class":107,"line":33340},[105,44190,36728],{"class":115},[105,44192,33352],{"class":220},[105,44194,122],{"class":115},[105,44196,44197],{"class":107,"line":33346},[105,44198,33372],{"class":174},[105,44200,44201,44203,44205,44207,44209,44211],{"class":107,"line":33357},[105,44202,33378],{"class":115},[105,44204,161],{"class":111},[105,44206,33383],{"class":115},[105,44208,33386],{"class":5208},[105,44210,161],{"class":111},[105,44212,1537],{"class":115},[105,44214,44215,44217,44219,44221],{"class":107,"line":33363},[105,44216,33396],{"class":220},[105,44218,975],{"class":115},[105,44220,33401],{"class":164},[105,44222,33404],{"class":115},[105,44224,44225,44227],{"class":107,"line":33369},[105,44226,33410],{"class":220},[105,44228,33413],{"class":115},[105,44230,44231,44233],{"class":107,"line":33375},[105,44232,33419],{"class":220},[105,44234,33422],{"class":115},[105,44236,44237,44239],{"class":107,"line":33393},[105,44238,33428],{"class":220},[105,44240,33431],{"class":115},[105,44242,44243,44245],{"class":107,"line":33407},[105,44244,33437],{"class":220},[105,44246,33440],{"class":115},[105,44248,44249],{"class":107,"line":33416},[105,44250,33446],{"class":115},[105,44252,44253],{"class":107,"line":33425},[105,44254,33452],{"class":174},[105,44256,44257,44259],{"class":107,"line":33434},[105,44258,4081],{"class":111},[105,44260,33460],{"class":115},[105,44262,44263],{"class":107,"line":33443},[105,44264,2391],{"emptyLinePlaceholder":32},[105,44266,44267],{"class":107,"line":33449},[105,44268,33471],{"class":174},[105,44270,44271,44273,44275],{"class":107,"line":33455},[105,44272,31932],{"class":111},[105,44274,33479],{"class":1954},[105,44276,33482],{"class":115},[105,44278,44279],{"class":107,"line":33463},[105,44280,33488],{"class":174},[105,44282,44283,44285,44287,44289,44291,44293,44295,44297],{"class":107,"line":33468},[105,44284,33494],{"class":115},[105,44286,31678],{"class":5208},[105,44288,161],{"class":111},[105,44290,116],{"class":115},[105,44292,614],{"class":164},[105,44294,494],{"class":115},[105,44296,409],{"class":164},[105,44298,30482],{"class":115},[105,44300,44301],{"class":107,"line":33474},[105,44302,33514],{"class":174},[105,44304,44305],{"class":107,"line":33485},[105,44306,33520],{"class":174},[105,44308,44309],{"class":107,"line":33491},[105,44310,33526],{"class":174},[105,44312,44313,44315,44317,44319,44321,44323,44325],{"class":107,"line":33511},[105,44314,31712],{"class":115},[105,44316,333],{"class":164},[105,44318,494],{"class":115},[105,44320,193],{"class":164},[105,44322,494],{"class":115},[105,44324,333],{"class":164},[105,44326,122],{"class":115},[105,44328,44329],{"class":107,"line":33517},[105,44330,33549],{"class":174},[105,44332,44333],{"class":107,"line":33523},[105,44334,33555],{"class":174},[105,44336,44337],{"class":107,"line":33529},[105,44338,33561],{"class":174},[105,44340,44341],{"class":107,"line":33546},[105,44342,33567],{"class":174},[105,44344,44345],{"class":107,"line":33552},[105,44346,33573],{"class":174},[105,44348,44349,44351,44353,44355,44357,44359,44361,44363,44365],{"class":107,"line":33558},[105,44350,33579],{"class":115},[105,44352,33582],{"class":220},[105,44354,33585],{"class":115},[105,44356,33588],{"class":220},[105,44358,494],{"class":115},[105,44360,33593],{"class":5208},[105,44362,161],{"class":111},[105,44364,33598],{"class":220},[105,44366,122],{"class":115},[105,44368,44369,44371,44373,44375,44377,44379,44381,44383,44385],{"class":107,"line":33564},[105,44370,33579],{"class":115},[105,44372,33582],{"class":220},[105,44374,33610],{"class":115},[105,44376,33613],{"class":220},[105,44378,494],{"class":115},[105,44380,33593],{"class":5208},[105,44382,161],{"class":111},[105,44384,33622],{"class":220},[105,44386,122],{"class":115},[105,44388,44389],{"class":107,"line":33570},[105,44390,33630],{"class":174},[105,44392,44393],{"class":107,"line":33576},[105,44394,33636],{"class":115},[105,44396,44397],{"class":107,"line":33603},[105,44398,33642],{"class":174},[105,44400,44401,44403,44405],{"class":107,"line":33627},[105,44402,33648],{"class":115},[105,44404,33651],{"class":220},[105,44406,122],{"class":115},[105,44408,44409,44411,44413],{"class":107,"line":33633},[105,44410,33659],{"class":115},[105,44412,33662],{"class":220},[105,44414,122],{"class":115},[105,44416,44417],{"class":107,"line":33639},[105,44418,33670],{"class":174},[105,44420,44421,44423,44425,44427,44429,44431,44433],{"class":107,"line":33645},[105,44422,31712],{"class":115},[105,44424,333],{"class":164},[105,44426,494],{"class":115},[105,44428,193],{"class":164},[105,44430,494],{"class":115},[105,44432,193],{"class":164},[105,44434,122],{"class":115},[105,44436,44437,44439,44441,44443,44445,44447,44449,44451,44453],{"class":107,"line":33656},[105,44438,33579],{"class":115},[105,44440,33582],{"class":220},[105,44442,33697],{"class":115},[105,44444,33588],{"class":220},[105,44446,494],{"class":115},[105,44448,33593],{"class":5208},[105,44450,161],{"class":111},[105,44452,33708],{"class":220},[105,44454,122],{"class":115},[105,44456,44457,44459,44461,44463,44465,44467,44469,44471,44473],{"class":107,"line":33667},[105,44458,33579],{"class":115},[105,44460,33582],{"class":220},[105,44462,33720],{"class":115},[105,44464,33613],{"class":220},[105,44466,494],{"class":115},[105,44468,33593],{"class":5208},[105,44470,161],{"class":111},[105,44472,33731],{"class":220},[105,44474,122],{"class":115},[105,44476,44477],{"class":107,"line":33673},[105,44478,33739],{"class":174},[105,44480,44481],{"class":107,"line":33690},[105,44482,33636],{"class":115},[105,44484,44485,44487,44489],{"class":107,"line":33713},[105,44486,33648],{"class":115},[105,44488,33582],{"class":220},[105,44490,122],{"class":115},[105,44492,44493,44495,44497],{"class":107,"line":33736},[105,44494,33659],{"class":115},[105,44496,33761],{"class":220},[105,44498,122],{"class":115},[105,44500,44501],{"class":107,"line":33742},[105,44502,33769],{"class":115},[105,44504,44505],{"class":107,"line":33747},[105,44506,2391],{"emptyLinePlaceholder":32},[105,44508,44509],{"class":107,"line":33756},[105,44510,33780],{"class":174},[105,44512,44513,44515,44517,44519,44521],{"class":107,"line":33766},[105,44514,1522],{"class":111},[105,44516,31205],{"class":164},[105,44518,2940],{"class":111},[105,44520,31210],{"class":220},[105,44522,3730],{"class":115},[105,44524,44525],{"class":107,"line":33772},[105,44526,33799],{"class":174},[105,44528,44529,44532,44534],{"class":107,"line":33777},[105,44530,44531],{"class":115},"    GoogLeNet",[105,44533,161],{"class":111},[105,44535,44536],{"class":115},"GoogLeNet(Inception)\n",[105,44538,44539,44541,44543],{"class":107,"line":33783},[105,44540,33816],{"class":115},[105,44542,161],{"class":111},[105,44544,33821],{"class":115},[105,44546,44547,44549,44551,44554,44556,44558,44560],{"class":107,"line":33796},[105,44548,33378],{"class":115},[105,44550,161],{"class":111},[105,44552,44553],{"class":115},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[105,44555,33834],{"class":5208},[105,44557,161],{"class":111},[105,44559,1067],{"class":164},[105,44561,122],{"class":115},[105,44563,44564],{"class":107,"line":33802},[105,44565,33846],{"class":115},[59,44567,44568],{"start":1171},[62,44569,40559],{},[96,44571,44573],{"className":30363,"code":44572,"language":30365,"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",[102,44574,44575,44581,44591,44601,44605,44615,44626,44630,44634,44638,44646,44662,44672,44688,44698,44712,44716,44726,44736,44746,44752,44756,44760,44768,44772,44788,44796,44800,44804,44812,44820,44824,44828,44832,44836,44842,44846,44856,44864,44872,44876,44880,44884,44892,44896,44912,44916,44920,44924,44936,44940,44952,44956,44960,44972,44976,44986,44990,44994,45006,45010,45018,45022,45026,45034,45038,45046,45050,45054,45058,45062,45066,45082,45090,45094,45098,45146,45152,45156,45166,45174,45182,45186,45190,45194,45198,45206,45210,45226,45230,45238,45246],{"__ignoreMap":22},[105,44576,44577,44579],{"class":107,"line":108},[105,44578,30377],{"class":111},[105,44580,30380],{"class":115},[105,44582,44583,44585,44587,44589],{"class":107,"line":28},[105,44584,30377],{"class":111},[105,44586,31400],{"class":115},[105,44588,31368],{"class":111},[105,44590,31405],{"class":115},[105,44592,44593,44595,44597,44599],{"class":107,"line":1171},[105,44594,30722],{"class":111},[105,44596,31383],{"class":115},[105,44598,30377],{"class":111},[105,44600,31388],{"class":115},[105,44602,44603],{"class":107,"line":1186},[105,44604,33907],{"class":174},[105,44606,44607,44609,44611,44613],{"class":107,"line":1192},[105,44608,30722],{"class":111},[105,44610,31353],{"class":115},[105,44612,30377],{"class":111},[105,44614,31358],{"class":115},[105,44616,44617,44619,44621,44623],{"class":107,"line":1206},[105,44618,30722],{"class":111},[105,44620,31899],{"class":115},[105,44622,30377],{"class":111},[105,44624,44625],{"class":115}," GoogLeNet,Inception\n",[105,44627,44628],{"class":107,"line":1212},[105,44629,2391],{"emptyLinePlaceholder":32},[105,44631,44632],{"class":107,"line":1303},[105,44633,2391],{"emptyLinePlaceholder":32},[105,44635,44636],{"class":107,"line":1309},[105,44637,33936],{"class":174},[105,44639,44640,44642,44644],{"class":107,"line":1321},[105,44641,31932],{"class":111},[105,44643,33943],{"class":1954},[105,44645,31938],{"class":115},[105,44647,44648,44650,44652,44654,44656,44658,44660],{"class":107,"line":1603},[105,44649,33950],{"class":115},[105,44651,161],{"class":111},[105,44653,31440],{"class":115},[105,44655,31443],{"class":5208},[105,44657,161],{"class":111},[105,44659,31448],{"class":220},[105,44661,31451],{"class":115},[105,44663,44664,44666,44668,44670],{"class":107,"line":1608},[105,44665,33967],{"class":5208},[105,44667,161],{"class":111},[105,44669,33972],{"class":164},[105,44671,31451],{"class":115},[105,44673,44674,44676,44678,44680,44682,44684,44686],{"class":107,"line":1614},[105,44675,33979],{"class":5208},[105,44677,161],{"class":111},[105,44679,31478],{"class":115},[105,44681,31481],{"class":5208},[105,44683,161],{"class":111},[105,44685,35434],{"class":164},[105,44687,31489],{"class":115},[105,44689,44690,44692,44694,44696],{"class":107,"line":1619},[105,44691,33996],{"class":5208},[105,44693,161],{"class":111},[105,44695,31461],{"class":164},[105,44697,122],{"class":115},[105,44699,44700,44702,44704,44706,44708,44710],{"class":107,"line":1633},[105,44701,34007],{"class":115},[105,44703,161],{"class":111},[105,44705,31519],{"class":115},[105,44707,31522],{"class":5208},[105,44709,161],{"class":111},[105,44711,34018],{"class":115},[105,44713,44714],{"class":107,"line":1638},[105,44715,34023],{"class":174},[105,44717,44718,44720,44722,44724],{"class":107,"line":1644},[105,44719,34028],{"class":5208},[105,44721,161],{"class":111},[105,44723,333],{"class":164},[105,44725,31451],{"class":115},[105,44727,44728,44730,44732,44734],{"class":107,"line":1665},[105,44729,34039],{"class":5208},[105,44731,161],{"class":111},[105,44733,31461],{"class":164},[105,44735,31451],{"class":115},[105,44737,44738,44740,44742,44744],{"class":107,"line":1670},[105,44739,34050],{"class":5208},[105,44741,161],{"class":111},[105,44743,307],{"class":164},[105,44745,122],{"class":115},[105,44747,44748,44750],{"class":107,"line":1684},[105,44749,4081],{"class":111},[105,44751,34063],{"class":115},[105,44753,44754],{"class":107,"line":1689},[105,44755,2391],{"emptyLinePlaceholder":32},[105,44757,44758],{"class":107,"line":1718},[105,44759,34072],{"class":174},[105,44761,44762,44764,44766],{"class":107,"line":1723},[105,44763,31932],{"class":111},[105,44765,34079],{"class":1954},[105,44767,34082],{"class":115},[105,44769,44770],{"class":107,"line":1740},[105,44771,34087],{"class":174},[105,44773,44774,44776,44778,44780,44782,44784,44786],{"class":107,"line":1745},[105,44775,31222],{"class":115},[105,44777,161],{"class":111},[105,44779,31229],{"class":220},[105,44781,1695],{"class":111},[105,44783,31234],{"class":115},[105,44785,1692],{"class":111},[105,44787,34104],{"class":220},[105,44789,44790,44792,44794],{"class":107,"line":1750},[105,44791,31274],{"class":115},[105,44793,161],{"class":111},[105,44795,32274],{"class":115},[105,44797,44798],{"class":107,"line":1755},[105,44799,2391],{"emptyLinePlaceholder":32},[105,44801,44802],{"class":107,"line":1769},[105,44803,34121],{"class":174},[105,44805,44806,44808,44810],{"class":107,"line":1774},[105,44807,34126],{"class":115},[105,44809,161],{"class":111},[105,44811,32327],{"class":164},[105,44813,44814,44816,44818],{"class":107,"line":2568},[105,44815,34135],{"class":115},[105,44817,161],{"class":111},[105,44819,3076],{"class":164},[105,44821,44822],{"class":107,"line":2582},[105,44823,2391],{"emptyLinePlaceholder":32},[105,44825,44826],{"class":107,"line":2590},[105,44827,34148],{"class":174},[105,44829,44830],{"class":107,"line":2595},[105,44831,34153],{"class":174},[105,44833,44834],{"class":107,"line":2601},[105,44835,34158],{"class":174},[105,44837,44838,44840],{"class":107,"line":2607},[105,44839,34163],{"class":111},[105,44841,32869],{"class":115},[105,44843,44844],{"class":107,"line":2612},[105,44845,34170],{"class":174},[105,44847,44848,44850,44852,44854],{"class":107,"line":7940},[105,44849,3394],{"class":111},[105,44851,34177],{"class":115},[105,44853,26028],{"class":111},[105,44855,34182],{"class":115},[105,44857,44858,44860,44862],{"class":107,"line":7964},[105,44859,34187],{"class":115},[105,44861,161],{"class":111},[105,44863,34192],{"class":115},[105,44865,44866,44868,44870],{"class":107,"line":7969},[105,44867,34197],{"class":115},[105,44869,161],{"class":111},[105,44871,34202],{"class":115},[105,44873,44874],{"class":107,"line":7975},[105,44875,34207],{"class":174},[105,44877,44878],{"class":107,"line":8002},[105,44879,32860],{"class":115},[105,44881,44882],{"class":107,"line":8007},[105,44883,34216],{"class":174},[105,44885,44886,44888,44890],{"class":107,"line":8013},[105,44887,32645],{"class":115},[105,44889,161],{"class":111},[105,44891,34225],{"class":115},[105,44893,44894],{"class":107,"line":8025},[105,44895,34230],{"class":174},[105,44897,44898,44900,44902,44904,44906,44908,44910],{"class":107,"line":8037},[105,44899,32662],{"class":115},[105,44901,161],{"class":111},[105,44903,32667],{"class":115},[105,44905,32670],{"class":5208},[105,44907,161],{"class":111},[105,44909,333],{"class":164},[105,44911,122],{"class":115},[105,44913,44914],{"class":107,"line":8049},[105,44915,34251],{"class":174},[105,44917,44918],{"class":107,"line":9708},[105,44919,34256],{"class":174},[105,44921,44922],{"class":107,"line":9733},[105,44923,34261],{"class":174},[105,44925,44926,44928,44930,44932,44934],{"class":107,"line":9756},[105,44927,34266],{"class":115},[105,44929,9469],{"class":111},[105,44931,32772],{"class":115},[105,44933,2940],{"class":111},[105,44935,34275],{"class":115},[105,44937,44938],{"class":107,"line":9780},[105,44939,34280],{"class":174},[105,44941,44942,44944,44946,44948,44950],{"class":107,"line":9785},[105,44943,34285],{"class":115},[105,44945,9469],{"class":111},[105,44947,34290],{"class":115},[105,44949,307],{"class":164},[105,44951,122],{"class":115},[105,44953,44954],{"class":107,"line":9790},[105,44955,2391],{"emptyLinePlaceholder":32},[105,44957,44958],{"class":107,"line":9795},[105,44959,34303],{"class":174},[105,44961,44962,44964,44966,44968,44970],{"class":107,"line":9804},[105,44963,34308],{"class":115},[105,44965,161],{"class":111},[105,44967,34313],{"class":115},[105,44969,700],{"class":111},[105,44971,34318],{"class":115},[105,44973,44974],{"class":107,"line":9809},[105,44975,34323],{"class":174},[105,44977,44978,44980,44982,44984],{"class":107,"line":9815},[105,44979,32436],{"class":164},[105,44981,116],{"class":115},[105,44983,34332],{"class":220},[105,44985,34335],{"class":115},[105,44987,44988],{"class":107,"line":9836},[105,44989,2391],{"emptyLinePlaceholder":32},[105,44991,44992],{"class":107,"line":9842},[105,44993,34344],{"class":174},[105,44995,44996,44998,45000,45002,45004],{"class":107,"line":9856},[105,44997,1522],{"class":111},[105,44999,31205],{"class":164},[105,45001,2940],{"class":111},[105,45003,31210],{"class":220},[105,45005,3730],{"class":115},[105,45007,45008],{"class":107,"line":9862},[105,45009,34361],{"class":174},[105,45011,45012,45014,45016],{"class":107,"line":9889},[105,45013,31274],{"class":115},[105,45015,161],{"class":111},[105,45017,44536],{"class":115},[105,45019,45020],{"class":107,"line":9898},[105,45021,34374],{"class":174},[105,45023,45024],{"class":107,"line":9904},[105,45025,34379],{"class":174},[105,45027,45028,45030,45032],{"class":107,"line":9912},[105,45029,34384],{"class":115},[105,45031,34387],{"class":220},[105,45033,30482],{"class":115},[105,45035,45036],{"class":107,"line":9917},[105,45037,34394],{"class":174},[105,45039,45040,45042,45044],{"class":107,"line":16596},[105,45041,34007],{"class":115},[105,45043,161],{"class":111},[105,45045,34403],{"class":115},[105,45047,45048],{"class":107,"line":16602},[105,45049,34408],{"class":174},[105,45051,45052],{"class":107,"line":16625},[105,45053,34413],{"class":115},[105,45055,45056],{"class":107,"line":16631},[105,45057,2391],{"emptyLinePlaceholder":32},[105,45059,45060],{"class":107,"line":16654},[105,45061,34422],{"class":174},[105,45063,45064],{"class":107,"line":16668},[105,45065,34427],{"class":174},[105,45067,45068,45070,45072,45074,45076,45078,45080],{"class":107,"line":16688},[105,45069,31222],{"class":115},[105,45071,161],{"class":111},[105,45073,31229],{"class":220},[105,45075,1695],{"class":111},[105,45077,31234],{"class":115},[105,45079,1692],{"class":111},[105,45081,34104],{"class":220},[105,45083,45084,45086,45088],{"class":107,"line":16694},[105,45085,31274],{"class":115},[105,45087,161],{"class":111},[105,45089,32274],{"class":115},[105,45091,45092],{"class":107,"line":16705},[105,45093,34456],{"class":174},[105,45095,45096],{"class":107,"line":16728},[105,45097,34461],{"class":174},[105,45099,45100,45102,45104,45106,45108,45110,45112,45114,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138,45140,45142,45144],{"class":107,"line":16750},[105,45101,34466],{"class":115},[105,45103,161],{"class":111},[105,45105,1006],{"class":115},[105,45107,34473],{"class":220},[105,45109,494],{"class":115},[105,45111,34478],{"class":220},[105,45113,494],{"class":115},[105,45115,34483],{"class":220},[105,45117,494],{"class":115},[105,45119,34488],{"class":220},[105,45121,494],{"class":115},[105,45123,34493],{"class":220},[105,45125,494],{"class":115},[105,45127,34498],{"class":220},[105,45129,494],{"class":115},[105,45131,34503],{"class":220},[105,45133,494],{"class":115},[105,45135,34508],{"class":220},[105,45137,494],{"class":115},[105,45139,34513],{"class":220},[105,45141,494],{"class":115},[105,45143,34518],{"class":220},[105,45145,33231],{"class":115},[105,45147,45148,45150],{"class":107,"line":16755},[105,45149,34163],{"class":111},[105,45151,32869],{"class":115},[105,45153,45154],{"class":107,"line":16761},[105,45155,34531],{"class":174},[105,45157,45158,45160,45162,45164],{"class":107,"line":16775},[105,45159,3394],{"class":111},[105,45161,34538],{"class":115},[105,45163,26028],{"class":111},[105,45165,34182],{"class":115},[105,45167,45168,45170,45172],{"class":107,"line":16788},[105,45169,32595],{"class":115},[105,45171,161],{"class":111},[105,45173,32600],{"class":115},[105,45175,45176,45178,45180],{"class":107,"line":16793},[105,45177,32610],{"class":115},[105,45179,161],{"class":111},[105,45181,32615],{"class":115},[105,45183,45184],{"class":107,"line":16807},[105,45185,2391],{"emptyLinePlaceholder":32},[105,45187,45188],{"class":107,"line":16812},[105,45189,34567],{"class":174},[105,45191,45192],{"class":107,"line":16818},[105,45193,32860],{"class":115},[105,45195,45196],{"class":107,"line":16823},[105,45197,34576],{"class":174},[105,45199,45200,45202,45204],{"class":107,"line":16837},[105,45201,32645],{"class":115},[105,45203,161],{"class":111},[105,45205,32650],{"class":115},[105,45207,45208],{"class":107,"line":16842},[105,45209,34589],{"class":174},[105,45211,45212,45214,45216,45218,45220,45222,45224],{"class":107,"line":16847},[105,45213,32662],{"class":115},[105,45215,161],{"class":111},[105,45217,32667],{"class":115},[105,45219,32670],{"class":5208},[105,45221,161],{"class":111},[105,45223,333],{"class":164},[105,45225,122],{"class":115},[105,45227,45228],{"class":107,"line":16861},[105,45229,34610],{"class":174},[105,45231,45232,45234,45236],{"class":107,"line":16873},[105,45233,34615],{"class":115},[105,45235,161],{"class":111},[105,45237,34620],{"class":115},[105,45239,45240,45242,45244],{"class":107,"line":16878},[105,45241,34625],{"class":115},[105,45243,161],{"class":111},[105,45245,34630],{"class":115},[105,45247,45248,45250,45252,45254,45256,45258,45260,45262],{"class":107,"line":16891},[105,45249,34635],{"class":164},[105,45251,116],{"class":115},[105,45253,34640],{"class":220},[105,45255,34643],{"class":115},[105,45257,34646],{"class":220},[105,45259,494],{"class":115},[105,45261,34651],{"class":220},[105,45263,34654],{"class":115},[76,45265,45267],{"id":45266},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45269,45270],{},"猫狗分类任务",[14,45272,45273],{},"划分数据集和验证集",[96,45275,45277],{"className":30363,"code":45276,"language":30365,"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",[102,45278,45279,45284,45291,45296,45307,45314,45318,45328,45342,45351,45355,45360,45370,45390,45394,45399,45409,45420,45433,45437,45442,45451,45461,45472,45476,45481,45491,45495,45500,45505,45510,45515,45520,45524,45534,45561,45574,45586,45613,45618,45623,45637,45642,45654,45669,45684,45692,45696,45701,45707,45719,45732,45737,45742,45747,45797,45803,45807],{"__ignoreMap":22},[105,45280,45281],{"class":107,"line":108},[105,45282,45283],{"class":174},"# 创建脚本，用于划分数据集和验证集\n",[105,45285,45286,45288],{"class":107,"line":28},[105,45287,30377],{"class":111},[105,45289,45290],{"class":115}," os\n",[105,45292,45293],{"class":107,"line":1171},[105,45294,45295],{"class":174},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[105,45297,45298,45300,45303,45305],{"class":107,"line":1186},[105,45299,30722],{"class":111},[105,45301,45302],{"class":115}," shutil ",[105,45304,30377],{"class":111},[105,45306,31807],{"class":115},[105,45308,45309,45311],{"class":107,"line":1192},[105,45310,30377],{"class":111},[105,45312,45313],{"class":115}," random\n",[105,45315,45316],{"class":107,"line":1206},[105,45317,2391],{"emptyLinePlaceholder":32},[105,45319,45320,45322,45325],{"class":107,"line":1212},[105,45321,31932],{"class":111},[105,45323,45324],{"class":1954}," mkfile",[105,45326,45327],{"class":115},"(file):\n",[105,45329,45330,45332,45334,45337,45340],{"class":107,"line":1303},[105,45331,3092],{"class":111},[105,45333,38915],{"class":111},[105,45335,45336],{"class":115}," os.path.exists(",[105,45338,45339],{"class":5208},"file",[105,45341,30771],{"class":115},[105,45343,45344,45347,45349],{"class":107,"line":1309},[105,45345,45346],{"class":115},"        os.makedirs(",[105,45348,45339],{"class":5208},[105,45350,122],{"class":115},[105,45352,45353],{"class":107,"line":1321},[105,45354,2391],{"emptyLinePlaceholder":32},[105,45356,45357],{"class":107,"line":1603},[105,45358,45359],{"class":174},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[105,45361,45362,45365,45367],{"class":107,"line":1608},[105,45363,45364],{"class":115},"file_path",[105,45366,161],{"class":111},[105,45368,45369],{"class":220},"'data_cat_dog'\n",[105,45371,45372,45375,45377,45380,45382,45385,45387],{"class":107,"line":1614},[105,45373,45374],{"class":115},"flower_class",[105,45376,161],{"class":111},[105,45378,45379],{"class":115},"[cla ",[105,45381,3016],{"class":111},[105,45383,45384],{"class":115}," cla ",[105,45386,26028],{"class":111},[105,45388,45389],{"class":115}," os.listdir(file_path)]\n",[105,45391,45392],{"class":107,"line":1619},[105,45393,2391],{"emptyLinePlaceholder":32},[105,45395,45396],{"class":107,"line":1633},[105,45397,45398],{"class":174},"# 创建训练集train文件夹\n",[105,45400,45401,45404,45407],{"class":107,"line":1638},[105,45402,45403],{"class":115},"mkfile(",[105,45405,45406],{"class":220},"'data\u002Ftrain'",[105,45408,122],{"class":115},[105,45410,45411,45413,45415,45417],{"class":107,"line":1644},[105,45412,3016],{"class":111},[105,45414,45384],{"class":115},[105,45416,26028],{"class":111},[105,45418,45419],{"class":115}," flower_class:\n",[105,45421,45422,45425,45428,45430],{"class":107,"line":1665},[105,45423,45424],{"class":115},"    mkfile(",[105,45426,45427],{"class":220},"'data\u002Ftrain\u002F'",[105,45429,597],{"class":111},[105,45431,45432],{"class":115},"cla)\n",[105,45434,45435],{"class":107,"line":1670},[105,45436,2391],{"emptyLinePlaceholder":32},[105,45438,45439],{"class":107,"line":1684},[105,45440,45441],{"class":174},"# 创建验证集val文件夹\n",[105,45443,45444,45446,45449],{"class":107,"line":1689},[105,45445,45403],{"class":115},[105,45447,45448],{"class":220},"'data\u002Ftest'",[105,45450,122],{"class":115},[105,45452,45453,45455,45457,45459],{"class":107,"line":1718},[105,45454,3016],{"class":111},[105,45456,45384],{"class":115},[105,45458,26028],{"class":111},[105,45460,45419],{"class":115},[105,45462,45463,45465,45468,45470],{"class":107,"line":1723},[105,45464,45424],{"class":115},[105,45466,45467],{"class":220},"'data\u002Ftest\u002F'",[105,45469,597],{"class":111},[105,45471,45432],{"class":115},[105,45473,45474],{"class":107,"line":1740},[105,45475,2391],{"emptyLinePlaceholder":32},[105,45477,45478],{"class":107,"line":1745},[105,45479,45480],{"class":174},"# 划分比例，训练集：测试集=9：1\n",[105,45482,45483,45486,45488],{"class":107,"line":1750},[105,45484,45485],{"class":115},"split_rate",[105,45487,161],{"class":111},[105,45489,45490],{"class":164},"0.1\n",[105,45492,45493],{"class":107,"line":1755},[105,45494,2391],{"emptyLinePlaceholder":32},[105,45496,45497],{"class":107,"line":1769},[105,45498,45499],{"class":174},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[105,45501,45502],{"class":107,"line":1774},[105,45503,45504],{"class":174},"# cla_path：当前类别的原始图片路径\n",[105,45506,45507],{"class":107,"line":2568},[105,45508,45509],{"class":174},"# images：当前类别下所有图片的文件名列表\n",[105,45511,45512],{"class":107,"line":2582},[105,45513,45514],{"class":174},"# num：该类别图片总数\n",[105,45516,45517],{"class":107,"line":2590},[105,45518,45519],{"class":174},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[105,45521,45522],{"class":107,"line":2595},[105,45523,2391],{"emptyLinePlaceholder":32},[105,45525,45526,45528,45530,45532],{"class":107,"line":2601},[105,45527,3016],{"class":111},[105,45529,45384],{"class":115},[105,45531,26028],{"class":111},[105,45533,45419],{"class":115},[105,45535,45536,45539,45541,45544,45546,45549,45552,45554,45556,45558],{"class":107,"line":2607},[105,45537,45538],{"class":115},"    cla_path ",[105,45540,161],{"class":111},[105,45542,45543],{"class":115}," file_path ",[105,45545,597],{"class":111},[105,45547,45548],{"class":220}," '\u002F'",[105,45550,45551],{"class":111}," +",[105,45553,45384],{"class":115},[105,45555,597],{"class":111},[105,45557,45548],{"class":220},[105,45559,45560],{"class":174},"  # 某一类别的子目录\n",[105,45562,45563,45566,45568,45571],{"class":107,"line":2612},[105,45564,45565],{"class":115},"    images ",[105,45567,161],{"class":111},[105,45569,45570],{"class":115}," os.listdir(cla_path)  ",[105,45572,45573],{"class":174},"# iamges 列表存储了该目录下所有图像的名称\n",[105,45575,45576,45579,45581,45583],{"class":107,"line":7940},[105,45577,45578],{"class":115},"    num ",[105,45580,161],{"class":111},[105,45582,7323],{"class":164},[105,45584,45585],{"class":115},"(images)\n",[105,45587,45588,45591,45593,45596,45598,45600,45602,45605,45607,45610],{"class":107,"line":7964},[105,45589,45590],{"class":115},"    eval_index ",[105,45592,161],{"class":111},[105,45594,45595],{"class":115}," random.sample(images, ",[105,45597,609],{"class":5208},[105,45599,161],{"class":111},[105,45601,119],{"class":164},[105,45603,45604],{"class":115},"(num ",[105,45606,571],{"class":111},[105,45608,45609],{"class":115}," split_rate))  ",[105,45611,45612],{"class":174},"# 从images列表中随机抽取 k 个图像名称\n",[105,45614,45615],{"class":107,"line":7969},[105,45616,45617],{"class":174},"    # 遍历该类别下的所有图片\n",[105,45619,45620],{"class":107,"line":7975},[105,45621,45622],{"class":174},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[105,45624,45625,45627,45630,45632,45634],{"class":107,"line":8002},[105,45626,3192],{"class":111},[105,45628,45629],{"class":115}," index, image ",[105,45631,26028],{"class":111},[105,45633,31591],{"class":164},[105,45635,45636],{"class":115},"(images):\n",[105,45638,45639],{"class":107,"line":8007},[105,45640,45641],{"class":174},"        # eval_index 中保存验证集val的图像名称\n",[105,45643,45644,45646,45649,45651],{"class":107,"line":8013},[105,45645,2488],{"class":111},[105,45647,45648],{"class":115}," image ",[105,45650,26028],{"class":111},[105,45652,45653],{"class":115}," eval_index:\n",[105,45655,45656,45659,45661,45664,45666],{"class":107,"line":8025},[105,45657,45658],{"class":115},"            image_path ",[105,45660,161],{"class":111},[105,45662,45663],{"class":115}," cla_path ",[105,45665,597],{"class":111},[105,45667,45668],{"class":115}," image\n",[105,45670,45671,45674,45676,45679,45681],{"class":107,"line":8037},[105,45672,45673],{"class":115},"            new_path ",[105,45675,161],{"class":111},[105,45677,45678],{"class":220}," 'data\u002Ftest\u002F'",[105,45680,45551],{"class":111},[105,45682,45683],{"class":115}," cla\n",[105,45685,45686,45689],{"class":107,"line":8049},[105,45687,45688],{"class":115},"            copy(image_path, new_path)  ",[105,45690,45691],{"class":174},"# 将选中的图像复制到新路径\n",[105,45693,45694],{"class":107,"line":9708},[105,45695,2391],{"emptyLinePlaceholder":32},[105,45697,45698],{"class":107,"line":9733},[105,45699,45700],{"class":174},"        # 其余的图像保存在训练集train中\n",[105,45702,45703,45705],{"class":107,"line":9756},[105,45704,2525],{"class":111},[105,45706,3730],{"class":115},[105,45708,45709,45711,45713,45715,45717],{"class":107,"line":9780},[105,45710,45658],{"class":115},[105,45712,161],{"class":111},[105,45714,45663],{"class":115},[105,45716,597],{"class":111},[105,45718,45668],{"class":115},[105,45720,45721,45723,45725,45728,45730],{"class":107,"line":9785},[105,45722,45673],{"class":115},[105,45724,161],{"class":111},[105,45726,45727],{"class":220}," 'data\u002Ftrain\u002F'",[105,45729,45551],{"class":111},[105,45731,45683],{"class":115},[105,45733,45734],{"class":107,"line":9790},[105,45735,45736],{"class":115},"            copy(image_path, new_path)\n",[105,45738,45739],{"class":107,"line":9795},[105,45740,45741],{"class":174},"            # 打印进度条信息\n",[105,45743,45744],{"class":107,"line":9804},[105,45745,45746],{"class":174},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[105,45748,45749,45751,45753,45755,45758,45760,45762,45765,45767,45769,45771,45774,45777,45779,45781,45784,45787,45789,45791,45794],{"class":107,"line":9809},[105,45750,32436],{"class":164},[105,45752,116],{"class":115},[105,45754,367],{"class":220},[105,45756,45757],{"class":164},"\\r",[105,45759,1006],{"class":220},[105,45761,32444],{"class":164},[105,45763,45764],{"class":220},"] processing [",[105,45766,32444],{"class":164},[105,45768,700],{"class":220},[105,45770,32444],{"class":164},[105,45772,45773],{"class":220},"]\"",[105,45775,45776],{"class":115},".format(cla, index ",[105,45778,597],{"class":111},[105,45780,25103],{"class":164},[105,45782,45783],{"class":115},", num), ",[105,45785,45786],{"class":5208},"end",[105,45788,161],{"class":111},[105,45790,7644],{"class":220},[105,45792,45793],{"class":115},")  ",[105,45795,45796],{"class":174},"# processing bar\n",[105,45798,45799,45801],{"class":107,"line":9815},[105,45800,31284],{"class":164},[105,45802,1967],{"class":115},[105,45804,45805],{"class":107,"line":9836},[105,45806,2391],{"emptyLinePlaceholder":32},[105,45808,45809,45811,45813,45816],{"class":107,"line":9842},[105,45810,30400],{"class":164},[105,45812,116],{"class":115},[105,45814,45815],{"class":220},"\"processing done!\"",[105,45817,122],{"class":115},[14,45819,45820],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21990,45822,45824],{"id":45823},"_242模型代码","2.4.2.模型代码",[14,45826,45827],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[96,45829,45831],{"className":30363,"code":45830,"language":30365,"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",[102,45832,45833,45839,45849,45859,45863,45879,45887,45901,45911,45915,45945,45949,45983,46029,46033,46067,46113,46117,46121,46155,46185,46189,46197,46211,46233,46255,46273,46277,46291,46295,46299,46315,46319,46327,46341,46351,46395,46399,46427,46431,46441,46469,46473,46509,46513,46541,46545,46555,46587,46619,46647,46651,46661,46693,46725,46757,46789,46821,46849,46853,46863,46895,46927,46939,46943,46955,46959,46963,46975,46983,47003,47007,47011,47015,47019,47023,47027,47041,47049,47057,47069,47083,47091,47095,47103,47113,47123,47133,47143,47153,47159,47163,47167,47179,47199,47207],{"__ignoreMap":22},[105,45834,45835,45837],{"class":107,"line":108},[105,45836,30377],{"class":111},[105,45838,30380],{"class":115},[105,45840,45841,45843,45845,45847],{"class":107,"line":28},[105,45842,30722],{"class":111},[105,45844,30725],{"class":115},[105,45846,30377],{"class":111},[105,45848,30730],{"class":115},[105,45850,45851,45853,45855,45857],{"class":107,"line":1171},[105,45852,30722],{"class":111},[105,45854,30742],{"class":115},[105,45856,30377],{"class":111},[105,45858,30747],{"class":115},[105,45860,45861],{"class":107,"line":1186},[105,45862,2391],{"emptyLinePlaceholder":32},[105,45864,45865,45867,45869,45871,45873,45875,45877],{"class":107,"line":1192},[105,45866,14686],{"class":111},[105,45868,41478],{"class":1954},[105,45870,116],{"class":115},[105,45872,30763],{"class":1954},[105,45874,674],{"class":115},[105,45876,30768],{"class":1954},[105,45878,30771],{"class":115},[105,45880,45881,45883,45885],{"class":107,"line":1206},[105,45882,30786],{"class":111},[105,45884,30789],{"class":164},[105,45886,41497],{"class":115},[105,45888,45889,45891,45893,45895,45897,45899],{"class":107,"line":1212},[105,45890,30802],{"class":164},[105,45892,41504],{"class":115},[105,45894,30808],{"class":164},[105,45896,30811],{"class":115},[105,45898,30814],{"class":164},[105,45900,1967],{"class":115},[105,45902,45903,45905,45907,45909],{"class":107,"line":1303},[105,45904,30830],{"class":164},[105,45906,34756],{"class":115},[105,45908,161],{"class":111},[105,45910,34761],{"class":115},[105,45912,45913],{"class":107,"line":1309},[105,45914,41527],{"class":174},[105,45916,45917,45919,45921,45923,45925,45927,45929,45931,45933,45935,45937,45939,45941,45943],{"class":107,"line":1321},[105,45918,30830],{"class":164},[105,45920,41534],{"class":115},[105,45922,161],{"class":111},[105,45924,30838],{"class":115},[105,45926,30841],{"class":5208},[105,45928,161],{"class":111},[105,45930,41545],{"class":115},[105,45932,30850],{"class":5208},[105,45934,161],{"class":111},[105,45936,41552],{"class":115},[105,45938,30859],{"class":5208},[105,45940,161],{"class":111},[105,45942,333],{"class":164},[105,45944,122],{"class":115},[105,45946,45947],{"class":107,"line":1603},[105,45948,41565],{"class":174},[105,45950,45951,45953,45955,45957,45959,45961,45963,45965,45967,45969,45971,45973,45975,45977,45979,45981],{"class":107,"line":1608},[105,45952,30830],{"class":164},[105,45954,41572],{"class":115},[105,45956,161],{"class":111},[105,45958,30838],{"class":115},[105,45960,30841],{"class":5208},[105,45962,161],{"class":111},[105,45964,41545],{"class":115},[105,45966,30850],{"class":5208},[105,45968,161],{"class":111},[105,45970,41589],{"class":115},[105,45972,307],{"class":164},[105,45974,41594],{"class":115},[105,45976,30859],{"class":5208},[105,45978,161],{"class":111},[105,45980,333],{"class":164},[105,45982,122],{"class":115},[105,45984,45985,45987,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023,46025,46027],{"class":107,"line":1614},[105,45986,30830],{"class":164},[105,45988,41609],{"class":115},[105,45990,161],{"class":111},[105,45992,30838],{"class":115},[105,45994,30841],{"class":5208},[105,45996,161],{"class":111},[105,45998,41589],{"class":115},[105,46000,307],{"class":164},[105,46002,41594],{"class":115},[105,46004,30850],{"class":5208},[105,46006,161],{"class":111},[105,46008,41589],{"class":115},[105,46010,333],{"class":164},[105,46012,41594],{"class":115},[105,46014,30859],{"class":5208},[105,46016,161],{"class":111},[105,46018,187],{"class":164},[105,46020,494],{"class":115},[105,46022,30868],{"class":5208},[105,46024,161],{"class":111},[105,46026,333],{"class":164},[105,46028,122],{"class":115},[105,46030,46031],{"class":107,"line":1619},[105,46032,41654],{"class":174},[105,46034,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061,46063,46065],{"class":107,"line":1633},[105,46036,30830],{"class":164},[105,46038,41661],{"class":115},[105,46040,161],{"class":111},[105,46042,30838],{"class":115},[105,46044,30841],{"class":5208},[105,46046,161],{"class":111},[105,46048,41545],{"class":115},[105,46050,30850],{"class":5208},[105,46052,161],{"class":111},[105,46054,41678],{"class":115},[105,46056,307],{"class":164},[105,46058,41594],{"class":115},[105,46060,30859],{"class":5208},[105,46062,161],{"class":111},[105,46064,333],{"class":164},[105,46066,122],{"class":115},[105,46068,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109,46111],{"class":107,"line":1638},[105,46070,30830],{"class":164},[105,46072,41697],{"class":115},[105,46074,161],{"class":111},[105,46076,30838],{"class":115},[105,46078,30841],{"class":5208},[105,46080,161],{"class":111},[105,46082,41678],{"class":115},[105,46084,307],{"class":164},[105,46086,41594],{"class":115},[105,46088,30850],{"class":5208},[105,46090,161],{"class":111},[105,46092,41678],{"class":115},[105,46094,333],{"class":164},[105,46096,41594],{"class":115},[105,46098,30859],{"class":5208},[105,46100,161],{"class":111},[105,46102,435],{"class":164},[105,46104,494],{"class":115},[105,46106,30868],{"class":5208},[105,46108,161],{"class":111},[105,46110,193],{"class":164},[105,46112,122],{"class":115},[105,46114,46115],{"class":107,"line":1644},[105,46116,41742],{"class":174},[105,46118,46119],{"class":107,"line":1665},[105,46120,41747],{"class":174},[105,46122,46123,46125,46127,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153],{"class":107,"line":1670},[105,46124,30830],{"class":164},[105,46126,41754],{"class":115},[105,46128,161],{"class":111},[105,46130,34814],{"class":115},[105,46132,30859],{"class":5208},[105,46134,161],{"class":111},[105,46136,187],{"class":164},[105,46138,494],{"class":115},[105,46140,30914],{"class":5208},[105,46142,161],{"class":111},[105,46144,333],{"class":164},[105,46146,494],{"class":115},[105,46148,30868],{"class":5208},[105,46150,161],{"class":111},[105,46152,333],{"class":164},[105,46154,122],{"class":115},[105,46156,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179,46181,46183],{"class":107,"line":1684},[105,46158,30830],{"class":164},[105,46160,41789],{"class":115},[105,46162,161],{"class":111},[105,46164,30838],{"class":115},[105,46166,30841],{"class":5208},[105,46168,161],{"class":111},[105,46170,41545],{"class":115},[105,46172,30850],{"class":5208},[105,46174,161],{"class":111},[105,46176,41806],{"class":115},[105,46178,30859],{"class":5208},[105,46180,161],{"class":111},[105,46182,333],{"class":164},[105,46184,122],{"class":115},[105,46186,46187],{"class":107,"line":1689},[105,46188,2391],{"emptyLinePlaceholder":32},[105,46190,46191,46193,46195],{"class":107,"line":1718},[105,46192,30786],{"class":111},[105,46194,31078],{"class":1954},[105,46196,31081],{"class":115},[105,46198,46199,46201,46203,46205,46207,46209],{"class":107,"line":1723},[105,46200,41831],{"class":115},[105,46202,161],{"class":111},[105,46204,30808],{"class":164},[105,46206,35169],{"class":115},[105,46208,30808],{"class":164},[105,46210,41842],{"class":115},[105,46212,46213,46215,46217,46219,46221,46223,46225,46227,46229,46231],{"class":107,"line":1740},[105,46214,7077],{"class":115},[105,46216,161],{"class":111},[105,46218,30808],{"class":164},[105,46220,35169],{"class":115},[105,46222,30808],{"class":164},[105,46224,41857],{"class":115},[105,46226,30808],{"class":164},[105,46228,35169],{"class":115},[105,46230,30808],{"class":164},[105,46232,41866],{"class":115},[105,46234,46235,46237,46239,46241,46243,46245,46247,46249,46251,46253],{"class":107,"line":1745},[105,46236,41871],{"class":115},[105,46238,161],{"class":111},[105,46240,30808],{"class":164},[105,46242,35169],{"class":115},[105,46244,30808],{"class":164},[105,46246,41882],{"class":115},[105,46248,30808],{"class":164},[105,46250,35169],{"class":115},[105,46252,30808],{"class":164},[105,46254,41891],{"class":115},[105,46256,46257,46259,46261,46263,46265,46267,46269,46271],{"class":107,"line":1750},[105,46258,41896],{"class":115},[105,46260,161],{"class":111},[105,46262,30808],{"class":164},[105,46264,35169],{"class":115},[105,46266,30808],{"class":164},[105,46268,41907],{"class":115},[105,46270,30808],{"class":164},[105,46272,41912],{"class":115},[105,46274,46275],{"class":107,"line":1755},[105,46276,41917],{"class":174},[105,46278,46279,46281,46283,46285,46287,46289],{"class":107,"line":1769},[105,46280,14744],{"class":111},[105,46282,41924],{"class":115},[105,46284,32670],{"class":5208},[105,46286,161],{"class":111},[105,46288,333],{"class":164},[105,46290,122],{"class":115},[105,46292,46293],{"class":107,"line":1774},[105,46294,2391],{"emptyLinePlaceholder":32},[105,46296,46297],{"class":107,"line":2568},[105,46298,41945],{"class":174},[105,46300,46301,46303,46305,46307,46309,46311,46313],{"class":107,"line":2582},[105,46302,14686],{"class":111},[105,46304,41952],{"class":1954},[105,46306,116],{"class":115},[105,46308,30763],{"class":1954},[105,46310,674],{"class":115},[105,46312,30768],{"class":1954},[105,46314,30771],{"class":115},[105,46316,46317],{"class":107,"line":2590},[105,46318,41967],{"class":174},[105,46320,46321,46323,46325],{"class":107,"line":2595},[105,46322,30786],{"class":111},[105,46324,30789],{"class":164},[105,46326,41976],{"class":115},[105,46328,46329,46331,46333,46335,46337,46339],{"class":107,"line":2601},[105,46330,30802],{"class":164},[105,46332,41983],{"class":115},[105,46334,30808],{"class":164},[105,46336,30811],{"class":115},[105,46338,30814],{"class":164},[105,46340,1967],{"class":115},[105,46342,46343,46345,46347,46349],{"class":107,"line":2607},[105,46344,30830],{"class":164},[105,46346,41998],{"class":115},[105,46348,161],{"class":111},[105,46350,37994],{"class":115},[105,46352,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387,46389,46391,46393],{"class":107,"line":2612},[105,46354,37999],{"class":115},[105,46356,30841],{"class":5208},[105,46358,161],{"class":111},[105,46360,187],{"class":164},[105,46362,494],{"class":115},[105,46364,30850],{"class":5208},[105,46366,161],{"class":111},[105,46368,319],{"class":164},[105,46370,494],{"class":115},[105,46372,30859],{"class":5208},[105,46374,161],{"class":111},[105,46376,485],{"class":164},[105,46378,494],{"class":115},[105,46380,30914],{"class":5208},[105,46382,161],{"class":111},[105,46384,193],{"class":164},[105,46386,494],{"class":115},[105,46388,30868],{"class":5208},[105,46390,161],{"class":111},[105,46392,187],{"class":164},[105,46394,38032],{"class":115},[105,46396,46397],{"class":107,"line":7940},[105,46398,38037],{"class":115},[105,46400,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419,46421,46423,46425],{"class":107,"line":7964},[105,46402,38082],{"class":115},[105,46404,30859],{"class":5208},[105,46406,161],{"class":111},[105,46408,187],{"class":164},[105,46410,494],{"class":115},[105,46412,30914],{"class":5208},[105,46414,161],{"class":111},[105,46416,193],{"class":164},[105,46418,494],{"class":115},[105,46420,30868],{"class":5208},[105,46422,161],{"class":111},[105,46424,333],{"class":164},[105,46426,122],{"class":115},[105,46428,46429],{"class":107,"line":7969},[105,46430,38111],{"class":115},[105,46432,46433,46435,46437,46439],{"class":107,"line":7975},[105,46434,30830],{"class":164},[105,46436,42089],{"class":115},[105,46438,161],{"class":111},[105,46440,37994],{"class":115},[105,46442,46443,46445,46447,46449,46451,46453,46455,46457,46459,46461,46463,46465,46467],{"class":107,"line":8002},[105,46444,37999],{"class":115},[105,46446,30841],{"class":5208},[105,46448,161],{"class":111},[105,46450,319],{"class":164},[105,46452,494],{"class":115},[105,46454,30850],{"class":5208},[105,46456,161],{"class":111},[105,46458,319],{"class":164},[105,46460,494],{"class":115},[105,46462,30859],{"class":5208},[105,46464,161],{"class":111},[105,46466,333],{"class":164},[105,46468,38032],{"class":115},[105,46470,46471],{"class":107,"line":8007},[105,46472,38037],{"class":115},[105,46474,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507],{"class":107,"line":8013},[105,46476,37999],{"class":115},[105,46478,30841],{"class":5208},[105,46480,161],{"class":111},[105,46482,319],{"class":164},[105,46484,494],{"class":115},[105,46486,30850],{"class":5208},[105,46488,161],{"class":111},[105,46490,42144],{"class":164},[105,46492,494],{"class":115},[105,46494,30859],{"class":5208},[105,46496,161],{"class":111},[105,46498,187],{"class":164},[105,46500,494],{"class":115},[105,46502,30868],{"class":5208},[105,46504,161],{"class":111},[105,46506,333],{"class":164},[105,46508,38032],{"class":115},[105,46510,46511],{"class":107,"line":8025},[105,46512,38037],{"class":115},[105,46514,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537,46539],{"class":107,"line":8037},[105,46516,38082],{"class":115},[105,46518,30859],{"class":5208},[105,46520,161],{"class":111},[105,46522,187],{"class":164},[105,46524,494],{"class":115},[105,46526,30914],{"class":5208},[105,46528,161],{"class":111},[105,46530,193],{"class":164},[105,46532,494],{"class":115},[105,46534,30868],{"class":5208},[105,46536,161],{"class":111},[105,46538,333],{"class":164},[105,46540,122],{"class":115},[105,46542,46543],{"class":107,"line":8049},[105,46544,38111],{"class":115},[105,46546,46547,46549,46551,46553],{"class":107,"line":9708},[105,46548,30830],{"class":164},[105,46550,42205],{"class":115},[105,46552,161],{"class":111},[105,46554,37994],{"class":115},[105,46556,46557,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583,46585],{"class":107,"line":9733},[105,46558,42214],{"class":115},[105,46560,42144],{"class":164},[105,46562,494],{"class":115},[105,46564,319],{"class":164},[105,46566,42223],{"class":115},[105,46568,325],{"class":164},[105,46570,494],{"class":115},[105,46572,32055],{"class":164},[105,46574,42232],{"class":115},[105,46576,717],{"class":164},[105,46578,494],{"class":115},[105,46580,313],{"class":164},[105,46582,42241],{"class":115},[105,46584,313],{"class":164},[105,46586,38032],{"class":115},[105,46588,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611,46613,46615,46617],{"class":107,"line":9756},[105,46590,42214],{"class":115},[105,46592,34855],{"class":164},[105,46594,494],{"class":115},[105,46596,32055],{"class":164},[105,46598,42223],{"class":115},[105,46600,32055],{"class":164},[105,46602,494],{"class":115},[105,46604,42144],{"class":164},[105,46606,42232],{"class":115},[105,46608,313],{"class":164},[105,46610,494],{"class":115},[105,46612,325],{"class":164},[105,46614,42241],{"class":115},[105,46616,319],{"class":164},[105,46618,38032],{"class":115},[105,46620,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643,46645],{"class":107,"line":9780},[105,46622,38082],{"class":115},[105,46624,30859],{"class":5208},[105,46626,161],{"class":111},[105,46628,187],{"class":164},[105,46630,494],{"class":115},[105,46632,30914],{"class":5208},[105,46634,161],{"class":111},[105,46636,193],{"class":164},[105,46638,494],{"class":115},[105,46640,30868],{"class":5208},[105,46642,161],{"class":111},[105,46644,333],{"class":164},[105,46646,122],{"class":115},[105,46648,46649],{"class":107,"line":9785},[105,46650,38111],{"class":115},[105,46652,46653,46655,46657,46659],{"class":107,"line":9790},[105,46654,30830],{"class":164},[105,46656,42316],{"class":115},[105,46658,161],{"class":111},[105,46660,37994],{"class":115},[105,46662,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689,46691],{"class":107,"line":9795},[105,46664,42214],{"class":115},[105,46666,42327],{"class":164},[105,46668,494],{"class":115},[105,46670,42144],{"class":164},[105,46672,42223],{"class":115},[105,46674,325],{"class":164},[105,46676,494],{"class":115},[105,46678,42340],{"class":164},[105,46680,42232],{"class":115},[105,46682,717],{"class":164},[105,46684,494],{"class":115},[105,46686,723],{"class":164},[105,46688,42241],{"class":115},[105,46690,319],{"class":164},[105,46692,38032],{"class":115},[105,46694,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717,46719,46721,46723],{"class":107,"line":9804},[105,46696,42214],{"class":115},[105,46698,38442],{"class":164},[105,46700,494],{"class":115},[105,46702,21040],{"class":164},[105,46704,42223],{"class":115},[105,46706,734],{"class":164},[105,46708,494],{"class":115},[105,46710,31486],{"class":164},[105,46712,42232],{"class":115},[105,46714,916],{"class":164},[105,46716,494],{"class":115},[105,46718,319],{"class":164},[105,46720,42241],{"class":115},[105,46722,319],{"class":164},[105,46724,38032],{"class":115},[105,46726,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753,46755],{"class":107,"line":9809},[105,46728,42214],{"class":115},[105,46730,38442],{"class":164},[105,46732,494],{"class":115},[105,46734,32055],{"class":164},[105,46736,42223],{"class":115},[105,46738,32055],{"class":164},[105,46740,494],{"class":115},[105,46742,34855],{"class":164},[105,46744,42232],{"class":115},[105,46746,916],{"class":164},[105,46748,494],{"class":115},[105,46750,319],{"class":164},[105,46752,42241],{"class":115},[105,46754,319],{"class":164},[105,46756,38032],{"class":115},[105,46758,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787],{"class":107,"line":9815},[105,46760,42214],{"class":115},[105,46762,38442],{"class":164},[105,46764,494],{"class":115},[105,46766,734],{"class":164},[105,46768,42223],{"class":115},[105,46770,32055],{"class":164},[105,46772,494],{"class":115},[105,46774,42437],{"class":164},[105,46776,42232],{"class":115},[105,46778,313],{"class":164},[105,46780,494],{"class":115},[105,46782,319],{"class":164},[105,46784,42241],{"class":115},[105,46786,319],{"class":164},[105,46788,38032],{"class":115},[105,46790,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819],{"class":107,"line":9836},[105,46792,42214],{"class":115},[105,46794,42458],{"class":164},[105,46796,494],{"class":115},[105,46798,34855],{"class":164},[105,46800,42223],{"class":115},[105,46802,21040],{"class":164},[105,46804,494],{"class":115},[105,46806,42471],{"class":164},[105,46808,42232],{"class":115},[105,46810,313],{"class":164},[105,46812,494],{"class":115},[105,46814,32055],{"class":164},[105,46816,42241],{"class":115},[105,46818,32055],{"class":164},[105,46820,38032],{"class":115},[105,46822,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847],{"class":107,"line":9842},[105,46824,38082],{"class":115},[105,46826,30859],{"class":5208},[105,46828,161],{"class":111},[105,46830,187],{"class":164},[105,46832,494],{"class":115},[105,46834,30914],{"class":5208},[105,46836,161],{"class":111},[105,46838,193],{"class":164},[105,46840,494],{"class":115},[105,46842,30868],{"class":5208},[105,46844,161],{"class":111},[105,46846,333],{"class":164},[105,46848,122],{"class":115},[105,46850,46851],{"class":107,"line":9856},[105,46852,38111],{"class":115},[105,46854,46855,46857,46859,46861],{"class":107,"line":9862},[105,46856,30830],{"class":164},[105,46858,42524],{"class":115},[105,46860,161],{"class":111},[105,46862,37994],{"class":115},[105,46864,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889,46891,46893],{"class":107,"line":9889},[105,46866,42214],{"class":115},[105,46868,42535],{"class":164},[105,46870,494],{"class":115},[105,46872,34855],{"class":164},[105,46874,42223],{"class":115},[105,46876,21040],{"class":164},[105,46878,494],{"class":115},[105,46880,42471],{"class":164},[105,46882,42232],{"class":115},[105,46884,313],{"class":164},[105,46886,494],{"class":115},[105,46888,32055],{"class":164},[105,46890,42241],{"class":115},[105,46892,32055],{"class":164},[105,46894,38032],{"class":115},[105,46896,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919,46921,46923,46925],{"class":107,"line":9898},[105,46898,42214],{"class":115},[105,46900,42535],{"class":164},[105,46902,494],{"class":115},[105,46904,34925],{"class":164},[105,46906,42223],{"class":115},[105,46908,42144],{"class":164},[105,46910,494],{"class":115},[105,46912,34925],{"class":164},[105,46914,42232],{"class":115},[105,46916,723],{"class":164},[105,46918,494],{"class":115},[105,46920,32055],{"class":164},[105,46922,42241],{"class":115},[105,46924,32055],{"class":164},[105,46926,38032],{"class":115},[105,46928,46929,46931,46933,46935,46937],{"class":107,"line":9904},[105,46930,42598],{"class":115},[105,46932,333],{"class":164},[105,46934,494],{"class":115},[105,46936,333],{"class":164},[105,46938,42607],{"class":115},[105,46940,46941],{"class":107,"line":9912},[105,46942,38775],{"class":115},[105,46944,46945,46947,46949,46951,46953],{"class":107,"line":9917},[105,46946,38780],{"class":115},[105,46948,42618],{"class":164},[105,46950,494],{"class":115},[105,46952,193],{"class":164},[105,46954,122],{"class":115},[105,46956,46957],{"class":107,"line":16596},[105,46958,38111],{"class":115},[105,46960,46961],{"class":107,"line":16602},[105,46962,42633],{"class":174},[105,46964,46965,46967,46969,46971,46973],{"class":107,"line":16625},[105,46966,3394],{"class":111},[105,46968,38853],{"class":115},[105,46970,26028],{"class":111},[105,46972,38858],{"class":164},[105,46974,38861],{"class":115},[105,46976,46977,46979,46981],{"class":107,"line":16631},[105,46978,4633],{"class":111},[105,46980,38873],{"class":164},[105,46982,38876],{"class":115},[105,46984,46985,46987,46989,46991,46993,46995,46997,46999,47001],{"class":107,"line":16654},[105,46986,38886],{"class":115},[105,46988,42660],{"class":5208},[105,46990,161],{"class":111},[105,46992,42665],{"class":220},[105,46994,494],{"class":115},[105,46996,38889],{"class":5208},[105,46998,161],{"class":111},[105,47000,38894],{"class":220},[105,47002,122],{"class":115},[105,47004,47005],{"class":107,"line":16668},[105,47006,42680],{"class":174},[105,47008,47009],{"class":107,"line":16688},[105,47010,42685],{"class":174},[105,47012,47013],{"class":107,"line":16694},[105,47014,42690],{"class":174},[105,47016,47017],{"class":107,"line":16705},[105,47018,42695],{"class":174},[105,47020,47021],{"class":107,"line":16728},[105,47022,42700],{"class":174},[105,47024,47025],{"class":107,"line":16750},[105,47026,42705],{"class":174},[105,47028,47029,47031,47033,47035,47037,47039],{"class":107,"line":16755},[105,47030,38906],{"class":111},[105,47032,38909],{"class":115},[105,47034,38912],{"class":111},[105,47036,38915],{"class":111},[105,47038,38918],{"class":164},[105,47040,3730],{"class":115},[105,47042,47043,47045,47047],{"class":107,"line":16761},[105,47044,38930],{"class":115},[105,47046,307],{"class":164},[105,47048,122],{"class":115},[105,47050,47051,47053,47055],{"class":107,"line":16775},[105,47052,42732],{"class":111},[105,47054,38873],{"class":164},[105,47056,38949],{"class":115},[105,47058,47059,47061,47063,47065,47067],{"class":107,"line":16788},[105,47060,42741],{"class":115},[105,47062,307],{"class":164},[105,47064,494],{"class":115},[105,47066,38971],{"class":164},[105,47068,122],{"class":115},[105,47070,47071,47073,47075,47077,47079,47081],{"class":107,"line":16793},[105,47072,42754],{"class":111},[105,47074,38909],{"class":115},[105,47076,38912],{"class":111},[105,47078,38915],{"class":111},[105,47080,38918],{"class":164},[105,47082,3730],{"class":115},[105,47084,47085,47087,47089],{"class":107,"line":16807},[105,47086,42769],{"class":115},[105,47088,307],{"class":164},[105,47090,122],{"class":115},[105,47092,47093],{"class":107,"line":16812},[105,47094,35150],{"class":174},[105,47096,47097,47099,47101],{"class":107,"line":16818},[105,47098,30786],{"class":111},[105,47100,31078],{"class":1954},[105,47102,31081],{"class":115},[105,47104,47105,47107,47109,47111],{"class":107,"line":16823},[105,47106,31086],{"class":115},[105,47108,161],{"class":111},[105,47110,30808],{"class":164},[105,47112,42796],{"class":115},[105,47114,47115,47117,47119,47121],{"class":107,"line":16837},[105,47116,31086],{"class":115},[105,47118,161],{"class":111},[105,47120,30808],{"class":164},[105,47122,42807],{"class":115},[105,47124,47125,47127,47129,47131],{"class":107,"line":16842},[105,47126,31086],{"class":115},[105,47128,161],{"class":111},[105,47130,30808],{"class":164},[105,47132,42818],{"class":115},[105,47134,47135,47137,47139,47141],{"class":107,"line":16847},[105,47136,31086],{"class":115},[105,47138,161],{"class":111},[105,47140,30808],{"class":164},[105,47142,42829],{"class":115},[105,47144,47145,47147,47149,47151],{"class":107,"line":16861},[105,47146,31086],{"class":115},[105,47148,161],{"class":111},[105,47150,30808],{"class":164},[105,47152,42840],{"class":115},[105,47154,47155,47157],{"class":107,"line":16873},[105,47156,14744],{"class":111},[105,47158,31194],{"class":115},[105,47160,47161],{"class":107,"line":16878},[105,47162,2391],{"emptyLinePlaceholder":32},[105,47164,47165],{"class":107,"line":16891},[105,47166,42855],{"class":174},[105,47168,47169,47171,47173,47175,47177],{"class":107,"line":16896},[105,47170,1522],{"class":111},[105,47172,31205],{"class":164},[105,47174,2940],{"class":111},[105,47176,31210],{"class":220},[105,47178,3730],{"class":115},[105,47180,47181,47183,47185,47187,47189,47191,47193,47195,47197],{"class":107,"line":16901},[105,47182,31222],{"class":115},[105,47184,161],{"class":111},[105,47186,30436],{"class":115},[105,47188,31229],{"class":220},[105,47190,1695],{"class":111},[105,47192,31234],{"class":115},[105,47194,1692],{"class":111},[105,47196,30461],{"class":220},[105,47198,122],{"class":115},[105,47200,47201,47203,47205],{"class":107,"line":16906},[105,47202,31274],{"class":115},[105,47204,161],{"class":111},[105,47206,42896],{"class":115},[105,47208,47209,47211,47213,47215,47217,47219,47221,47223],{"class":107,"line":16919},[105,47210,31284],{"class":164},[105,47212,31287],{"class":115},[105,47214,333],{"class":164},[105,47216,494],{"class":115},[105,47218,31486],{"class":164},[105,47220,494],{"class":115},[105,47222,31486],{"class":164},[105,47224,31300],{"class":115},[21990,47226,47228],{"id":47227},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47230,47231],{},"计算图片的均值与方差，用于训练中归一化处理操作",[96,47233,47235],{"className":30363,"code":47234,"language":30365,"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",[102,47236,47237,47242,47255,47260,47266,47271,47281,47285,47290,47300,47304,47309,47319,47336,47340,47345,47357,47369,47400,47409,47419,47429,47433,47438,47453,47457,47462,47467,47472,47482,47487,47512,47516,47521,47536,47540,47553,47557,47562,47567,47572,47577,47582,47592,47602,47625,47633,47641,47649,47653,47665,47669,47674,47678,47682,47689,47709,47733,47740,47754,47759,47764,47768,47782,47786,47798],{"__ignoreMap":22},[105,47238,47239],{"class":107,"line":108},[105,47240,47241],{"class":174},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[105,47243,47244,47246,47249,47252],{"class":107,"line":28},[105,47245,30722],{"class":111},[105,47247,47248],{"class":164}," PIL",[105,47250,47251],{"class":111}," import",[105,47253,47254],{"class":115}," Image\n",[105,47256,47257],{"class":107,"line":1171},[105,47258,47259],{"class":174},"# os 用来处理文件夹和文件路径\n",[105,47261,47262,47264],{"class":107,"line":1186},[105,47263,30377],{"class":111},[105,47265,45290],{"class":115},[105,47267,47268],{"class":107,"line":1192},[105,47269,47270],{"class":174},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[105,47272,47273,47275,47277,47279],{"class":107,"line":1206},[105,47274,30377],{"class":111},[105,47276,31365],{"class":115},[105,47278,31368],{"class":111},[105,47280,31371],{"class":115},[105,47282,47283],{"class":107,"line":1212},[105,47284,2391],{"emptyLinePlaceholder":32},[105,47286,47287],{"class":107,"line":1303},[105,47288,47289],{"class":174},"# 文件夹路径，包含所有图片文件\n",[105,47291,47292,47295,47297],{"class":107,"line":1309},[105,47293,47294],{"class":115},"folder_path ",[105,47296,161],{"class":111},[105,47298,47299],{"class":220}," 'data_cat_dog'\n",[105,47301,47302],{"class":107,"line":1321},[105,47303,2391],{"emptyLinePlaceholder":32},[105,47305,47306],{"class":107,"line":1603},[105,47307,47308],{"class":174},"# 初始化累积变量\n",[105,47310,47311,47314,47316],{"class":107,"line":1608},[105,47312,47313],{"class":115},"total_pixels ",[105,47315,161],{"class":111},[105,47317,47318],{"class":164}," 0\n",[105,47320,47321,47324,47326,47329,47331,47333],{"class":107,"line":1614},[105,47322,47323],{"class":115},"sum_normalized_pixel_values ",[105,47325,161],{"class":111},[105,47327,47328],{"class":115}," np.zeros(",[105,47330,187],{"class":164},[105,47332,45793],{"class":115},[105,47334,47335],{"class":174},"# 如果是RGB图像，需要三个通道的均值和方差\n",[105,47337,47338],{"class":107,"line":1619},[105,47339,2391],{"emptyLinePlaceholder":32},[105,47341,47342],{"class":107,"line":1633},[105,47343,47344],{"class":174},"# 遍历文件夹中的图片文件\n",[105,47346,47347,47349,47352,47354],{"class":107,"line":1638},[105,47348,3016],{"class":111},[105,47350,47351],{"class":115}," root, dirs, files ",[105,47353,26028],{"class":111},[105,47355,47356],{"class":115}," os.walk(folder_path):\n",[105,47358,47359,47361,47364,47366],{"class":107,"line":1644},[105,47360,3192],{"class":111},[105,47362,47363],{"class":115}," filename ",[105,47365,26028],{"class":111},[105,47367,47368],{"class":115}," files:\n",[105,47370,47371,47373,47376,47379,47381,47384,47386,47389,47391,47394,47397],{"class":107,"line":1665},[105,47372,2488],{"class":111},[105,47374,47375],{"class":115}," filename.endswith((",[105,47377,47378],{"class":220},"'.jpg'",[105,47380,12427],{"class":115},[105,47382,47383],{"class":220},"'.jpeg'",[105,47385,12427],{"class":115},[105,47387,47388],{"class":220},"'.png'",[105,47390,12427],{"class":115},[105,47392,47393],{"class":220},"'.bmp'",[105,47395,47396],{"class":115},")):  ",[105,47398,47399],{"class":174},"# 可根据实际情况添加其他格式\n",[105,47401,47402,47404,47406],{"class":107,"line":1670},[105,47403,45658],{"class":115},[105,47405,161],{"class":111},[105,47407,47408],{"class":115}," os.path.join(root, filename)\n",[105,47410,47411,47414,47416],{"class":107,"line":1684},[105,47412,47413],{"class":115},"            image ",[105,47415,161],{"class":111},[105,47417,47418],{"class":115}," Image.open(image_path)\n",[105,47420,47421,47424,47426],{"class":107,"line":1689},[105,47422,47423],{"class":115},"            image_array ",[105,47425,161],{"class":111},[105,47427,47428],{"class":115}," np.array(image)\n",[105,47430,47431],{"class":107,"line":1718},[105,47432,2391],{"emptyLinePlaceholder":32},[105,47434,47435],{"class":107,"line":1723},[105,47436,47437],{"class":174},"            # 归一化像素值到0-1之间\n",[105,47439,47440,47443,47445,47448,47450],{"class":107,"line":1740},[105,47441,47442],{"class":115},"            normalized_image_array ",[105,47444,161],{"class":111},[105,47446,47447],{"class":115}," image_array ",[105,47449,700],{"class":111},[105,47451,47452],{"class":164}," 255.0\n",[105,47454,47455],{"class":107,"line":1745},[105,47456,2391],{"emptyLinePlaceholder":32},[105,47458,47459],{"class":107,"line":1750},[105,47460,47461],{"class":174},"            # print(image_path)\n",[105,47463,47464],{"class":107,"line":1755},[105,47465,47466],{"class":174},"            # print(normalized_image_array.shape)\n",[105,47468,47469],{"class":107,"line":1769},[105,47470,47471],{"class":174},"            # 累积归一化后的像素值和像素数量\n",[105,47473,47474,47477,47479],{"class":107,"line":1774},[105,47475,47476],{"class":115},"            total_pixels ",[105,47478,9469],{"class":111},[105,47480,47481],{"class":115}," normalized_image_array.size\n",[105,47483,47484],{"class":107,"line":2568},[105,47485,47486],{"class":174},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[105,47488,47489,47492,47494,47497,47500,47502,47504,47506,47508,47510],{"class":107,"line":2582},[105,47490,47491],{"class":115},"            sum_normalized_pixel_values ",[105,47493,9469],{"class":111},[105,47495,47496],{"class":115}," np.sum(normalized_image_array, ",[105,47498,47499],{"class":5208},"axis",[105,47501,161],{"class":111},[105,47503,116],{"class":115},[105,47505,307],{"class":164},[105,47507,12427],{"class":115},[105,47509,333],{"class":164},[105,47511,30482],{"class":115},[105,47513,47514],{"class":107,"line":2590},[105,47515,2391],{"emptyLinePlaceholder":32},[105,47517,47518],{"class":107,"line":2595},[105,47519,47520],{"class":174},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[105,47522,47523,47526,47528,47531,47533],{"class":107,"line":2601},[105,47524,47525],{"class":115},"mean ",[105,47527,161],{"class":111},[105,47529,47530],{"class":115}," sum_normalized_pixel_values ",[105,47532,700],{"class":111},[105,47534,47535],{"class":115}," total_pixels\n",[105,47537,47538],{"class":107,"line":2607},[105,47539,2391],{"emptyLinePlaceholder":32},[105,47541,47542,47545,47547,47549,47551],{"class":107,"line":2612},[105,47543,47544],{"class":115},"sum_squared_diff ",[105,47546,161],{"class":111},[105,47548,47328],{"class":115},[105,47550,187],{"class":164},[105,47552,122],{"class":115},[105,47554,47555],{"class":107,"line":7940},[105,47556,2391],{"emptyLinePlaceholder":32},[105,47558,47559],{"class":107,"line":7964},[105,47560,47561],{"class":174},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[105,47563,47564],{"class":107,"line":7969},[105,47565,47566],{"class":174},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[105,47568,47569],{"class":107,"line":7975},[105,47570,47571],{"class":174},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[105,47573,47574],{"class":107,"line":8002},[105,47575,47576],{"class":174},"# Image.open(image_path)：打开图片\n",[105,47578,47579],{"class":107,"line":8007},[105,47580,47581],{"class":174},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[105,47583,47584,47586,47588,47590],{"class":107,"line":8013},[105,47585,3016],{"class":111},[105,47587,47351],{"class":115},[105,47589,26028],{"class":111},[105,47591,47356],{"class":115},[105,47593,47594,47596,47598,47600],{"class":107,"line":8025},[105,47595,3192],{"class":111},[105,47597,47363],{"class":115},[105,47599,26028],{"class":111},[105,47601,47368],{"class":115},[105,47603,47604,47606,47608,47610,47612,47614,47616,47618,47620,47622],{"class":107,"line":8037},[105,47605,2488],{"class":111},[105,47607,47375],{"class":115},[105,47609,47378],{"class":220},[105,47611,12427],{"class":115},[105,47613,47383],{"class":220},[105,47615,12427],{"class":115},[105,47617,47388],{"class":220},[105,47619,12427],{"class":115},[105,47621,47393],{"class":220},[105,47623,47624],{"class":115},")):\n",[105,47626,47627,47629,47631],{"class":107,"line":8049},[105,47628,45658],{"class":115},[105,47630,161],{"class":111},[105,47632,47408],{"class":115},[105,47634,47635,47637,47639],{"class":107,"line":9708},[105,47636,47413],{"class":115},[105,47638,161],{"class":111},[105,47640,47418],{"class":115},[105,47642,47643,47645,47647],{"class":107,"line":9733},[105,47644,47423],{"class":115},[105,47646,161],{"class":111},[105,47648,47428],{"class":115},[105,47650,47651],{"class":107,"line":9756},[105,47652,47437],{"class":174},[105,47654,47655,47657,47659,47661,47663],{"class":107,"line":9780},[105,47656,47442],{"class":115},[105,47658,161],{"class":111},[105,47660,47447],{"class":115},[105,47662,700],{"class":111},[105,47664,47452],{"class":164},[105,47666,47667],{"class":107,"line":9785},[105,47668,47466],{"class":174},[105,47670,47671],{"class":107,"line":9790},[105,47672,47673],{"class":174},"            # print(mean.shape)\n",[105,47675,47676],{"class":107,"line":9795},[105,47677,47461],{"class":174},[105,47679,47680],{"class":107,"line":9804},[105,47681,2391],{"emptyLinePlaceholder":32},[105,47683,47684,47687],{"class":107,"line":9809},[105,47685,47686],{"class":111},"            try",[105,47688,3730],{"class":115},[105,47690,47691,47694,47696,47699,47701,47704,47706],{"class":107,"line":9815},[105,47692,47693],{"class":115},"                diff ",[105,47695,161],{"class":111},[105,47697,47698],{"class":115}," (normalized_image_array ",[105,47700,648],{"class":111},[105,47702,47703],{"class":115}," mean) ",[105,47705,10653],{"class":111},[105,47707,47708],{"class":164}," 2\n",[105,47710,47711,47714,47716,47719,47721,47723,47725,47727,47729,47731],{"class":107,"line":9836},[105,47712,47713],{"class":115},"                sum_squared_diff ",[105,47715,9469],{"class":111},[105,47717,47718],{"class":115}," np.sum(diff, ",[105,47720,47499],{"class":5208},[105,47722,161],{"class":111},[105,47724,116],{"class":115},[105,47726,307],{"class":164},[105,47728,12427],{"class":115},[105,47730,333],{"class":164},[105,47732,30482],{"class":115},[105,47734,47735,47738],{"class":107,"line":9842},[105,47736,47737],{"class":111},"            except",[105,47739,3730],{"class":115},[105,47741,47742,47745,47747,47749,47752],{"class":107,"line":9856},[105,47743,47744],{"class":164},"                print",[105,47746,116],{"class":115},[105,47748,168],{"class":111},[105,47750,47751],{"class":220},"\"捕获到自定义异常\"",[105,47753,122],{"class":115},[105,47755,47756],{"class":107,"line":9862},[105,47757,47758],{"class":174},"            # diff = (normalized_image_array - mean) ** 2\n",[105,47760,47761],{"class":107,"line":9889},[105,47762,47763],{"class":174},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[105,47765,47766],{"class":107,"line":9898},[105,47767,2391],{"emptyLinePlaceholder":32},[105,47769,47770,47773,47775,47778,47780],{"class":107,"line":9904},[105,47771,47772],{"class":115},"variance ",[105,47774,161],{"class":111},[105,47776,47777],{"class":115}," sum_squared_diff ",[105,47779,700],{"class":111},[105,47781,47535],{"class":115},[105,47783,47784],{"class":107,"line":9912},[105,47785,2391],{"emptyLinePlaceholder":32},[105,47787,47788,47790,47792,47795],{"class":107,"line":9917},[105,47789,30400],{"class":164},[105,47791,116],{"class":115},[105,47793,47794],{"class":220},"\"Mean:\"",[105,47796,47797],{"class":115},", mean)\n",[105,47799,47800,47802,47804,47807],{"class":107,"line":16596},[105,47801,30400],{"class":164},[105,47803,116],{"class":115},[105,47805,47806],{"class":220},"\"Variance:\"",[105,47808,47809],{"class":115},", variance)\n",[96,47811,47813],{"className":30363,"code":47812,"language":30365,"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",[102,47814,47815,47821,47827,47837,47843,47853,47867,47877,47887,47897,47901,47911,47921,47925,47929,47937,47942,47947,47966,47970,47975,47980,47985,47990,48031,48036,48046,48051,48064,48069,48074,48079,48084,48089,48093,48098,48103,48125,48129,48161,48175,48185,48195,48199,48209,48223,48233,48243,48253,48259,48263,48267,48271,48275,48279,48287,48307,48311,48315,48319,48323,48339,48343,48347,48355,48359,48363,48371,48375,48379,48383,48391,48395,48399,48403,48411,48415,48423,48427,48435,48439,48447,48451,48459,48463,48467,48475,48479,48483,48495,48519,48533,48537,48541,48545,48553,48557,48565,48569,48577,48581,48589,48593,48601,48605,48613,48617,48629,48633,48641,48645,48653,48657,48661,48665,48669,48677,48681,48697,48701,48709,48713,48717,48721,48725,48729,48733,48737,48753,48757,48769,48773,48785,48789,48801,48805,48813,48817,48825,48829,48833,48837,48843,48847,48855,48859,48875,48879,48887,48891,48907,48919,48923,48935,48939,48943,48951,48955,48959,48967,48971,48979,48983,48991,48995,48999,49041,49083,49087,49091,49107,49111,49127,49131,49135,49143,49147,49151,49163,49201,49205,49209,49217,49221,49235,49245,49251,49257,49263,49269,49273,49277,49283,49287,49291,49299,49303,49321,49325,49329,49333,49349,49353,49357,49361,49365,49369,49389,49409,49413,49417,49421,49429,49437,49441,49457,49477,49497,49501,49506,49515,49524,49529,49534,49539,49552,49557,49566,49575,49592],{"__ignoreMap":22},[105,47816,47817,47819],{"class":107,"line":108},[105,47818,30377],{"class":111},[105,47820,31807],{"class":115},[105,47822,47823,47825],{"class":107,"line":28},[105,47824,30377],{"class":111},[105,47826,31814],{"class":115},[105,47828,47829,47831,47833,47835],{"class":107,"line":1171},[105,47830,30377],{"class":111},[105,47832,31825],{"class":115},[105,47834,31368],{"class":111},[105,47836,31830],{"class":115},[105,47838,47839,47841],{"class":107,"line":1186},[105,47840,30377],{"class":111},[105,47842,30380],{"class":115},[105,47844,47845,47847,47849,47851],{"class":107,"line":1192},[105,47846,30722],{"class":111},[105,47848,31400],{"class":115},[105,47850,30377],{"class":111},[105,47852,31847],{"class":115},[105,47854,47855,47857,47859,47861,47864],{"class":107,"line":1206},[105,47856,30722],{"class":111},[105,47858,31353],{"class":115},[105,47860,30377],{"class":111},[105,47862,47863],{"class":115}," ImageFolder ",[105,47865,47866],{"class":174},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[105,47868,47869,47871,47873,47875],{"class":107,"line":1212},[105,47870,30722],{"class":111},[105,47872,31383],{"class":115},[105,47874,30377],{"class":111},[105,47876,31388],{"class":115},[105,47878,47879,47881,47883,47885],{"class":107,"line":1303},[105,47880,30377],{"class":111},[105,47882,31400],{"class":115},[105,47884,31368],{"class":111},[105,47886,31405],{"class":115},[105,47888,47889,47891,47893,47895],{"class":107,"line":1309},[105,47890,30377],{"class":111},[105,47892,31417],{"class":115},[105,47894,31368],{"class":111},[105,47896,31422],{"class":115},[105,47898,47899],{"class":107,"line":1321},[105,47900,31892],{"class":174},[105,47902,47903,47905,47907,47909],{"class":107,"line":1603},[105,47904,30722],{"class":111},[105,47906,31899],{"class":115},[105,47908,30377],{"class":111},[105,47910,43016],{"class":115},[105,47912,47913,47915,47917,47919],{"class":107,"line":1608},[105,47914,30722],{"class":111},[105,47916,30725],{"class":115},[105,47918,30377],{"class":111},[105,47920,30730],{"class":115},[105,47922,47923],{"class":107,"line":1614},[105,47924,2391],{"emptyLinePlaceholder":32},[105,47926,47927],{"class":107,"line":1619},[105,47928,31927],{"class":174},[105,47930,47931,47933,47935],{"class":107,"line":1633},[105,47932,31932],{"class":111},[105,47934,31935],{"class":1954},[105,47936,31938],{"class":115},[105,47938,47939],{"class":107,"line":1638},[105,47940,47941],{"class":174},"    # 导入自己的数据集，并进行数据处理\n",[105,47943,47944],{"class":107,"line":1644},[105,47945,47946],{"class":174},"    # 定义数据集的路径\n",[105,47948,47949,47952,47954,47956,47958,47960,47964],{"class":107,"line":1665},[105,47950,47951],{"class":164},"    ROOT_PATH",[105,47953,161],{"class":111},[105,47955,786],{"class":111},[105,47957,367],{"class":220},[105,47959,674],{"class":164},[105,47961,47963],{"class":47962},"sA_wV","\u002Fdata\u002Ftrain",[105,47965,25118],{"class":220},[105,47967,47968],{"class":107,"line":1670},[105,47969,2391],{"emptyLinePlaceholder":32},[105,47971,47972],{"class":107,"line":1684},[105,47973,47974],{"class":174},"    # 定义归一化方法\n",[105,47976,47977],{"class":107,"line":1689},[105,47978,47979],{"class":174},"    # 这里需要先计算一下数据集的均值和方差\n",[105,47981,47982],{"class":107,"line":1718},[105,47983,47984],{"class":174},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[105,47986,47987],{"class":107,"line":1723},[105,47988,47989],{"class":174},"    # 第一个参数是均值，第二个参数是方差\n",[105,47991,47992,47995,47997,48000,48003,48005,48008,48010,48013,48016,48019,48021,48024,48026,48029],{"class":107,"line":1740},[105,47993,47994],{"class":115},"    normalize",[105,47996,161],{"class":111},[105,47998,47999],{"class":115},"transforms.Normalize([",[105,48001,48002],{"class":164},"0.162",[105,48004,494],{"class":115},[105,48006,48007],{"class":164},"0.151",[105,48009,494],{"class":115},[105,48011,48012],{"class":164},"0.138",[105,48014,48015],{"class":115},"],[",[105,48017,48018],{"class":164},"0.058",[105,48020,494],{"class":115},[105,48022,48023],{"class":164},"0.052",[105,48025,494],{"class":115},[105,48027,48028],{"class":164},"0.048",[105,48030,4648],{"class":115},[105,48032,48033],{"class":107,"line":1745},[105,48034,48035],{"class":174},"    # 定义数据集处理方法变量\n",[105,48037,48038,48041,48043],{"class":107,"line":1750},[105,48039,48040],{"class":115},"    train_transform",[105,48042,161],{"class":111},[105,48044,48045],{"class":115},"transforms.Compose([\n",[105,48047,48048],{"class":107,"line":1755},[105,48049,48050],{"class":174},"        # 调整图像大小为224*224\n",[105,48052,48053,48056,48058,48060,48062],{"class":107,"line":1769},[105,48054,48055],{"class":115},"        transforms.Resize((",[105,48057,31486],{"class":164},[105,48059,494],{"class":115},[105,48061,31486],{"class":164},[105,48063,42607],{"class":115},[105,48065,48066],{"class":107,"line":1774},[105,48067,48068],{"class":174},"        # 将图像转换为张量\n",[105,48070,48071],{"class":107,"line":2568},[105,48072,48073],{"class":115},"        transforms.ToTensor(),\n",[105,48075,48076],{"class":107,"line":2582},[105,48077,48078],{"class":115},"        normalize])\n",[105,48080,48081],{"class":107,"line":2590},[105,48082,48083],{"class":174},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[105,48085,48086],{"class":107,"line":2595},[105,48087,48088],{"class":174},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[105,48090,48091],{"class":107,"line":2601},[105,48092,2391],{"emptyLinePlaceholder":32},[105,48094,48095],{"class":107,"line":2607},[105,48096,48097],{"class":174},"    # 加载数据集\n",[105,48099,48100],{"class":107,"line":2612},[105,48101,48102],{"class":174},"    # 传入数据集路径与处理方法\n",[105,48104,48105,48107,48109,48112,48115,48117,48120,48122],{"class":107,"line":7940},[105,48106,31943],{"class":115},[105,48108,161],{"class":111},[105,48110,48111],{"class":115},"ImageFolder(",[105,48113,48114],{"class":164},"ROOT_PATH",[105,48116,494],{"class":115},[105,48118,48119],{"class":5208},"transform",[105,48121,161],{"class":111},[105,48123,48124],{"class":115},"train_transform)\n",[105,48126,48127],{"class":107,"line":7964},[105,48128,2391],{"emptyLinePlaceholder":32},[105,48130,48131,48133,48135,48137,48139,48141,48143,48145,48147,48149,48151,48153,48155,48157,48159],{"class":107,"line":7969},[105,48132,31995],{"class":115},[105,48134,161],{"class":111},[105,48136,32000],{"class":115},[105,48138,32003],{"class":164},[105,48140,116],{"class":115},[105,48142,32008],{"class":164},[105,48144,571],{"class":111},[105,48146,7350],{"class":164},[105,48148,32015],{"class":115},[105,48150,32003],{"class":164},[105,48152,116],{"class":115},[105,48154,32022],{"class":164},[105,48156,571],{"class":111},[105,48158,7350],{"class":164},[105,48160,32029],{"class":115},[105,48162,48163,48165,48167,48169,48171,48173],{"class":107,"line":7975},[105,48164,32034],{"class":115},[105,48166,161],{"class":111},[105,48168,32039],{"class":115},[105,48170,31522],{"class":5208},[105,48172,161],{"class":111},[105,48174,31527],{"class":115},[105,48176,48177,48179,48181,48183],{"class":107,"line":8002},[105,48178,32050],{"class":5208},[105,48180,161],{"class":111},[105,48182,313],{"class":164},[105,48184,31451],{"class":115},[105,48186,48187,48189,48191,48193],{"class":107,"line":8007},[105,48188,32062],{"class":5208},[105,48190,161],{"class":111},[105,48192,31461],{"class":164},[105,48194,31451],{"class":115},[105,48196,48197],{"class":107,"line":8013},[105,48198,32073],{"class":174},[105,48200,48201,48203,48205,48207],{"class":107,"line":8025},[105,48202,32078],{"class":5208},[105,48204,161],{"class":111},[105,48206,511],{"class":164},[105,48208,122],{"class":115},[105,48210,48211,48213,48215,48217,48219,48221],{"class":107,"line":8037},[105,48212,32089],{"class":115},[105,48214,161],{"class":111},[105,48216,31519],{"class":115},[105,48218,31522],{"class":5208},[105,48220,161],{"class":111},[105,48222,32100],{"class":115},[105,48224,48225,48227,48229,48231],{"class":107,"line":8049},[105,48226,32105],{"class":5208},[105,48228,161],{"class":111},[105,48230,313],{"class":164},[105,48232,31451],{"class":115},[105,48234,48235,48237,48239,48241],{"class":107,"line":9708},[105,48236,32116],{"class":5208},[105,48238,161],{"class":111},[105,48240,31461],{"class":164},[105,48242,31451],{"class":115},[105,48244,48245,48247,48249,48251],{"class":107,"line":9733},[105,48246,32127],{"class":5208},[105,48248,161],{"class":111},[105,48250,511],{"class":164},[105,48252,122],{"class":115},[105,48254,48255,48257],{"class":107,"line":9756},[105,48256,4081],{"class":111},[105,48258,32140],{"class":115},[105,48260,48261],{"class":107,"line":9780},[105,48262,2391],{"emptyLinePlaceholder":32},[105,48264,48265],{"class":107,"line":9785},[105,48266,32149],{"class":174},[105,48268,48269],{"class":107,"line":9790},[105,48270,32154],{"class":174},[105,48272,48273],{"class":107,"line":9795},[105,48274,2391],{"emptyLinePlaceholder":32},[105,48276,48277],{"class":107,"line":9804},[105,48278,32163],{"class":174},[105,48280,48281,48283,48285],{"class":107,"line":9809},[105,48282,31932],{"class":111},[105,48284,32170],{"class":1954},[105,48286,32173],{"class":115},[105,48288,48289,48291,48293,48295,48297,48299,48301,48303,48305],{"class":107,"line":9815},[105,48290,31222],{"class":115},[105,48292,161],{"class":111},[105,48294,30436],{"class":115},[105,48296,31229],{"class":220},[105,48298,1695],{"class":111},[105,48300,31234],{"class":115},[105,48302,1692],{"class":111},[105,48304,32192],{"class":220},[105,48306,122],{"class":115},[105,48308,48309],{"class":107,"line":9836},[105,48310,2391],{"emptyLinePlaceholder":32},[105,48312,48313],{"class":107,"line":9842},[105,48314,32207],{"class":174},[105,48316,48317],{"class":107,"line":9856},[105,48318,32212],{"class":174},[105,48320,48321],{"class":107,"line":9862},[105,48322,32217],{"class":174},[105,48324,48325,48327,48329,48331,48333,48335,48337],{"class":107,"line":9889},[105,48326,32222],{"class":115},[105,48328,161],{"class":111},[105,48330,32227],{"class":115},[105,48332,32230],{"class":5208},[105,48334,161],{"class":111},[105,48336,32235],{"class":164},[105,48338,122],{"class":115},[105,48340,48341],{"class":107,"line":9898},[105,48342,2391],{"emptyLinePlaceholder":32},[105,48344,48345],{"class":107,"line":9904},[105,48346,32246],{"class":174},[105,48348,48349,48351,48353],{"class":107,"line":9912},[105,48350,32251],{"class":115},[105,48352,161],{"class":111},[105,48354,32256],{"class":115},[105,48356,48357],{"class":107,"line":9917},[105,48358,2391],{"emptyLinePlaceholder":32},[105,48360,48361],{"class":107,"line":16596},[105,48362,32265],{"class":174},[105,48364,48365,48367,48369],{"class":107,"line":16602},[105,48366,31274],{"class":115},[105,48368,161],{"class":111},[105,48370,32274],{"class":115},[105,48372,48373],{"class":107,"line":16625},[105,48374,32279],{"class":174},[105,48376,48377],{"class":107,"line":16631},[105,48378,32284],{"class":174},[105,48380,48381],{"class":107,"line":16654},[105,48382,32289],{"class":174},[105,48384,48385,48387,48389],{"class":107,"line":16668},[105,48386,32294],{"class":115},[105,48388,161],{"class":111},[105,48390,32299],{"class":115},[105,48392,48393],{"class":107,"line":16688},[105,48394,2391],{"emptyLinePlaceholder":32},[105,48396,48397],{"class":107,"line":16694},[105,48398,32312],{"class":174},[105,48400,48401],{"class":107,"line":16705},[105,48402,32317],{"class":174},[105,48404,48405,48407,48409],{"class":107,"line":16728},[105,48406,32322],{"class":115},[105,48408,161],{"class":111},[105,48410,32327],{"class":164},[105,48412,48413],{"class":107,"line":16750},[105,48414,32332],{"class":174},[105,48416,48417,48419,48421],{"class":107,"line":16755},[105,48418,32337],{"class":115},[105,48420,161],{"class":111},[105,48422,32342],{"class":115},[105,48424,48425],{"class":107,"line":16761},[105,48426,32347],{"class":174},[105,48428,48429,48431,48433],{"class":107,"line":16775},[105,48430,32352],{"class":115},[105,48432,161],{"class":111},[105,48434,32342],{"class":115},[105,48436,48437],{"class":107,"line":16788},[105,48438,32361],{"class":174},[105,48440,48441,48443,48445],{"class":107,"line":16793},[105,48442,32366],{"class":115},[105,48444,161],{"class":111},[105,48446,32342],{"class":115},[105,48448,48449],{"class":107,"line":16807},[105,48450,32375],{"class":174},[105,48452,48453,48455,48457],{"class":107,"line":16812},[105,48454,32380],{"class":115},[105,48456,161],{"class":111},[105,48458,32342],{"class":115},[105,48460,48461],{"class":107,"line":16818},[105,48462,2391],{"emptyLinePlaceholder":32},[105,48464,48465],{"class":107,"line":16823},[105,48466,32393],{"class":174},[105,48468,48469,48471,48473],{"class":107,"line":16837},[105,48470,32398],{"class":115},[105,48472,161],{"class":111},[105,48474,32403],{"class":115},[105,48476,48477],{"class":107,"line":16842},[105,48478,2391],{"emptyLinePlaceholder":32},[105,48480,48481],{"class":107,"line":16847},[105,48482,32416],{"class":174},[105,48484,48485,48487,48489,48491,48493],{"class":107,"line":16861},[105,48486,3192],{"class":111},[105,48488,32423],{"class":115},[105,48490,26028],{"class":111},[105,48492,32428],{"class":164},[105,48494,32431],{"class":115},[105,48496,48497,48499,48501,48503,48505,48507,48509,48511,48513,48515,48517],{"class":107,"line":16873},[105,48498,32436],{"class":164},[105,48500,116],{"class":115},[105,48502,32441],{"class":220},[105,48504,32444],{"class":164},[105,48506,700],{"class":220},[105,48508,32444],{"class":164},[105,48510,367],{"class":220},[105,48512,32453],{"class":115},[105,48514,648],{"class":111},[105,48516,333],{"class":164},[105,48518,30482],{"class":115},[105,48520,48521,48523,48525,48527,48529,48531],{"class":107,"line":16878},[105,48522,32436],{"class":164},[105,48524,116],{"class":115},[105,48526,32468],{"class":220},[105,48528,571],{"class":111},[105,48530,562],{"class":164},[105,48532,122],{"class":115},[105,48534,48535],{"class":107,"line":16891},[105,48536,2391],{"emptyLinePlaceholder":32},[105,48538,48539],{"class":107,"line":16896},[105,48540,32483],{"class":174},[105,48542,48543],{"class":107,"line":16901},[105,48544,32488],{"class":174},[105,48546,48547,48549,48551],{"class":107,"line":16906},[105,48548,32493],{"class":115},[105,48550,161],{"class":111},[105,48552,32327],{"class":164},[105,48554,48555],{"class":107,"line":16919},[105,48556,32502],{"class":174},[105,48558,48559,48561,48563],{"class":107,"line":16924},[105,48560,32507],{"class":115},[105,48562,161],{"class":111},[105,48564,3076],{"class":164},[105,48566,48567],{"class":107,"line":32618},[105,48568,32516],{"class":174},[105,48570,48571,48573,48575],{"class":107,"line":32624},[105,48572,32521],{"class":115},[105,48574,161],{"class":111},[105,48576,32327],{"class":164},[105,48578,48579],{"class":107,"line":32630},[105,48580,32530],{"class":174},[105,48582,48583,48585,48587],{"class":107,"line":32636},[105,48584,32535],{"class":115},[105,48586,161],{"class":111},[105,48588,3076],{"class":164},[105,48590,48591],{"class":107,"line":32642},[105,48592,32544],{"class":174},[105,48594,48595,48597,48599],{"class":107,"line":32653},[105,48596,32549],{"class":115},[105,48598,161],{"class":111},[105,48600,3076],{"class":164},[105,48602,48603],{"class":107,"line":32659},[105,48604,32558],{"class":174},[105,48606,48607,48609,48611],{"class":107,"line":32679},[105,48608,32563],{"class":115},[105,48610,161],{"class":111},[105,48612,3076],{"class":164},[105,48614,48615],{"class":107,"line":32685},[105,48616,32572],{"class":174},[105,48618,48619,48621,48623,48625,48627],{"class":107,"line":32696},[105,48620,3394],{"class":111},[105,48622,31586],{"class":115},[105,48624,26028],{"class":111},[105,48626,31591],{"class":164},[105,48628,32585],{"class":115},[105,48630,48631],{"class":107,"line":32702},[105,48632,32590],{"class":174},[105,48634,48635,48637,48639],{"class":107,"line":32708},[105,48636,32595],{"class":115},[105,48638,161],{"class":111},[105,48640,32600],{"class":115},[105,48642,48643],{"class":107,"line":32714},[105,48644,32605],{"class":174},[105,48646,48647,48649,48651],{"class":107,"line":32720},[105,48648,32610],{"class":115},[105,48650,161],{"class":111},[105,48652,32615],{"class":115},[105,48654,48655],{"class":107,"line":32726},[105,48656,32621],{"class":174},[105,48658,48659],{"class":107,"line":32732},[105,48660,32627],{"class":115},[105,48662,48663],{"class":107,"line":32738},[105,48664,32633],{"class":174},[105,48666,48667],{"class":107,"line":32758},[105,48668,32639],{"class":174},[105,48670,48671,48673,48675],{"class":107,"line":32764},[105,48672,32645],{"class":115},[105,48674,161],{"class":111},[105,48676,32650],{"class":115},[105,48678,48679],{"class":107,"line":32780},[105,48680,32656],{"class":174},[105,48682,48683,48685,48687,48689,48691,48693,48695],{"class":107,"line":32786},[105,48684,32662],{"class":115},[105,48686,161],{"class":111},[105,48688,32667],{"class":115},[105,48690,32670],{"class":5208},[105,48692,161],{"class":111},[105,48694,333],{"class":164},[105,48696,122],{"class":115},[105,48698,48699],{"class":107,"line":32800},[105,48700,32682],{"class":174},[105,48702,48703,48705,48707],{"class":107,"line":32806},[105,48704,32688],{"class":115},[105,48706,161],{"class":111},[105,48708,32693],{"class":115},[105,48710,48711],{"class":107,"line":32821},[105,48712,32699],{"class":174},[105,48714,48715],{"class":107,"line":32827},[105,48716,32705],{"class":115},[105,48718,48719],{"class":107,"line":32836},[105,48720,32711],{"class":174},[105,48722,48723],{"class":107,"line":32842},[105,48724,32717],{"class":115},[105,48726,48727],{"class":107,"line":32851},[105,48728,32723],{"class":174},[105,48730,48731],{"class":107,"line":32857},[105,48732,32729],{"class":115},[105,48734,48735],{"class":107,"line":32863},[105,48736,32735],{"class":174},[105,48738,48739,48741,48743,48745,48747,48749,48751],{"class":107,"line":32872},[105,48740,32741],{"class":115},[105,48742,9469],{"class":111},[105,48744,32746],{"class":115},[105,48746,571],{"class":111},[105,48748,32751],{"class":115},[105,48750,307],{"class":164},[105,48752,122],{"class":115},[105,48754,48755],{"class":107,"line":32878},[105,48756,32761],{"class":174},[105,48758,48759,48761,48763,48765,48767],{"class":107,"line":32889},[105,48760,32767],{"class":115},[105,48762,9469],{"class":111},[105,48764,32772],{"class":115},[105,48766,2940],{"class":111},[105,48768,32777],{"class":115},[105,48770,48771],{"class":107,"line":32895},[105,48772,32783],{"class":174},[105,48774,48775,48777,48779,48781,48783],{"class":107,"line":32914},[105,48776,32789],{"class":115},[105,48778,9469],{"class":111},[105,48780,32751],{"class":115},[105,48782,307],{"class":164},[105,48784,122],{"class":115},[105,48786,48787],{"class":107,"line":32920},[105,48788,32803],{"class":174},[105,48790,48791,48793,48795,48797,48799],{"class":107,"line":32931},[105,48792,3394],{"class":111},[105,48794,32811],{"class":115},[105,48796,26028],{"class":111},[105,48798,31591],{"class":164},[105,48800,32818],{"class":115},[105,48802,48803],{"class":107,"line":32937},[105,48804,32824],{"class":174},[105,48806,48807,48809,48811],{"class":107,"line":32957},[105,48808,32595],{"class":115},[105,48810,161],{"class":111},[105,48812,32600],{"class":115},[105,48814,48815],{"class":107,"line":32973},[105,48816,32839],{"class":174},[105,48818,48819,48821,48823],{"class":107,"line":32979},[105,48820,32610],{"class":115},[105,48822,161],{"class":111},[105,48824,32615],{"class":115},[105,48826,48827],{"class":107,"line":32993},[105,48828,32854],{"class":174},[105,48830,48831],{"class":107,"line":32999},[105,48832,32860],{"class":115},[105,48834,48835],{"class":107,"line":33005},[105,48836,36341],{"class":174},[105,48838,48839,48841],{"class":107,"line":33016},[105,48840,32866],{"class":111},[105,48842,32869],{"class":115},[105,48844,48845],{"class":107,"line":33022},[105,48846,32875],{"class":174},[105,48848,48849,48851,48853],{"class":107,"line":33028},[105,48850,36356],{"class":115},[105,48852,161],{"class":111},[105,48854,32650],{"class":115},[105,48856,48857],{"class":107,"line":33038},[105,48858,32892],{"class":174},[105,48860,48861,48863,48865,48867,48869,48871,48873],{"class":107,"line":33044},[105,48862,36369],{"class":115},[105,48864,161],{"class":111},[105,48866,32667],{"class":115},[105,48868,32670],{"class":5208},[105,48870,161],{"class":111},[105,48872,333],{"class":164},[105,48874,122],{"class":115},[105,48876,48877],{"class":107,"line":33055},[105,48878,32917],{"class":174},[105,48880,48881,48883,48885],{"class":107,"line":33061},[105,48882,36390],{"class":115},[105,48884,161],{"class":111},[105,48886,32693],{"class":115},[105,48888,48889],{"class":107,"line":33071},[105,48890,32934],{"class":174},[105,48892,48893,48895,48897,48899,48901,48903,48905],{"class":107,"line":33076},[105,48894,36403],{"class":115},[105,48896,9469],{"class":111},[105,48898,36408],{"class":115},[105,48900,571],{"class":111},[105,48902,32751],{"class":115},[105,48904,307],{"class":164},[105,48906,122],{"class":115},[105,48908,48909,48911,48913,48915,48917],{"class":107,"line":33082},[105,48910,36421],{"class":115},[105,48912,9469],{"class":111},[105,48914,32772],{"class":115},[105,48916,2940],{"class":111},[105,48918,32777],{"class":115},[105,48920,48921],{"class":107,"line":33131},[105,48922,36434],{"class":174},[105,48924,48925,48927,48929,48931,48933],{"class":107,"line":33178},[105,48926,36439],{"class":115},[105,48928,9469],{"class":111},[105,48930,32751],{"class":115},[105,48932,307],{"class":164},[105,48934,122],{"class":115},[105,48936,48937],{"class":107,"line":33183},[105,48938,32996],{"class":174},[105,48940,48941],{"class":107,"line":33189},[105,48942,33002],{"class":174},[105,48944,48945,48947,48949],{"class":107,"line":33208},[105,48946,33008],{"class":115},[105,48948,700],{"class":111},[105,48950,33013],{"class":115},[105,48952,48953],{"class":107,"line":33214},[105,48954,33019],{"class":174},[105,48956,48957],{"class":107,"line":33234},[105,48958,33025],{"class":174},[105,48960,48961,48963,48965],{"class":107,"line":33240},[105,48962,33031],{"class":115},[105,48964,700],{"class":111},[105,48966,33013],{"class":115},[105,48968,48969],{"class":107,"line":33246},[105,48970,33041],{"class":174},[105,48972,48973,48975,48977],{"class":107,"line":33256},[105,48974,33047],{"class":115},[105,48976,700],{"class":111},[105,48978,33052],{"class":115},[105,48980,48981],{"class":107,"line":33261},[105,48982,33058],{"class":174},[105,48984,48985,48987,48989],{"class":107,"line":33267},[105,48986,33064],{"class":115},[105,48988,700],{"class":111},[105,48990,33052],{"class":115},[105,48992,48993],{"class":107,"line":33283},[105,48994,2391],{"emptyLinePlaceholder":32},[105,48996,48997],{"class":107,"line":33328},[105,48998,33079],{"class":174},[105,49000,49001,49003,49005,49007,49009,49011,49013,49015,49017,49019,49021,49023,49025,49027,49029,49031,49033,49035,49037,49039],{"class":107,"line":33334},[105,49002,32436],{"class":164},[105,49004,116],{"class":115},[105,49006,3583],{"class":220},[105,49008,32444],{"class":164},[105,49010,33093],{"class":220},[105,49012,1012],{"class":164},[105,49014,33098],{"class":111},[105,49016,1062],{"class":164},[105,49018,33103],{"class":220},[105,49020,1012],{"class":164},[105,49022,33098],{"class":111},[105,49024,1062],{"class":164},[105,49026,3583],{"class":220},[105,49028,33114],{"class":115},[105,49030,648],{"class":111},[105,49032,333],{"class":164},[105,49034,33121],{"class":115},[105,49036,648],{"class":111},[105,49038,333],{"class":164},[105,49040,33128],{"class":115},[105,49042,49043,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067,49069,49071,49073,49075,49077,49079,49081],{"class":107,"line":33340},[105,49044,32436],{"class":164},[105,49046,116],{"class":115},[105,49048,3583],{"class":220},[105,49050,32444],{"class":164},[105,49052,33142],{"class":220},[105,49054,1012],{"class":164},[105,49056,33098],{"class":111},[105,49058,1062],{"class":164},[105,49060,33151],{"class":220},[105,49062,1012],{"class":164},[105,49064,33098],{"class":111},[105,49066,1062],{"class":164},[105,49068,3583],{"class":220},[105,49070,33162],{"class":115},[105,49072,648],{"class":111},[105,49074,333],{"class":164},[105,49076,33169],{"class":115},[105,49078,648],{"class":111},[105,49080,333],{"class":164},[105,49082,33128],{"class":115},[105,49084,49085],{"class":107,"line":33346},[105,49086,2391],{"emptyLinePlaceholder":32},[105,49088,49089],{"class":107,"line":33357},[105,49090,33186],{"class":174},[105,49092,49093,49095,49097,49099,49101,49103,49105],{"class":107,"line":33363},[105,49094,2488],{"class":111},[105,49096,33194],{"class":115},[105,49098,648],{"class":111},[105,49100,333],{"class":164},[105,49102,1056],{"class":115},[105,49104,1076],{"class":111},[105,49106,33205],{"class":115},[105,49108,49109],{"class":107,"line":33369},[105,49110,33211],{"class":174},[105,49112,49113,49115,49117,49119,49121,49123,49125],{"class":107,"line":33375},[105,49114,33217],{"class":115},[105,49116,155],{"class":164},[105,49118,161],{"class":111},[105,49120,33224],{"class":115},[105,49122,648],{"class":111},[105,49124,333],{"class":164},[105,49126,33231],{"class":115},[105,49128,49129],{"class":107,"line":33393},[105,49130,33237],{"class":174},[105,49132,49133],{"class":107,"line":33407},[105,49134,33243],{"class":174},[105,49136,49137,49139,49141],{"class":107,"line":33416},[105,49138,33249],{"class":115},[105,49140,161],{"class":111},[105,49142,32299],{"class":115},[105,49144,49145],{"class":107,"line":33425},[105,49146,2391],{"emptyLinePlaceholder":32},[105,49148,49149],{"class":107,"line":33434},[105,49150,33264],{"class":174},[105,49152,49153,49155,49157,49159,49161],{"class":107,"line":33443},[105,49154,33270],{"class":115},[105,49156,161],{"class":111},[105,49158,33275],{"class":115},[105,49160,648],{"class":111},[105,49162,33280],{"class":115},[105,49164,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193,49195,49197,49199],{"class":107,"line":33449},[105,49166,32436],{"class":164},[105,49168,116],{"class":115},[105,49170,33290],{"class":220},[105,49172,1012],{"class":164},[105,49174,33295],{"class":111},[105,49176,1062],{"class":164},[105,49178,660],{"class":220},[105,49180,1012],{"class":164},[105,49182,33295],{"class":111},[105,49184,1062],{"class":164},[105,49186,33308],{"class":220},[105,49188,33311],{"class":115},[105,49190,33314],{"class":111},[105,49192,1023],{"class":164},[105,49194,33319],{"class":115},[105,49196,444],{"class":111},[105,49198,1023],{"class":164},[105,49200,30482],{"class":115},[105,49202,49203],{"class":107,"line":33455},[105,49204,36718],{"class":174},[105,49206,49207],{"class":107,"line":33463},[105,49208,36723],{"class":174},[105,49210,49211,49213,49215],{"class":107,"line":33468},[105,49212,36728],{"class":115},[105,49214,33352],{"class":220},[105,49216,122],{"class":115},[105,49218,49219],{"class":107,"line":33474},[105,49220,33372],{"class":174},[105,49222,49223,49225,49227,49229,49231,49233],{"class":107,"line":33485},[105,49224,33378],{"class":115},[105,49226,161],{"class":111},[105,49228,33383],{"class":115},[105,49230,33386],{"class":5208},[105,49232,161],{"class":111},[105,49234,1537],{"class":115},[105,49236,49237,49239,49241,49243],{"class":107,"line":33491},[105,49238,33396],{"class":220},[105,49240,975],{"class":115},[105,49242,33401],{"class":164},[105,49244,33404],{"class":115},[105,49246,49247,49249],{"class":107,"line":33511},[105,49248,33410],{"class":220},[105,49250,33413],{"class":115},[105,49252,49253,49255],{"class":107,"line":33517},[105,49254,33419],{"class":220},[105,49256,33422],{"class":115},[105,49258,49259,49261],{"class":107,"line":33523},[105,49260,33428],{"class":220},[105,49262,33431],{"class":115},[105,49264,49265,49267],{"class":107,"line":33529},[105,49266,33437],{"class":220},[105,49268,33440],{"class":115},[105,49270,49271],{"class":107,"line":33546},[105,49272,33446],{"class":115},[105,49274,49275],{"class":107,"line":33552},[105,49276,33452],{"class":174},[105,49278,49279,49281],{"class":107,"line":33558},[105,49280,4081],{"class":111},[105,49282,33460],{"class":115},[105,49284,49285],{"class":107,"line":33564},[105,49286,2391],{"emptyLinePlaceholder":32},[105,49288,49289],{"class":107,"line":33570},[105,49290,33471],{"class":174},[105,49292,49293,49295,49297],{"class":107,"line":33576},[105,49294,31932],{"class":111},[105,49296,33479],{"class":1954},[105,49298,33482],{"class":115},[105,49300,49301],{"class":107,"line":33603},[105,49302,33488],{"class":174},[105,49304,49305,49307,49309,49311,49313,49315,49317,49319],{"class":107,"line":33627},[105,49306,33494],{"class":115},[105,49308,31678],{"class":5208},[105,49310,161],{"class":111},[105,49312,116],{"class":115},[105,49314,614],{"class":164},[105,49316,494],{"class":115},[105,49318,409],{"class":164},[105,49320,30482],{"class":115},[105,49322,49323],{"class":107,"line":33633},[105,49324,33514],{"class":174},[105,49326,49327],{"class":107,"line":33639},[105,49328,33520],{"class":174},[105,49330,49331],{"class":107,"line":33645},[105,49332,33526],{"class":174},[105,49334,49335,49337,49339,49341,49343,49345,49347],{"class":107,"line":33656},[105,49336,31712],{"class":115},[105,49338,333],{"class":164},[105,49340,494],{"class":115},[105,49342,193],{"class":164},[105,49344,494],{"class":115},[105,49346,333],{"class":164},[105,49348,122],{"class":115},[105,49350,49351],{"class":107,"line":33667},[105,49352,33549],{"class":174},[105,49354,49355],{"class":107,"line":33673},[105,49356,33555],{"class":174},[105,49358,49359],{"class":107,"line":33690},[105,49360,33561],{"class":174},[105,49362,49363],{"class":107,"line":33713},[105,49364,33567],{"class":174},[105,49366,49367],{"class":107,"line":33736},[105,49368,33573],{"class":174},[105,49370,49371,49373,49375,49377,49379,49381,49383,49385,49387],{"class":107,"line":33742},[105,49372,33579],{"class":115},[105,49374,33582],{"class":220},[105,49376,33585],{"class":115},[105,49378,33588],{"class":220},[105,49380,494],{"class":115},[105,49382,33593],{"class":5208},[105,49384,161],{"class":111},[105,49386,33598],{"class":220},[105,49388,122],{"class":115},[105,49390,49391,49393,49395,49397,49399,49401,49403,49405,49407],{"class":107,"line":33747},[105,49392,33579],{"class":115},[105,49394,33582],{"class":220},[105,49396,33610],{"class":115},[105,49398,33613],{"class":220},[105,49400,494],{"class":115},[105,49402,33593],{"class":5208},[105,49404,161],{"class":111},[105,49406,33622],{"class":220},[105,49408,122],{"class":115},[105,49410,49411],{"class":107,"line":33756},[105,49412,33630],{"class":174},[105,49414,49415],{"class":107,"line":33766},[105,49416,33636],{"class":115},[105,49418,49419],{"class":107,"line":33772},[105,49420,33642],{"class":174},[105,49422,49423,49425,49427],{"class":107,"line":33777},[105,49424,33648],{"class":115},[105,49426,33651],{"class":220},[105,49428,122],{"class":115},[105,49430,49431,49433,49435],{"class":107,"line":33783},[105,49432,33659],{"class":115},[105,49434,33662],{"class":220},[105,49436,122],{"class":115},[105,49438,49439],{"class":107,"line":33796},[105,49440,33670],{"class":174},[105,49442,49443,49445,49447,49449,49451,49453,49455],{"class":107,"line":33802},[105,49444,31712],{"class":115},[105,49446,333],{"class":164},[105,49448,494],{"class":115},[105,49450,193],{"class":164},[105,49452,494],{"class":115},[105,49454,193],{"class":164},[105,49456,122],{"class":115},[105,49458,49459,49461,49463,49465,49467,49469,49471,49473,49475],{"class":107,"line":33813},[105,49460,33579],{"class":115},[105,49462,33582],{"class":220},[105,49464,33697],{"class":115},[105,49466,33588],{"class":220},[105,49468,494],{"class":115},[105,49470,33593],{"class":5208},[105,49472,161],{"class":111},[105,49474,33708],{"class":220},[105,49476,122],{"class":115},[105,49478,49479,49481,49483,49485,49487,49489,49491,49493,49495],{"class":107,"line":33824},[105,49480,33579],{"class":115},[105,49482,33582],{"class":220},[105,49484,33720],{"class":115},[105,49486,33613],{"class":220},[105,49488,494],{"class":115},[105,49490,33593],{"class":5208},[105,49492,161],{"class":111},[105,49494,33731],{"class":220},[105,49496,122],{"class":115},[105,49498,49499],{"class":107,"line":33843},[105,49500,33739],{"class":174},[105,49502,49504],{"class":107,"line":49503},219,[105,49505,33636],{"class":115},[105,49507,49509,49511,49513],{"class":107,"line":49508},220,[105,49510,33648],{"class":115},[105,49512,33582],{"class":220},[105,49514,122],{"class":115},[105,49516,49518,49520,49522],{"class":107,"line":49517},221,[105,49519,33659],{"class":115},[105,49521,33761],{"class":220},[105,49523,122],{"class":115},[105,49525,49527],{"class":107,"line":49526},222,[105,49528,33769],{"class":115},[105,49530,49532],{"class":107,"line":49531},223,[105,49533,2391],{"emptyLinePlaceholder":32},[105,49535,49537],{"class":107,"line":49536},224,[105,49538,33780],{"class":174},[105,49540,49542,49544,49546,49548,49550],{"class":107,"line":49541},225,[105,49543,1522],{"class":111},[105,49545,31205],{"class":164},[105,49547,2940],{"class":111},[105,49549,31210],{"class":220},[105,49551,3730],{"class":115},[105,49553,49555],{"class":107,"line":49554},226,[105,49556,33799],{"class":174},[105,49558,49560,49562,49564],{"class":107,"line":49559},227,[105,49561,44531],{"class":115},[105,49563,161],{"class":111},[105,49565,44536],{"class":115},[105,49567,49569,49571,49573],{"class":107,"line":49568},228,[105,49570,33816],{"class":115},[105,49572,161],{"class":111},[105,49574,33821],{"class":115},[105,49576,49578,49580,49582,49584,49586,49588,49590],{"class":107,"line":49577},229,[105,49579,33378],{"class":115},[105,49581,161],{"class":111},[105,49583,44553],{"class":115},[105,49585,33834],{"class":5208},[105,49587,161],{"class":111},[105,49589,1023],{"class":164},[105,49591,122],{"class":115},[105,49593,49595],{"class":107,"line":49594},230,[105,49596,33846],{"class":115},[21990,49598,49600],{"id":49599},"_242测试代码","2.4.2.测试代码",[14,49602,49603],{},"使用测试集进行测试与推理",[96,49605,49607],{"className":30363,"code":49606,"language":30365,"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",[102,49608,49609,49615,49625,49635,49646,49656,49660,49664,49672,49677,49681,49698,49702,49706,49710,49714,49718,49750,49754,49762,49766,49778,49782,49786,49790,49794,49798,49802,49806,49810,49828,49842,49846,49856,49866,49876,49882,49886,49890,49898,49902,49918,49926,49930,49934,49942,49950,49954,49958,49962,49966,49972,49976,49986,49994,50002,50006,50010,50014,50022,50026,50042,50046,50050,50054,50066,50070,50082,50086,50090,50102,50106,50116,50120,50124,50136,50140,50148,50152,50156,50164,50168,50176,50180,50184,50188,50192,50196,50212,50220,50224,50228,50246,50252,50256,50266,50274,50282,50286,50290,50294,50298,50306,50310,50326,50330,50338,50346],{"__ignoreMap":22},[105,49610,49611,49613],{"class":107,"line":108},[105,49612,30377],{"class":111},[105,49614,30380],{"class":115},[105,49616,49617,49619,49621,49623],{"class":107,"line":28},[105,49618,30377],{"class":111},[105,49620,31400],{"class":115},[105,49622,31368],{"class":111},[105,49624,31405],{"class":115},[105,49626,49627,49629,49631,49633],{"class":107,"line":1171},[105,49628,30722],{"class":111},[105,49630,31383],{"class":115},[105,49632,30377],{"class":111},[105,49634,31388],{"class":115},[105,49636,49637,49639,49641,49643],{"class":107,"line":1186},[105,49638,30722],{"class":111},[105,49640,31353],{"class":115},[105,49642,30377],{"class":111},[105,49644,49645],{"class":115}," ImageFolder\n",[105,49647,49648,49650,49652,49654],{"class":107,"line":1192},[105,49649,30722],{"class":111},[105,49651,31899],{"class":115},[105,49653,30377],{"class":111},[105,49655,44625],{"class":115},[105,49657,49658],{"class":107,"line":1206},[105,49659,2391],{"emptyLinePlaceholder":32},[105,49661,49662],{"class":107,"line":1212},[105,49663,33936],{"class":174},[105,49665,49666,49668,49670],{"class":107,"line":1303},[105,49667,31932],{"class":111},[105,49669,33943],{"class":1954},[105,49671,31938],{"class":115},[105,49673,49674],{"class":107,"line":1309},[105,49675,49676],{"class":174},"   # 导入自己的数据集，并进行数据处理\n",[105,49678,49679],{"class":107,"line":1321},[105,49680,47946],{"class":174},[105,49682,49683,49685,49687,49689,49691,49693,49696],{"class":107,"line":1603},[105,49684,47951],{"class":164},[105,49686,161],{"class":111},[105,49688,786],{"class":111},[105,49690,367],{"class":220},[105,49692,674],{"class":164},[105,49694,49695],{"class":47962},"\u002Fdata\u002Ftest",[105,49697,25118],{"class":220},[105,49699,49700],{"class":107,"line":1608},[105,49701,2391],{"emptyLinePlaceholder":32},[105,49703,49704],{"class":107,"line":1614},[105,49705,47974],{"class":174},[105,49707,49708],{"class":107,"line":1619},[105,49709,47979],{"class":174},[105,49711,49712],{"class":107,"line":1633},[105,49713,47984],{"class":174},[105,49715,49716],{"class":107,"line":1638},[105,49717,47989],{"class":174},[105,49719,49720,49722,49724,49726,49728,49730,49732,49734,49736,49738,49740,49742,49744,49746,49748],{"class":107,"line":1644},[105,49721,47994],{"class":115},[105,49723,161],{"class":111},[105,49725,47999],{"class":115},[105,49727,48002],{"class":164},[105,49729,494],{"class":115},[105,49731,48007],{"class":164},[105,49733,494],{"class":115},[105,49735,48012],{"class":164},[105,49737,48015],{"class":115},[105,49739,48018],{"class":164},[105,49741,494],{"class":115},[105,49743,48023],{"class":164},[105,49745,494],{"class":115},[105,49747,48028],{"class":164},[105,49749,4648],{"class":115},[105,49751,49752],{"class":107,"line":1665},[105,49753,48035],{"class":174},[105,49755,49756,49758,49760],{"class":107,"line":1670},[105,49757,48040],{"class":115},[105,49759,161],{"class":111},[105,49761,48045],{"class":115},[105,49763,49764],{"class":107,"line":1684},[105,49765,48050],{"class":174},[105,49767,49768,49770,49772,49774,49776],{"class":107,"line":1689},[105,49769,48055],{"class":115},[105,49771,31486],{"class":164},[105,49773,494],{"class":115},[105,49775,31486],{"class":164},[105,49777,42607],{"class":115},[105,49779,49780],{"class":107,"line":1718},[105,49781,48068],{"class":174},[105,49783,49784],{"class":107,"line":1723},[105,49785,48073],{"class":115},[105,49787,49788],{"class":107,"line":1740},[105,49789,48078],{"class":115},[105,49791,49792],{"class":107,"line":1745},[105,49793,48083],{"class":174},[105,49795,49796],{"class":107,"line":1750},[105,49797,48088],{"class":174},[105,49799,49800],{"class":107,"line":1755},[105,49801,2391],{"emptyLinePlaceholder":32},[105,49803,49804],{"class":107,"line":1769},[105,49805,48097],{"class":174},[105,49807,49808],{"class":107,"line":1774},[105,49809,48102],{"class":174},[105,49811,49812,49814,49816,49818,49820,49822,49824,49826],{"class":107,"line":2568},[105,49813,33950],{"class":115},[105,49815,161],{"class":111},[105,49817,48111],{"class":115},[105,49819,48114],{"class":164},[105,49821,494],{"class":115},[105,49823,48119],{"class":5208},[105,49825,161],{"class":111},[105,49827,48124],{"class":115},[105,49829,49830,49832,49834,49836,49838,49840],{"class":107,"line":2582},[105,49831,34007],{"class":115},[105,49833,161],{"class":111},[105,49835,31519],{"class":115},[105,49837,31522],{"class":5208},[105,49839,161],{"class":111},[105,49841,34018],{"class":115},[105,49843,49844],{"class":107,"line":2590},[105,49845,34023],{"class":174},[105,49847,49848,49850,49852,49854],{"class":107,"line":2595},[105,49849,34028],{"class":5208},[105,49851,161],{"class":111},[105,49853,333],{"class":164},[105,49855,31451],{"class":115},[105,49857,49858,49860,49862,49864],{"class":107,"line":2601},[105,49859,34039],{"class":5208},[105,49861,161],{"class":111},[105,49863,31461],{"class":164},[105,49865,31451],{"class":115},[105,49867,49868,49870,49872,49874],{"class":107,"line":2607},[105,49869,34050],{"class":5208},[105,49871,161],{"class":111},[105,49873,307],{"class":164},[105,49875,122],{"class":115},[105,49877,49878,49880],{"class":107,"line":2612},[105,49879,4081],{"class":111},[105,49881,34063],{"class":115},[105,49883,49884],{"class":107,"line":7940},[105,49885,2391],{"emptyLinePlaceholder":32},[105,49887,49888],{"class":107,"line":7964},[105,49889,34072],{"class":174},[105,49891,49892,49894,49896],{"class":107,"line":7969},[105,49893,31932],{"class":111},[105,49895,34079],{"class":1954},[105,49897,34082],{"class":115},[105,49899,49900],{"class":107,"line":7975},[105,49901,34087],{"class":174},[105,49903,49904,49906,49908,49910,49912,49914,49916],{"class":107,"line":8002},[105,49905,31222],{"class":115},[105,49907,161],{"class":111},[105,49909,31229],{"class":220},[105,49911,1695],{"class":111},[105,49913,31234],{"class":115},[105,49915,1692],{"class":111},[105,49917,34104],{"class":220},[105,49919,49920,49922,49924],{"class":107,"line":8007},[105,49921,31274],{"class":115},[105,49923,161],{"class":111},[105,49925,32274],{"class":115},[105,49927,49928],{"class":107,"line":8013},[105,49929,2391],{"emptyLinePlaceholder":32},[105,49931,49932],{"class":107,"line":8025},[105,49933,34121],{"class":174},[105,49935,49936,49938,49940],{"class":107,"line":8037},[105,49937,34126],{"class":115},[105,49939,161],{"class":111},[105,49941,32327],{"class":164},[105,49943,49944,49946,49948],{"class":107,"line":8049},[105,49945,34135],{"class":115},[105,49947,161],{"class":111},[105,49949,3076],{"class":164},[105,49951,49952],{"class":107,"line":9708},[105,49953,2391],{"emptyLinePlaceholder":32},[105,49955,49956],{"class":107,"line":9733},[105,49957,34148],{"class":174},[105,49959,49960],{"class":107,"line":9756},[105,49961,34153],{"class":174},[105,49963,49964],{"class":107,"line":9780},[105,49965,34158],{"class":174},[105,49967,49968,49970],{"class":107,"line":9785},[105,49969,34163],{"class":111},[105,49971,32869],{"class":115},[105,49973,49974],{"class":107,"line":9790},[105,49975,34170],{"class":174},[105,49977,49978,49980,49982,49984],{"class":107,"line":9795},[105,49979,3394],{"class":111},[105,49981,34177],{"class":115},[105,49983,26028],{"class":111},[105,49985,34182],{"class":115},[105,49987,49988,49990,49992],{"class":107,"line":9804},[105,49989,34187],{"class":115},[105,49991,161],{"class":111},[105,49993,34192],{"class":115},[105,49995,49996,49998,50000],{"class":107,"line":9809},[105,49997,34197],{"class":115},[105,49999,161],{"class":111},[105,50001,34202],{"class":115},[105,50003,50004],{"class":107,"line":9815},[105,50005,34207],{"class":174},[105,50007,50008],{"class":107,"line":9836},[105,50009,32860],{"class":115},[105,50011,50012],{"class":107,"line":9842},[105,50013,34216],{"class":174},[105,50015,50016,50018,50020],{"class":107,"line":9856},[105,50017,32645],{"class":115},[105,50019,161],{"class":111},[105,50021,34225],{"class":115},[105,50023,50024],{"class":107,"line":9862},[105,50025,34230],{"class":174},[105,50027,50028,50030,50032,50034,50036,50038,50040],{"class":107,"line":9889},[105,50029,32662],{"class":115},[105,50031,161],{"class":111},[105,50033,32667],{"class":115},[105,50035,32670],{"class":5208},[105,50037,161],{"class":111},[105,50039,333],{"class":164},[105,50041,122],{"class":115},[105,50043,50044],{"class":107,"line":9898},[105,50045,34251],{"class":174},[105,50047,50048],{"class":107,"line":9904},[105,50049,34256],{"class":174},[105,50051,50052],{"class":107,"line":9912},[105,50053,34261],{"class":174},[105,50055,50056,50058,50060,50062,50064],{"class":107,"line":9917},[105,50057,34266],{"class":115},[105,50059,9469],{"class":111},[105,50061,32772],{"class":115},[105,50063,2940],{"class":111},[105,50065,34275],{"class":115},[105,50067,50068],{"class":107,"line":16596},[105,50069,34280],{"class":174},[105,50071,50072,50074,50076,50078,50080],{"class":107,"line":16602},[105,50073,34285],{"class":115},[105,50075,9469],{"class":111},[105,50077,34290],{"class":115},[105,50079,307],{"class":164},[105,50081,122],{"class":115},[105,50083,50084],{"class":107,"line":16625},[105,50085,2391],{"emptyLinePlaceholder":32},[105,50087,50088],{"class":107,"line":16631},[105,50089,34303],{"class":174},[105,50091,50092,50094,50096,50098,50100],{"class":107,"line":16654},[105,50093,34308],{"class":115},[105,50095,161],{"class":111},[105,50097,34313],{"class":115},[105,50099,700],{"class":111},[105,50101,34318],{"class":115},[105,50103,50104],{"class":107,"line":16668},[105,50105,34323],{"class":174},[105,50107,50108,50110,50112,50114],{"class":107,"line":16688},[105,50109,32436],{"class":164},[105,50111,116],{"class":115},[105,50113,34332],{"class":220},[105,50115,34335],{"class":115},[105,50117,50118],{"class":107,"line":16694},[105,50119,2391],{"emptyLinePlaceholder":32},[105,50121,50122],{"class":107,"line":16705},[105,50123,34344],{"class":174},[105,50125,50126,50128,50130,50132,50134],{"class":107,"line":16728},[105,50127,1522],{"class":111},[105,50129,31205],{"class":164},[105,50131,2940],{"class":111},[105,50133,31210],{"class":220},[105,50135,3730],{"class":115},[105,50137,50138],{"class":107,"line":16750},[105,50139,34361],{"class":174},[105,50141,50142,50144,50146],{"class":107,"line":16755},[105,50143,31274],{"class":115},[105,50145,161],{"class":111},[105,50147,44536],{"class":115},[105,50149,50150],{"class":107,"line":16761},[105,50151,34374],{"class":174},[105,50153,50154],{"class":107,"line":16775},[105,50155,34379],{"class":174},[105,50157,50158,50160,50162],{"class":107,"line":16788},[105,50159,34384],{"class":115},[105,50161,34387],{"class":220},[105,50163,30482],{"class":115},[105,50165,50166],{"class":107,"line":16793},[105,50167,34394],{"class":174},[105,50169,50170,50172,50174],{"class":107,"line":16807},[105,50171,34007],{"class":115},[105,50173,161],{"class":111},[105,50175,34403],{"class":115},[105,50177,50178],{"class":107,"line":16812},[105,50179,34408],{"class":174},[105,50181,50182],{"class":107,"line":16818},[105,50183,34413],{"class":115},[105,50185,50186],{"class":107,"line":16823},[105,50187,2391],{"emptyLinePlaceholder":32},[105,50189,50190],{"class":107,"line":16837},[105,50191,34422],{"class":174},[105,50193,50194],{"class":107,"line":16842},[105,50195,34427],{"class":174},[105,50197,50198,50200,50202,50204,50206,50208,50210],{"class":107,"line":16847},[105,50199,31222],{"class":115},[105,50201,161],{"class":111},[105,50203,31229],{"class":220},[105,50205,1695],{"class":111},[105,50207,31234],{"class":115},[105,50209,1692],{"class":111},[105,50211,34104],{"class":220},[105,50213,50214,50216,50218],{"class":107,"line":16861},[105,50215,31274],{"class":115},[105,50217,161],{"class":111},[105,50219,32274],{"class":115},[105,50221,50222],{"class":107,"line":16873},[105,50223,34456],{"class":174},[105,50225,50226],{"class":107,"line":16878},[105,50227,34461],{"class":174},[105,50229,50230,50232,50234,50236,50239,50241,50244],{"class":107,"line":16891},[105,50231,34466],{"class":115},[105,50233,161],{"class":111},[105,50235,1006],{"class":115},[105,50237,50238],{"class":220},"'猫'",[105,50240,494],{"class":115},[105,50242,50243],{"class":220},"'狗'",[105,50245,33231],{"class":115},[105,50247,50248,50250],{"class":107,"line":16896},[105,50249,34163],{"class":111},[105,50251,32869],{"class":115},[105,50253,50254],{"class":107,"line":16901},[105,50255,34531],{"class":174},[105,50257,50258,50260,50262,50264],{"class":107,"line":16906},[105,50259,3394],{"class":111},[105,50261,34538],{"class":115},[105,50263,26028],{"class":111},[105,50265,34182],{"class":115},[105,50267,50268,50270,50272],{"class":107,"line":16919},[105,50269,32595],{"class":115},[105,50271,161],{"class":111},[105,50273,32600],{"class":115},[105,50275,50276,50278,50280],{"class":107,"line":16924},[105,50277,32610],{"class":115},[105,50279,161],{"class":111},[105,50281,32615],{"class":115},[105,50283,50284],{"class":107,"line":32618},[105,50285,2391],{"emptyLinePlaceholder":32},[105,50287,50288],{"class":107,"line":32624},[105,50289,34567],{"class":174},[105,50291,50292],{"class":107,"line":32630},[105,50293,32860],{"class":115},[105,50295,50296],{"class":107,"line":32636},[105,50297,34576],{"class":174},[105,50299,50300,50302,50304],{"class":107,"line":32642},[105,50301,32645],{"class":115},[105,50303,161],{"class":111},[105,50305,32650],{"class":115},[105,50307,50308],{"class":107,"line":32653},[105,50309,34589],{"class":174},[105,50311,50312,50314,50316,50318,50320,50322,50324],{"class":107,"line":32659},[105,50313,32662],{"class":115},[105,50315,161],{"class":111},[105,50317,32667],{"class":115},[105,50319,32670],{"class":5208},[105,50321,161],{"class":111},[105,50323,333],{"class":164},[105,50325,122],{"class":115},[105,50327,50328],{"class":107,"line":32679},[105,50329,34610],{"class":174},[105,50331,50332,50334,50336],{"class":107,"line":32685},[105,50333,34615],{"class":115},[105,50335,161],{"class":111},[105,50337,34620],{"class":115},[105,50339,50340,50342,50344],{"class":107,"line":32696},[105,50341,34625],{"class":115},[105,50343,161],{"class":111},[105,50345,34630],{"class":115},[105,50347,50348,50350,50352,50354,50356,50358,50360,50362],{"class":107,"line":32702},[105,50349,34635],{"class":164},[105,50351,116],{"class":115},[105,50353,34640],{"class":220},[105,50355,34643],{"class":115},[105,50357,34646],{"class":220},[105,50359,494],{"class":115},[105,50361,34651],{"class":220},[105,50363,34654],{"class":115},[5118,50365,50366],{},"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":28,"depth":28,"links":50368},[50369,50370,50371,50372],{"id":30576,"depth":1171,"text":30577},{"id":37824,"depth":1171,"text":37825},{"id":41257,"depth":1171,"text":41258},{"id":45266,"depth":1171,"text":45267},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30568,"description":23369},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50379,"title":50380,"body":50381,"description":23369,"extension":30,"meta":50388,"navigation":32,"path":50389,"seo":50390,"stem":50391,"__hash__":50392},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50382,"toc":50386},[50383],[10,50384,50380],{"id":50385},"_3yolo模型学习",{"title":22,"searchDepth":28,"depth":28,"links":50387},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50380,"description":23369},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50394,"title":50395,"body":50396,"description":50403,"extension":30,"meta":50404,"navigation":32,"path":50406,"seo":50407,"stem":50408,"__hash__":50409},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50397,"toc":50401},[50398],[14,50399,50400],{},"yolo模型还未补充",{"title":22,"searchDepth":28,"depth":28,"links":50402},[],"深度学习学习",{"category":50405},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50395,"description":50403},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50411,"title":50412,"body":50413,"description":23369,"extension":30,"meta":50438,"navigation":32,"path":50439,"seo":50440,"stem":50441,"__hash__":50442},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50414,"toc":50436},[50415,50418,50421,50426,50433],[10,50416,50412],{"id":50417},"_1工具",[14,50419,50420],{},"提示错误插件：有问题会提前报错",[14,50422,50423],{},[20,50424],{"alt":22,"src":50425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50427,50428],{},[354,50429,50432],{"href":50430,"rel":50431},"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",[23858],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50434,50435],{},"alt键加上下箭头可以实现语句的移动",{"title":22,"searchDepth":28,"depth":28,"links":50437},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50412,"description":23369},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50444,"title":50445,"body":50446,"description":23369,"extension":30,"meta":53310,"navigation":32,"path":53311,"seo":53312,"stem":53313,"__hash__":53314},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50447,"toc":53261},[50448,50451,50455,50459,50464,50467,50472,50476,50483,50488,50495,50500,50507,50512,50516,50521,50524,50528,50533,50537,50542,50545,50548,50551,50554,50557,50560,50563,50566,50571,50576,50581,50585,50588,50591,50595,50600,50603,50611,50616,50633,50641,50646,50651,50656,50661,50666,50669,50674,50679,50683,50692,50697,50702,50706,50711,50714,50718,50723,50731,50736,50741,50744,50749,50754,50759,50762,50765,50768,50773,50778,50781,50786,50789,50794,50797,50800,50803,50808,50811,50814,50829,50834,50839,50844,50847,50850,50853,50867,50870,50875,50880,50883,50886,50889,50892,50895,50898,50901,50905,50909,50914,50918,50921,50926,50931,50934,50939,50942,50946,50951,50954,50957,50960,50963,50966,50969,50972,50975,50978,50982,50987,50992,50997,51000,51003,51007,51012,51015,51019,51022,51025,51030,51033,51036,51040,51044,51047,51052,51057,51060,51089,51094,51099,51104,51109,51113,51118,51122,51127,51130,51134,51138,51143,51147,51152,51157,51161,51166,51169,51171,51174,51179,51183,51188,51192,51196,51201,51206,51211,51216,51220,51225,51230,51235,51238,51241,51246,51249,51254,51259,51264,51269,51273,52080,52084,52427,52432,52435,52438,52441,52444,52447,52450,52453,52456,52458,52461,52463,52466,52470,52475,52478,52481,52484,52488,52493,52498,52518,52521,52525,52530,52535,52552,52556,52585,52589,52611,52613,52652,52660,52666,52670,52673,52676,52681,52686,52689,52692,52695,52700,52705,52708,52711,52714,52717,52720,52723,52726,52729,52732,52735,52738,52740,52743,52746,52749,52752,52755,52758,52761,52764,52768,52773,52776,52781,52784,52787,52790,52793,52796,52799,52802,52804,52807,52810,52813,52816,52819,52822,52826,52829,52838,52841,52846,52849,52854,52857,52860,52863,52866,52869,52872,52875,52879,52883,52886,52889,52894,52899,52904,52908,52913,52918,52921,52924,52927,52930,52933,52938,52941,52946,52948,52953,52956,52960,52965,52968,52971,52976,52980,52983,52988,52991,52994,53023,53028,53031,53034,53037,53040,53043,53047,53050,53136,53140,53143,53148,53153,53160,53163,53166,53169,53172,53175,53180,53185,53188,53191,53194,53197,53200,53203,53206,53209,53212,53214,53217,53221,53226,53231,53236,53239,53244,53249,53252,53255,53258],[10,50449,50445],{"id":50450},"_2基础语法",[47,50452,50454],{"id":50453},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[76,50456,50458],{"id":50457},"_211-js组成","2.1.1 js组成",[59,50460,50461],{},[62,50462,50463],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50465,50466],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[59,50468,50469],{"start":28},[62,50470,50471],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[76,50473,50475],{"id":50474},"_212-js书写位置","2.1.2 js书写位置",[59,50477,50478],{},[62,50479,50480],{},[265,50481,50482],{},"内部 JavaScript",[14,50484,50485],{},[20,50486],{"alt":22,"src":50487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[59,50489,50490],{"start":28},[62,50491,50492],{},[265,50493,50494],{},"外部 JavaScript",[14,50496,50497],{},[20,50498],{"alt":22,"src":50499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[59,50501,50502],{"start":1171},[62,50503,50504],{},[265,50505,50506],{},"内联 JavaScript",[14,50508,50509],{},[20,50510],{"alt":22,"src":50511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[76,50513,50515],{"id":50514},"_213-javascript注释","2.1.3 JavaScript注释",[14,50517,50518],{},[20,50519],{"alt":22,"src":50520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50522,50523],{},"alt+shift+a一定要记住！",[76,50525,50527],{"id":50526},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50529,50530],{},[20,50531],{"alt":22,"src":50532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[76,50534,50536],{"id":50535},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[59,50538,50539],{},[62,50540,50541],{},"输出语法：",[14,50543,50544],{},"①document.write('要出的内容')",[14,50546,50547],{},"向body内输出内容；",[14,50549,50550],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50552,50553],{},"②alert('要出的内容')",[14,50555,50556],{},"页面弹出警告对话框",[14,50558,50559],{},"③console.log('控制台打印')",[14,50561,50562],{},"控制台输出语法，程序员调试使用",[14,50564,50565],{},"输入log就行，自动生成：",[14,50567,50568],{},[20,50569],{"alt":22,"src":50570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[59,50572,50573],{"start":28},[62,50574,50575],{},"输入语法：",[14,50577,50578],{},[20,50579],{"alt":22,"src":50580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[76,50582,50584],{"id":50583},"_2116-字面量","21.1.6 字面量",[14,50586,50587],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50589,50590],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[47,50592,50594],{"id":50593},"_22-变量","2.2 变量",[59,50596,50597],{},[62,50598,50599],{},"变量声明",[14,50601,50602],{},"let 变量名",[1123,50604,50605,50608],{},[62,50606,50607],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[62,50609,50610],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[59,50612,50613],{"start":28},[62,50614,50615],{},"变量赋值",[96,50617,50621],{"className":50618,"code":50619,"language":50620,"meta":22,"style":22},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[102,50622,50623,50628],{"__ignoreMap":22},[105,50624,50625],{"class":107,"line":108},[105,50626,50627],{"class":115},"let age\n",[105,50629,50630],{"class":107,"line":28},[105,50631,50632],{"class":115},"age=18\n",[59,50634,50635,50638],{"start":1171},[62,50636,50637],{},"连这些（变量的初始化）：let age=18",[62,50639,50640],{},"更新变量",[14,50642,50643],{},[20,50644],{"alt":22,"src":50645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[59,50647,50648],{"start":1192},[62,50649,50650],{},"声明多个变量",[14,50652,50653],{},[20,50654],{"alt":22,"src":50655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[59,50657,50658],{"start":1206},[62,50659,50660],{},"变量命名规则与规范",[14,50662,50663],{},[20,50664],{"alt":22,"src":50665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50667,50668],{},"遵守小驼峰！",[59,50670,50671],{"start":1212},[62,50672,50673],{},"变量拓展-let和var的区别",[14,50675,50676],{},[20,50677],{"alt":22,"src":50678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[47,50680,50682],{"id":50681},"_23-数组","2.3 数组",[96,50684,50686],{"className":50618,"code":50685,"language":50620,"meta":22,"style":22},"let arr = []\n",[102,50687,50688],{"__ignoreMap":22},[105,50689,50690],{"class":107,"line":108},[105,50691,50685],{"class":115},[14,50693,50694],{},[20,50695],{"alt":22,"src":50696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50698,50699],{},[20,50700],{"alt":22,"src":50701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[47,50703,50705],{"id":50704},"_24-常量","2.4 常量",[14,50707,50708],{},[20,50709],{"alt":22,"src":50710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50712,50713],{},"const — 类似于 let ，但是变量的值无法被修改",[47,50715,50717],{"id":50716},"_25-数据类型","2.5 数据类型",[14,50719,50720],{},[20,50721],{"alt":22,"src":50722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[59,50724,50725,50728],{},[62,50726,50727],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[62,50729,50730],{},"算数运算符：",[14,50732,50733],{},[20,50734],{"alt":22,"src":50735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[59,50737,50738],{"start":1171},[62,50739,50740],{},"数字类型（Number）",[14,50742,50743],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50745,50746],{},[20,50747],{"alt":22,"src":50748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[59,50750,50751],{"start":1186},[62,50752,50753],{},"字符串类型（string）",[14,50755,50756],{},[20,50757],{"alt":22,"src":50758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50760,50761],{},"反引号也是可以使用的",[14,50763,50764],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50766,50767],{},"例如：document.write(\"我今年\"+age+\"岁\")",[59,50769,50770],{"start":1192},[62,50771,50772],{},"模板字符串",[14,50774,50775],{},[20,50776],{"alt":22,"src":50777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50779,50780],{},"类似于python的字符串格式化",[59,50782,50783],{"start":1206},[62,50784,50785],{},"布尔类型",[14,50787,50788],{},"true 和 false",[59,50790,50791],{"start":1212},[62,50792,50793],{},"未定义类型（underfined）",[14,50795,50796],{},"表示没有赋值",[14,50798,50799],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50801,50802],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[59,50804,50805],{"start":1303},[62,50806,50807],{},"null（空类型）",[14,50809,50810],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50812,50813],{},"赋值了，但是内容为空",[96,50815,50817],{"className":50618,"code":50816,"language":50620,"meta":22,"style":22},"typeof null\n输出的是'object'，是一个对象数据类型\n",[102,50818,50819,50824],{"__ignoreMap":22},[105,50820,50821],{"class":107,"line":108},[105,50822,50823],{"class":115},"typeof null\n",[105,50825,50826],{"class":107,"line":28},[105,50827,50828],{"class":115},"输出的是'object'，是一个对象数据类型\n",[59,50830,50831],{"start":1309},[62,50832,50833],{},"控制台检测数据类型",[14,50835,50836],{},[20,50837],{"alt":22,"src":50838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[59,50840,50841],{"start":1321},[62,50842,50843],{},"类型转换",[14,50845,50846],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50848,50849],{},"转换方式：隐式转换和显示转换",[14,50851,50852],{},"①隐式转换",[1123,50854,50855,50858,50861,50864],{},[62,50856,50857],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[62,50859,50860],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[62,50862,50863],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[62,50865,50866],{},"任何数据和字符串相加结果都是字符串",[14,50868,50869],{},"②显示转换",[14,50871,50872],{},[20,50873],{"alt":22,"src":50874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50876,50877],{},[20,50878],{"alt":22,"src":50879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50881,50882],{},"在输入的时候要用好隐式转换，简单写起来",[14,50884,50885],{},"let num = +prompt(’请输入数字：‘)",[14,50887,50888],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50890,50891],{},"console.log(parseInt('12.333px'))",[14,50893,50894],{},"输出为：12",[14,50896,50897],{},"console.log(parseInt('a'a'a12.333px'))",[14,50899,50900],{},"输出：NaN",[47,50902,50904],{"id":50903},"_26-运算符","2.6 运算符",[76,50906,50908],{"id":50907},"_261-赋值运算符","2.6.1 赋值运算符",[14,50910,50911],{},[20,50912],{"alt":22,"src":50913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[76,50915,50917],{"id":50916},"_262-一元运算符","2.6.2 一元运算符",[14,50919,50920],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,50922,50923],{},[20,50924],{"alt":22,"src":50925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,50927,50928],{},[20,50929],{"alt":22,"src":50930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,50932,50933],{},"两者的区别：",[14,50935,50936],{},[20,50937],{"alt":22,"src":50938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,50940,50941],{},"前置先自加；后置后加，代码执行完之后再加",[76,50943,50945],{"id":50944},"_263-比较运算符","2.6.3 比较运算符",[14,50947,50948],{},[20,50949],{"alt":22,"src":50950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,50952,50953],{},"比较运算符也有隐式转换",[14,50955,50956],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,50958,50959],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,50961,50962],{},"要使用三等，开发的时候",[14,50964,50965],{},"NaN不等于任何人，包括它自己",[14,50967,50968],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,50970,50971],{},"7\u002F10=0.7",[14,50973,50974],{},"最后：0.5+0.2=0.7",[14,50976,50977],{},"字符串比较，比较的是字符对应的ASCII码",[76,50979,50981],{"id":50980},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,50983,50984],{},[20,50985],{"alt":22,"src":50986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,50988,50989],{},[20,50990],{"alt":22,"src":50991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,50993,50994],{},[20,50995],{"alt":22,"src":50996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,50998,50999],{},"上述题目选D",[14,51001,51002],{},"与真2假1；或真1假2",[76,51004,51006],{"id":51005},"_265-运算符优先级","2.6.5 运算符优先级",[14,51008,51009],{},[20,51010],{"alt":22,"src":51011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51013,51014],{},"先算逻辑与，后算逻辑或",[47,51016,51018],{"id":51017},"_27-语句","2.7 语句",[14,51020,51021],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51023,51024],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51026,51027],{},[20,51028],{"alt":22,"src":51029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51031,51032],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51034,51035],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[76,51037,51039],{"id":51038},"_271-分支语句","2.7.1 分支语句",[21990,51041,51043],{"id":51042},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51045,51046],{},"if语句单行简单的话，可以不写{}，写在一行就行",[59,51048,51049],{},[62,51050,51051],{},"单分支语句",[14,51053,51054],{},[20,51055],{"alt":22,"src":51056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51058,51059],{},"除了0，所有数字都为真",[96,51061,51063],{"className":50618,"code":51062,"language":50620,"meta":22,"style":22},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[102,51064,51065,51070,51075,51080,51084],{"__ignoreMap":22},[105,51066,51067],{"class":107,"line":108},[105,51068,51069],{"class":115},"if（0) {\n",[105,51071,51072],{"class":107,"line":28},[105,51073,51074],{"class":115},"    let a=1\n",[105,51076,51077],{"class":107,"line":1171},[105,51078,51079],{"class":115},"    alert(typeof a)\n",[105,51081,51082],{"class":107,"line":1186},[105,51083,1556],{"class":115},[105,51085,51086],{"class":107,"line":1192},[105,51087,51088],{"class":115},"不输出，括号为假\n",[59,51090,51091],{"start":28},[62,51092,51093],{},"双分支语句",[14,51095,51096],{},[20,51097],{"alt":22,"src":51098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[59,51100,51101],{"start":1171},[62,51102,51103],{},"多分支语句",[14,51105,51106],{},[20,51107],{"alt":22,"src":51108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21990,51110,51112],{"id":51111},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51114,51115],{},[20,51116],{"alt":22,"src":51117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21990,51119,51121],{"id":51120},"_2713-switch语句","2.7.1.3 switch语句",[14,51123,51124],{},[20,51125],{"alt":22,"src":51126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51128,51129],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[76,51131,51133],{"id":51132},"_272-循环语句","2.7.2 循环语句",[21990,51135,51137],{"id":51136},"_2721-断点演示","2.7.2.1 断点演示",[14,51139,51140],{},[20,51141],{"alt":22,"src":51142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21990,51144,51146],{"id":51145},"_2722-while循环","2.7.2.2 while循环",[14,51148,51149],{},[20,51150],{"alt":22,"src":51151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51153,51154],{},[20,51155],{"alt":22,"src":51156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21990,51158,51160],{"id":51159},"_2723-for循环","2.7.2.3 for循环",[14,51162,51163],{},[20,51164],{"alt":22,"src":51165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51167,51168],{},"for(;;) {",[14,51170,1062],{},[14,51172,51173],{},"表示无限循环",[14,51175,51176],{},[20,51177],{"alt":22,"src":51178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21990,51180,51182],{"id":51181},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51184,51185],{},[20,51186],{"alt":22,"src":51187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[47,51189,51191],{"id":51190},"_28-数组","2.8 数组",[76,51193,51195],{"id":51194},"_281-基础认识","2.8.1 基础认识",[14,51197,51198],{},[20,51199],{"alt":22,"src":51200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51202,51203],{},[20,51204],{"alt":22,"src":51205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51207,51208],{},[20,51209],{"alt":22,"src":51210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51212,51213],{},[20,51214],{"alt":22,"src":51215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[76,51217,51219],{"id":51218},"_282-操作数组","2.8.2 操作数组",[14,51221,51222],{},[20,51223],{"alt":22,"src":51224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[59,51226,51227],{},[62,51228,51229],{},"添加元素",[14,51231,51232],{},[20,51233],{"alt":22,"src":51234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51236,51237],{},"console.log(arr.push('green'))",[14,51239,51240],{},"输出结果：为新数组的长度",[14,51242,51243],{},[20,51244],{"alt":22,"src":51245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51247,51248],{},"push用的非常多，一定要记住",[59,51250,51251],{},[62,51252,51253],{},"删除元素",[14,51255,51256],{},[20,51257],{"alt":22,"src":51258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51260,51261],{},[20,51262],{"alt":22,"src":51263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51265,51266],{},[20,51267],{"alt":22,"src":51268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[76,51270,51272],{"id":51271},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[96,51274,51276],{"className":50618,"code":51275,"language":50620,"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",[102,51277,51278,51293,51309,51313,51322,51340,51364,51386,51400,51408,51415,51427,51438,51442,51446,51453,51465,51480,51493,51512,51529,51544,51556,51568,51580,51584,51588,51599,51609,51621,51633,51645,51656,51660,51664,51676,51680,51694,51698,51702,51713,51727,51739,51753,51757,51766,51775,51779,51788,51792,51801,51806,51811,51824,51852,51857,51862,51887,51892,51896,51901,51906,51921,51925,51930,51960,51972,51988,52004,52018,52023,52030,52034,52039,52052,52060,52068,52072],{"__ignoreMap":22},[105,51279,51280,51283,51287,51290],{"class":107,"line":108},[105,51281,51282],{"class":115},"\u003C!",[105,51284,51286],{"class":51285},"s9eBZ","DOCTYPE",[105,51288,51289],{"class":1954}," html",[105,51291,51292],{"class":115},">\n",[105,51294,51295,51297,51299,51302,51304,51307],{"class":107,"line":28},[105,51296,1026],{"class":115},[105,51298,50620],{"class":51285},[105,51300,51301],{"class":1954}," lang",[105,51303,161],{"class":115},[105,51305,51306],{"class":220},"\"en\"",[105,51308,51292],{"class":115},[105,51310,51311],{"class":107,"line":1171},[105,51312,2391],{"emptyLinePlaceholder":32},[105,51314,51315,51317,51320],{"class":107,"line":1186},[105,51316,1026],{"class":115},[105,51318,51319],{"class":51285},"head",[105,51321,51292],{"class":115},[105,51323,51324,51327,51330,51333,51335,51338],{"class":107,"line":1192},[105,51325,51326],{"class":115},"    \u003C",[105,51328,51329],{"class":51285},"meta",[105,51331,51332],{"class":1954}," charset",[105,51334,161],{"class":115},[105,51336,51337],{"class":220},"\"UTF-8\"",[105,51339,51292],{"class":115},[105,51341,51342,51344,51346,51349,51351,51354,51357,51359,51362],{"class":107,"line":1206},[105,51343,51326],{"class":115},[105,51345,51329],{"class":51285},[105,51347,51348],{"class":1954}," http-equiv",[105,51350,161],{"class":115},[105,51352,51353],{"class":220},"\"X-UA-Compatible\"",[105,51355,51356],{"class":1954}," content",[105,51358,161],{"class":115},[105,51360,51361],{"class":220},"\"IE=edge\"",[105,51363,51292],{"class":115},[105,51365,51366,51368,51370,51372,51374,51377,51379,51381,51384],{"class":107,"line":1212},[105,51367,51326],{"class":115},[105,51369,51329],{"class":51285},[105,51371,14912],{"class":1954},[105,51373,161],{"class":115},[105,51375,51376],{"class":220},"\"viewport\"",[105,51378,51356],{"class":1954},[105,51380,161],{"class":115},[105,51382,51383],{"class":220},"\"width=device-width, initial-scale=1.0\"",[105,51385,51292],{"class":115},[105,51387,51388,51390,51393,51396,51398],{"class":107,"line":1303},[105,51389,51326],{"class":115},[105,51391,51392],{"class":51285},"title",[105,51394,51395],{"class":115},">Document\u003C\u002F",[105,51397,51392],{"class":51285},[105,51399,51292],{"class":115},[105,51401,51402,51404,51406],{"class":107,"line":1309},[105,51403,51326],{"class":115},[105,51405,5118],{"class":51285},[105,51407,51292],{"class":115},[105,51409,51410,51413],{"class":107,"line":1321},[105,51411,51412],{"class":51285},"        *",[105,51414,15564],{"class":115},[105,51416,51417,51420,51423,51425],{"class":107,"line":1603},[105,51418,51419],{"class":164},"            margin",[105,51421,51422],{"class":115},": ",[105,51424,307],{"class":164},[105,51426,1282],{"class":115},[105,51428,51429,51432,51434,51436],{"class":107,"line":1608},[105,51430,51431],{"class":164},"            padding",[105,51433,51422],{"class":115},[105,51435,307],{"class":164},[105,51437,1282],{"class":115},[105,51439,51440],{"class":107,"line":1614},[105,51441,2520],{"class":115},[105,51443,51444],{"class":107,"line":1619},[105,51445,2391],{"emptyLinePlaceholder":32},[105,51447,51448,51451],{"class":107,"line":1633},[105,51449,51450],{"class":1954},"        .box",[105,51452,15564],{"class":115},[105,51454,51455,51458,51460,51463],{"class":107,"line":1638},[105,51456,51457],{"class":164},"            display",[105,51459,51422],{"class":115},[105,51461,51462],{"class":164},"flex",[105,51464,1282],{"class":115},[105,51466,51467,51470,51472,51475,51478],{"class":107,"line":1644},[105,51468,51469],{"class":164},"            width",[105,51471,51422],{"class":115},[105,51473,51474],{"class":164},"700",[105,51476,51477],{"class":111},"px",[105,51479,1282],{"class":115},[105,51481,51482,51485,51487,51489,51491],{"class":107,"line":1665},[105,51483,51484],{"class":164},"            height",[105,51486,51422],{"class":115},[105,51488,3964],{"class":164},[105,51490,51477],{"class":111},[105,51492,1282],{"class":115},[105,51494,51495,51498,51500,51502,51504,51507,51510],{"class":107,"line":1670},[105,51496,51497],{"class":164},"            border-left",[105,51499,51422],{"class":115},[105,51501,333],{"class":164},[105,51503,51477],{"class":111},[105,51505,51506],{"class":164}," solid",[105,51508,51509],{"class":164}," pink",[105,51511,1282],{"class":115},[105,51513,51514,51517,51519,51521,51523,51525,51527],{"class":107,"line":1684},[105,51515,51516],{"class":164},"            border-bottom",[105,51518,51422],{"class":115},[105,51520,333],{"class":164},[105,51522,51477],{"class":111},[105,51524,51506],{"class":164},[105,51526,51509],{"class":164},[105,51528,1282],{"class":115},[105,51530,51531,51533,51535,51537,51539,51542],{"class":107,"line":1689},[105,51532,51419],{"class":164},[105,51534,51422],{"class":115},[105,51536,772],{"class":164},[105,51538,51477],{"class":111},[105,51540,51541],{"class":164}," auto",[105,51543,1282],{"class":115},[105,51545,51546,51549,51551,51554],{"class":107,"line":1718},[105,51547,51548],{"class":164},"            justify-content",[105,51550,51422],{"class":115},[105,51552,51553],{"class":164},"space-around",[105,51555,1282],{"class":115},[105,51557,51558,51561,51563,51566],{"class":107,"line":1723},[105,51559,51560],{"class":164},"            align-items",[105,51562,51422],{"class":115},[105,51564,51565],{"class":164},"flex-end",[105,51567,1282],{"class":115},[105,51569,51570,51573,51575,51578],{"class":107,"line":1740},[105,51571,51572],{"class":164},"            text-align",[105,51574,51422],{"class":115},[105,51576,51577],{"class":164},"center",[105,51579,1282],{"class":115},[105,51581,51582],{"class":107,"line":1745},[105,51583,2520],{"class":115},[105,51585,51586],{"class":107,"line":1750},[105,51587,2391],{"emptyLinePlaceholder":32},[105,51589,51590,51592,51594,51597],{"class":107,"line":1755},[105,51591,51450],{"class":1954},[105,51593,1076],{"class":111},[105,51595,51596],{"class":51285},"div",[105,51598,15564],{"class":115},[105,51600,51601,51603,51605,51607],{"class":107,"line":1769},[105,51602,51457],{"class":164},[105,51604,51422],{"class":115},[105,51606,51462],{"class":164},[105,51608,1282],{"class":115},[105,51610,51611,51613,51615,51617,51619],{"class":107,"line":1774},[105,51612,51469],{"class":164},[105,51614,51422],{"class":115},[105,51616,772],{"class":164},[105,51618,51477],{"class":111},[105,51620,1282],{"class":115},[105,51622,51623,51626,51628,51631],{"class":107,"line":2568},[105,51624,51625],{"class":164},"            background-color",[105,51627,51422],{"class":115},[105,51629,51630],{"class":164},"pink",[105,51632,1282],{"class":115},[105,51634,51635,51638,51640,51643],{"class":107,"line":2582},[105,51636,51637],{"class":164},"            flex-direction",[105,51639,51422],{"class":115},[105,51641,51642],{"class":164},"column",[105,51644,1282],{"class":115},[105,51646,51647,51649,51651,51654],{"class":107,"line":2590},[105,51648,51548],{"class":164},[105,51650,51422],{"class":115},[105,51652,51653],{"class":164},"space-between",[105,51655,1282],{"class":115},[105,51657,51658],{"class":107,"line":2595},[105,51659,2520],{"class":115},[105,51661,51662],{"class":107,"line":2601},[105,51663,2391],{"emptyLinePlaceholder":32},[105,51665,51666,51668,51671,51674],{"class":107,"line":2607},[105,51667,51450],{"class":1954},[105,51669,51670],{"class":51285}," div",[105,51672,51673],{"class":51285}," span",[105,51675,15564],{"class":115},[105,51677,51678],{"class":107,"line":2612},[105,51679,2391],{"emptyLinePlaceholder":32},[105,51681,51682,51685,51687,51690,51692],{"class":107,"line":7940},[105,51683,51684],{"class":164},"            margin-top",[105,51686,51422],{"class":115},[105,51688,51689],{"class":164},"-20",[105,51691,51477],{"class":111},[105,51693,1282],{"class":115},[105,51695,51696],{"class":107,"line":7964},[105,51697,2520],{"class":115},[105,51699,51700],{"class":107,"line":7969},[105,51701,2391],{"emptyLinePlaceholder":32},[105,51703,51704,51706,51708,51711],{"class":107,"line":7975},[105,51705,51450],{"class":1954},[105,51707,51670],{"class":51285},[105,51709,51710],{"class":51285}," h4",[105,51712,15564],{"class":115},[105,51714,51715,51718,51720,51723,51725],{"class":107,"line":8002},[105,51716,51717],{"class":164},"            margin-bottom",[105,51719,51422],{"class":115},[105,51721,51722],{"class":164},"-35",[105,51724,51477],{"class":111},[105,51726,1282],{"class":115},[105,51728,51729,51731,51733,51735,51737],{"class":107,"line":8007},[105,51730,51469],{"class":164},[105,51732,51422],{"class":115},[105,51734,472],{"class":164},[105,51736,51477],{"class":111},[105,51738,1282],{"class":115},[105,51740,51741,51744,51746,51749,51751],{"class":107,"line":8013},[105,51742,51743],{"class":164},"            margin-left",[105,51745,51422],{"class":115},[105,51747,51748],{"class":164},"-10",[105,51750,51477],{"class":111},[105,51752,1282],{"class":115},[105,51754,51755],{"class":107,"line":8025},[105,51756,2520],{"class":115},[105,51758,51759,51762,51764],{"class":107,"line":8037},[105,51760,51761],{"class":115},"    \u003C\u002F",[105,51763,5118],{"class":51285},[105,51765,51292],{"class":115},[105,51767,51768,51771,51773],{"class":107,"line":8049},[105,51769,51770],{"class":115},"\u003C\u002F",[105,51772,51319],{"class":51285},[105,51774,51292],{"class":115},[105,51776,51777],{"class":107,"line":9708},[105,51778,2391],{"emptyLinePlaceholder":32},[105,51780,51781,51783,51786],{"class":107,"line":9733},[105,51782,1026],{"class":115},[105,51784,51785],{"class":51285},"body",[105,51787,51292],{"class":115},[105,51789,51790],{"class":107,"line":9756},[105,51791,2391],{"emptyLinePlaceholder":32},[105,51793,51794,51796,51799],{"class":107,"line":9780},[105,51795,51326],{"class":115},[105,51797,51798],{"class":51285},"script",[105,51800,51292],{"class":115},[105,51802,51803],{"class":107,"line":9785},[105,51804,51805],{"class":174},"        \u002F\u002F 1. 四次弹框效果\n",[105,51807,51808],{"class":107,"line":9790},[105,51809,51810],{"class":174},"        \u002F\u002F 声明一个新的数组\n",[105,51812,51813,51816,51819,51821],{"class":107,"line":9795},[105,51814,51815],{"class":111},"        let",[105,51817,51818],{"class":115}," arr ",[105,51820,161],{"class":111},[105,51822,51823],{"class":115}," []\n",[105,51825,51826,51828,51830,51833,51835,51837,51839,51841,51843,51846,51848,51850],{"class":107,"line":9804},[105,51827,3394],{"class":111},[105,51829,1649],{"class":115},[105,51831,51832],{"class":111},"let",[105,51834,9430],{"class":115},[105,51836,161],{"class":111},[105,51838,25103],{"class":164},[105,51840,9437],{"class":115},[105,51842,1579],{"class":111},[105,51844,51845],{"class":164}," 4",[105,51847,3205],{"class":115},[105,51849,2283],{"class":111},[105,51851,12434],{"class":115},[105,51853,51854],{"class":107,"line":9809},[105,51855,51856],{"class":174},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[105,51858,51859],{"class":107,"line":9815},[105,51860,51861],{"class":174},"            \u002F\u002F arr.push(num)\n",[105,51863,51864,51867,51870,51872,51875,51877,51880,51882,51885],{"class":107,"line":9836},[105,51865,51866],{"class":115},"            arr.",[105,51868,51869],{"class":1954},"push",[105,51871,116],{"class":115},[105,51873,51874],{"class":1954},"prompt",[105,51876,116],{"class":115},[105,51878,51879],{"class":220},"`请输入第${",[105,51881,557],{"class":115},[105,51883,51884],{"class":220},"}季度的数据:`",[105,51886,30482],{"class":115},[105,51888,51889],{"class":107,"line":9842},[105,51890,51891],{"class":174},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[105,51893,51894],{"class":107,"line":9856},[105,51895,2520],{"class":115},[105,51897,51898],{"class":107,"line":9862},[105,51899,51900],{"class":174},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[105,51902,51903],{"class":107,"line":9889},[105,51904,51905],{"class":174},"        \u002F\u002F 盒子开头\n",[105,51907,51908,51911,51914,51916,51919],{"class":107,"line":9898},[105,51909,51910],{"class":115},"        document.",[105,51912,51913],{"class":1954},"write",[105,51915,116],{"class":115},[105,51917,51918],{"class":220},"` \u003Cdiv class=\"box\">`",[105,51920,122],{"class":115},[105,51922,51923],{"class":107,"line":9904},[105,51924,2391],{"emptyLinePlaceholder":32},[105,51926,51927],{"class":107,"line":9912},[105,51928,51929],{"class":174},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[105,51931,51932,51934,51936,51938,51940,51942,51944,51946,51948,51951,51954,51956,51958],{"class":107,"line":9917},[105,51933,3394],{"class":111},[105,51935,1649],{"class":115},[105,51937,51832],{"class":111},[105,51939,9430],{"class":115},[105,51941,161],{"class":111},[105,51943,4084],{"class":164},[105,51945,9437],{"class":115},[105,51947,1026],{"class":111},[105,51949,51950],{"class":115}," arr.",[105,51952,51953],{"class":164},"length",[105,51955,3205],{"class":115},[105,51957,2283],{"class":111},[105,51959,12434],{"class":115},[105,51961,51962,51965,51967,51969],{"class":107,"line":16596},[105,51963,51964],{"class":115},"            document.",[105,51966,51913],{"class":1954},[105,51968,116],{"class":115},[105,51970,51971],{"class":220},"`\n",[105,51973,51974,51977,51979,51981,51983,51985],{"class":107,"line":16602},[105,51975,51976],{"class":220},"              \u003Cdiv style=\"height: ${",[105,51978,3871],{"class":115},[105,51980,1006],{"class":220},[105,51982,557],{"class":115},[105,51984,1056],{"class":220},[105,51986,51987],{"class":220},"}px;\">\n",[105,51989,51990,51993,51995,51997,51999,52001],{"class":107,"line":16625},[105,51991,51992],{"class":220},"                \u003Cspan>${",[105,51994,3871],{"class":115},[105,51996,1006],{"class":220},[105,51998,557],{"class":115},[105,52000,1056],{"class":220},[105,52002,52003],{"class":220},"}\u003C\u002Fspan>\n",[105,52005,52006,52009,52011,52013,52015],{"class":107,"line":16631},[105,52007,52008],{"class":220},"                \u003Ch4>第${",[105,52010,557],{"class":115},[105,52012,45551],{"class":111},[105,52014,25103],{"class":164},[105,52016,52017],{"class":220},"}季度\u003C\u002Fh4>\n",[105,52019,52020],{"class":107,"line":16654},[105,52021,52022],{"class":220},"              \u003C\u002Fdiv>          \n",[105,52024,52025,52028],{"class":107,"line":16668},[105,52026,52027],{"class":220},"            `",[105,52029,122],{"class":115},[105,52031,52032],{"class":107,"line":16688},[105,52033,2520],{"class":115},[105,52035,52036],{"class":107,"line":16694},[105,52037,52038],{"class":174},"        \u002F\u002F 盒子结尾\n",[105,52040,52041,52043,52045,52047,52050],{"class":107,"line":16705},[105,52042,51910],{"class":115},[105,52044,51913],{"class":1954},[105,52046,116],{"class":115},[105,52048,52049],{"class":220},"` \u003C\u002Fdiv>`",[105,52051,122],{"class":115},[105,52053,52054,52056,52058],{"class":107,"line":16728},[105,52055,51761],{"class":115},[105,52057,51798],{"class":51285},[105,52059,51292],{"class":115},[105,52061,52062,52064,52066],{"class":107,"line":16750},[105,52063,51770],{"class":115},[105,52065,51785],{"class":51285},[105,52067,51292],{"class":115},[105,52069,52070],{"class":107,"line":16755},[105,52071,2391],{"emptyLinePlaceholder":32},[105,52073,52074,52076,52078],{"class":107,"line":16761},[105,52075,51770],{"class":115},[105,52077,50620],{"class":51285},[105,52079,51292],{"class":115},[76,52081,52083],{"id":52082},"_284-冒泡排序","2.8.4 冒泡排序",[96,52085,52087],{"className":50618,"code":52086,"language":50620,"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",[102,52088,52089,52099,52113,52117,52125,52140,52160,52172,52180,52184,52192,52200,52232,52265,52302,52307,52326,52331,52344,52359,52375,52379,52384,52388,52398,52407,52415,52419],{"__ignoreMap":22},[105,52090,52091,52093,52095,52097],{"class":107,"line":108},[105,52092,51282],{"class":115},[105,52094,51286],{"class":51285},[105,52096,51289],{"class":1954},[105,52098,51292],{"class":115},[105,52100,52101,52103,52105,52107,52109,52111],{"class":107,"line":28},[105,52102,1026],{"class":115},[105,52104,50620],{"class":51285},[105,52106,51301],{"class":1954},[105,52108,161],{"class":115},[105,52110,51306],{"class":220},[105,52112,51292],{"class":115},[105,52114,52115],{"class":107,"line":1171},[105,52116,2391],{"emptyLinePlaceholder":32},[105,52118,52119,52121,52123],{"class":107,"line":1186},[105,52120,1026],{"class":115},[105,52122,51319],{"class":51285},[105,52124,51292],{"class":115},[105,52126,52127,52130,52132,52134,52136,52138],{"class":107,"line":1192},[105,52128,52129],{"class":115},"  \u003C",[105,52131,51329],{"class":51285},[105,52133,51332],{"class":1954},[105,52135,161],{"class":115},[105,52137,51337],{"class":220},[105,52139,51292],{"class":115},[105,52141,52142,52144,52146,52148,52150,52152,52154,52156,52158],{"class":107,"line":1206},[105,52143,52129],{"class":115},[105,52145,51329],{"class":51285},[105,52147,14912],{"class":1954},[105,52149,161],{"class":115},[105,52151,51376],{"class":220},[105,52153,51356],{"class":1954},[105,52155,161],{"class":115},[105,52157,51383],{"class":220},[105,52159,51292],{"class":115},[105,52161,52162,52164,52166,52168,52170],{"class":107,"line":1212},[105,52163,52129],{"class":115},[105,52165,51392],{"class":51285},[105,52167,51395],{"class":115},[105,52169,51392],{"class":51285},[105,52171,51292],{"class":115},[105,52173,52174,52176,52178],{"class":107,"line":1303},[105,52175,51770],{"class":115},[105,52177,51319],{"class":51285},[105,52179,51292],{"class":115},[105,52181,52182],{"class":107,"line":1309},[105,52183,2391],{"emptyLinePlaceholder":32},[105,52185,52186,52188,52190],{"class":107,"line":1321},[105,52187,1026],{"class":115},[105,52189,51785],{"class":51285},[105,52191,51292],{"class":115},[105,52193,52194,52196,52198],{"class":107,"line":1603},[105,52195,52129],{"class":115},[105,52197,51798],{"class":51285},[105,52199,51292],{"class":115},[105,52201,52202,52205,52207,52209,52212,52214,52216,52218,52220,52222,52224,52226,52228,52230],{"class":107,"line":1608},[105,52203,52204],{"class":111},"    let",[105,52206,51818],{"class":115},[105,52208,161],{"class":111},[105,52210,52211],{"class":115}," [",[105,52213,435],{"class":164},[105,52215,12427],{"class":115},[105,52217,409],{"class":164},[105,52219,12427],{"class":115},[105,52221,187],{"class":164},[105,52223,12427],{"class":115},[105,52225,193],{"class":164},[105,52227,12427],{"class":115},[105,52229,333],{"class":164},[105,52231,33231],{"class":115},[105,52233,52234,52236,52238,52240,52242,52244,52246,52248,52250,52252,52254,52257,52259,52261,52263],{"class":107,"line":1614},[105,52235,3192],{"class":111},[105,52237,1649],{"class":115},[105,52239,51832],{"class":111},[105,52241,9430],{"class":115},[105,52243,161],{"class":111},[105,52245,4084],{"class":164},[105,52247,9437],{"class":115},[105,52249,1026],{"class":111},[105,52251,51950],{"class":115},[105,52253,51953],{"class":164},[105,52255,52256],{"class":111}," -",[105,52258,25103],{"class":164},[105,52260,3205],{"class":115},[105,52262,2283],{"class":111},[105,52264,12434],{"class":115},[105,52266,52267,52270,52272,52274,52276,52278,52280,52282,52284,52286,52288,52290,52292,52294,52296,52298,52300],{"class":107,"line":1619},[105,52268,52269],{"class":111},"      for",[105,52271,1649],{"class":115},[105,52273,51832],{"class":111},[105,52275,9492],{"class":115},[105,52277,161],{"class":111},[105,52279,4084],{"class":164},[105,52281,9499],{"class":115},[105,52283,1026],{"class":111},[105,52285,51950],{"class":115},[105,52287,51953],{"class":164},[105,52289,52256],{"class":111},[105,52291,9430],{"class":115},[105,52293,648],{"class":111},[105,52295,25103],{"class":164},[105,52297,9506],{"class":115},[105,52299,2283],{"class":111},[105,52301,12434],{"class":115},[105,52303,52304],{"class":107,"line":1633},[105,52305,52306],{"class":174},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[105,52308,52309,52311,52314,52316,52319,52321,52323],{"class":107,"line":1638},[105,52310,2488],{"class":111},[105,52312,52313],{"class":115}," (arr[j] ",[105,52315,1076],{"class":111},[105,52317,52318],{"class":115}," arr[j ",[105,52320,597],{"class":111},[105,52322,25103],{"class":164},[105,52324,52325],{"class":115},"]) {\n",[105,52327,52328],{"class":107,"line":1644},[105,52329,52330],{"class":174},"          \u002F\u002F 交换两个变量\n",[105,52332,52333,52336,52339,52341],{"class":107,"line":1665},[105,52334,52335],{"class":111},"          let",[105,52337,52338],{"class":115}," tmp ",[105,52340,161],{"class":111},[105,52342,52343],{"class":115}," arr[j]\n",[105,52345,52346,52349,52351,52353,52355,52357],{"class":107,"line":1670},[105,52347,52348],{"class":115},"          arr[j] ",[105,52350,161],{"class":111},[105,52352,52318],{"class":115},[105,52354,597],{"class":111},[105,52356,25103],{"class":164},[105,52358,33231],{"class":115},[105,52360,52361,52364,52366,52368,52370,52372],{"class":107,"line":1684},[105,52362,52363],{"class":115},"          arr[j ",[105,52365,597],{"class":111},[105,52367,25103],{"class":164},[105,52369,4434],{"class":115},[105,52371,161],{"class":111},[105,52373,52374],{"class":115}," tmp\n",[105,52376,52377],{"class":107,"line":1689},[105,52378,2520],{"class":115},[105,52380,52381],{"class":107,"line":1718},[105,52382,52383],{"class":115},"      }\n",[105,52385,52386],{"class":107,"line":1723},[105,52387,2178],{"class":115},[105,52389,52390,52393,52395],{"class":107,"line":1740},[105,52391,52392],{"class":115},"    document.",[105,52394,51913],{"class":1954},[105,52396,52397],{"class":115},"(arr)\n",[105,52399,52400,52403,52405],{"class":107,"line":1745},[105,52401,52402],{"class":115},"  \u003C\u002F",[105,52404,51798],{"class":51285},[105,52406,51292],{"class":115},[105,52408,52409,52411,52413],{"class":107,"line":1750},[105,52410,51770],{"class":115},[105,52412,51785],{"class":51285},[105,52414,51292],{"class":115},[105,52416,52417],{"class":107,"line":1755},[105,52418,2391],{"emptyLinePlaceholder":32},[105,52420,52421,52423,52425],{"class":107,"line":1769},[105,52422,51770],{"class":115},[105,52424,50620],{"class":51285},[105,52426,51292],{"class":115},[14,52428,52429],{},[20,52430],{"alt":22,"src":52431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52433,52434],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52436,52437],{},"let arr = [4, 2, 5, 1, 3]",[14,52439,52440],{},"\u002F\u002F 1.升序排列写法",[14,52442,52443],{},"arr.sort(function (a, b) {",[14,52445,52446],{},"return a - b",[14,52448,52449],{},"})",[14,52451,52452],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52454,52455],{},"\u002F\u002F 降序排列写法",[14,52457,52443],{},[14,52459,52460],{},"return b - a",[14,52462,52449],{},[14,52464,52465],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[47,52467,52469],{"id":52468},"_29-函数","2.9 函数",[14,52471,52472],{},[20,52473],{"alt":22,"src":52474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52476,52477],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52479,52480],{},"函数的声明用function",[14,52482,52483],{},"函数里边可以嵌套函数",[76,52485,52487],{"id":52486},"_291-函数传参","2.9.1 函数传参",[14,52489,52490],{},[20,52491],{"alt":22,"src":52492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52494,52495],{},[20,52496],{"alt":22,"src":52497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1123,52499,52500,52503,52506,52509,52512,52515],{},[62,52501,52502],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[62,52504,52505],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[62,52507,52508],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[62,52510,52511],{},"开发中尽量保持形参和实参个数一致",[62,52513,52514],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[62,52516,52517],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52519,52520],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[76,52522,52524],{"id":52523},"_292-函数的返回值","2.9.2 函数的返回值",[14,52526,52527],{},[20,52528],{"alt":22,"src":52529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52531,52532],{},[20,52533],{"alt":22,"src":52534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1123,52536,52537,52540,52543,52546,52549],{},[62,52538,52539],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[62,52541,52542],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[62,52544,52545],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[62,52547,52548],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[62,52550,52551],{},"断点调试:进入函数内部看执行过程F11",[76,52553,52555],{"id":52554},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[96,52557,52559],{"className":50618,"code":52558,"language":50620,"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",[102,52560,52561,52566,52571,52575,52580],{"__ignoreMap":22},[105,52562,52563],{"class":107,"line":108},[105,52564,52565],{"class":115},"    function fn(a, b) {\n",[105,52567,52568],{"class":107,"line":28},[105,52569,52570],{"class":115},"      console.log(a + b);\n",[105,52572,52573],{"class":107,"line":1171},[105,52574,2178],{"class":115},[105,52576,52577],{"class":107,"line":1186},[105,52578,52579],{"class":115},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[105,52581,52582],{"class":107,"line":1192},[105,52583,52584],{"class":115},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[76,52586,52588],{"id":52587},"_294-作用域","2.9.4 作用域",[1123,52590,52591,52597,52602,52605,52608],{},[62,52592,52593,52594],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[265,52595,52596],{},"作用域",[62,52598,52599],{},[265,52600,52601],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[62,52603,52604],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[62,52606,52607],{},"函数内部可以直接所使用全局变量",[62,52609,52610],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52612,14625],{},[96,52614,52616],{"className":50618,"code":52615,"language":50620,"meta":22,"style":22},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[102,52617,52618,52623,52628,52632,52637,52642,52647],{"__ignoreMap":22},[105,52619,52620],{"class":107,"line":108},[105,52621,52622],{"class":115},"    function fun() {\n",[105,52624,52625],{"class":107,"line":28},[105,52626,52627],{"class":115},"      num = 10\n",[105,52629,52630],{"class":107,"line":1171},[105,52631,2178],{"class":115},[105,52633,52634],{"class":107,"line":1186},[105,52635,52636],{"class":115},"    fun()\n",[105,52638,52639],{"class":107,"line":1192},[105,52640,52641],{"class":115},"    console.log(num)\n",[105,52643,52644],{"class":107,"line":1206},[105,52645,52646],{"class":115},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[105,52648,52649],{"class":107,"line":1212},[105,52650,52651],{"class":115},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1123,52653,52654,52657],{},[62,52655,52656],{},"函数内部的形参可以看做是局部变量",[62,52658,52659],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52661,52662,52663],{},"变量访问原则： ",[265,52664,52665],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[76,52667,52669],{"id":52668},"_295-匿名函数","2.9.5 匿名函数",[14,52671,52672],{},"函数可以分为具名函数和匿名函数",[14,52674,52675],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[59,52677,52678],{},[62,52679,52680],{},"函数表达式",[14,52682,52683],{},[20,52684],{"alt":22,"src":52685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52687,52688],{},"里边也可以写参数",[14,52690,52691],{},"具名函数调用位置可以随意调整；",[14,52693,52694],{},"匿名函数函数表达式形式只能在声明后才可以使用",[59,52696,52697],{"start":28},[62,52698,52699],{},"立即执行函数",[14,52701,52702],{},[20,52703],{"alt":22,"src":52704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52706,52707],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52709,52710],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52712,52713],{},"(function () {})();",[14,52715,52716],{},"不要落下最后的;",[14,52718,52719],{},"立即执行函数必须要加;",[14,52721,52722],{},"分号写前写后都没问题",[14,52724,52725],{},"写前：",[14,52727,52728],{},"(function() {})()",[14,52730,52731],{},";(function () {})();",[14,52733,52734],{},"写后:",[14,52736,52737],{},"(function() {})();",[14,52739,52713],{},[14,52741,52742],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52744,52745],{},"还有一种写法：",[14,52747,52748],{},"(function(){}());",[14,52750,52751],{},"或者:",[14,52753,52754],{},"!function(){}();",[14,52756,52757],{},"立即执行函数有时候也是可以加名字的：",[14,52759,52760],{},"(function flexible(window,document) {}(window,document));",[14,52762,52763],{},"省一些调用方法",[76,52765,52767],{"id":52766},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52769,52770],{},[20,52771],{"alt":22,"src":52772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52774,52775],{},"这样就不用非得给x,y初始化了",[14,52777,52778],{},[20,52779],{"alt":22,"src":52780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52782,52783],{},"代码执行时先看左边",[14,52785,52786],{},"例如：console.log(false && 3+5)",[14,52788,52789],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52791,52792],{},"&&都是真时，就返回最后一个真值",[14,52794,52795],{},"console.log(11 && 22)",[14,52797,52798],{},"输出22",[14,52800,52801],{},"逻辑与：遇真则真",[14,52803,14625],{},[14,52805,52806],{},"let age=1",[14,52808,52809],{},"console.log(11 || age++)",[14,52811,52812],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52814,52815],{},"console.log(11 || 22)",[14,52817,52818],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52820,52821],{},"||如果都是假的话，就取最后一个假的值了",[76,52823,52825],{"id":52824},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52827,52828],{},"显示转换：",[14,52830,52831,52834,52835],{},[265,52832,52833],{},"记忆","： ",[265,52836,52837],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52839,52840],{},"空字符串为假，其他字符串全为真",[14,52842,52843],{},[20,52844],{"alt":22,"src":52845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52847,52848],{},"隐式转换：",[14,52850,52851],{},[20,52852],{"alt":22,"src":52853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52855,52856],{},"隐式转换:",[14,52858,52859],{},"null+3=3",[14,52861,52862],{},"undefined+3=NaN",[14,52864,52865],{},"null==undefined 输出true,他两个都当0看",[14,52867,52868],{},"null===undefined 输出false",[14,52870,52871],{},"undefined做任何操作都是NaN",[14,52873,52874],{},"NaN不等于NaN，NaN表示计算错误",[47,52876,52878],{"id":52877},"_210-对象","2.10 对象",[76,52880,52882],{"id":52881},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52884,52885],{},"对象也是一种数据类型，里边的数据是无序的",[14,52887,52888],{},"对象由属性和方法组成",[14,52890,52891],{},[20,52892],{"alt":22,"src":52893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52895,52896],{},[20,52897],{"alt":22,"src":52898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52900,52901],{},[20,52902],{"alt":22,"src":52903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[76,52905,52907],{"id":52906},"_2102-对象属性","2.10.2 对象属性",[14,52909,52910],{},[20,52911],{"alt":22,"src":52912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[59,52914,52915],{},[62,52916,52917],{},"查询对象",[14,52919,52920],{},"对象名.属性 goods.uname",[14,52922,52923],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,52925,52926],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,52928,52929],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,52931,52932],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[59,52934,52935],{"start":28},[62,52936,52937],{},"重新赋值",[14,52939,52940],{},"对象名.属性=新值",[59,52942,52943],{"start":1171},[62,52944,52945],{},"增加新数据",[14,52947,52940],{},[59,52949,52950],{"start":1186},[62,52951,52952],{},"删除对象中的属性",[14,52954,52955],{},"delete 对象名.属性",[76,52957,52959],{"id":52958},"_2103-对象方法","2.10.3 对象方法",[14,52961,52962],{},[20,52963],{"alt":22,"src":52964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,52966,52967],{},"后边跟的是匿名函数",[14,52969,52970],{},"对象外面的叫函数；对象内部的叫方法",[14,52972,52973],{},[20,52974],{"alt":22,"src":52975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[76,52977,52979],{"id":52978},"_2104-遍历对象","2.10.4 遍历对象",[14,52981,52982],{},"理解为加括号的python字典遍历",[14,52984,52985],{},[20,52986],{"alt":22,"src":52987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,52989,52990],{},"k是字符串类型",[14,52992,52993],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[96,52995,52997],{"className":50618,"code":52996,"language":50620,"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",[102,52998,52999,53004,53009,53014,53019],{"__ignoreMap":22},[105,53000,53001],{"class":107,"line":108},[105,53002,53003],{"class":115},"   let arr = [1, 2, 3]\n",[105,53005,53006],{"class":107,"line":28},[105,53007,53008],{"class":115},"    for (let k in arr) {\n",[105,53010,53011],{"class":107,"line":1171},[105,53012,53013],{"class":115},"      console.log(k)\n",[105,53015,53016],{"class":107,"line":1186},[105,53017,53018],{"class":115},"      console.log(arr[k])\n",[105,53020,53021],{"class":107,"line":1192},[105,53022,2178],{"class":115},[14,53024,53025],{},[20,53026],{"alt":22,"src":53027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53029,53030],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53032,53033],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53035,53036],{},"for in 得到的k是属性名",[51798,53038,53039],{},"\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,53041,53042],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[76,53044,53046],{"id":53045},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53048,53049],{},"数组中放对象信息",[96,53051,53055],{"className":53052,"code":53053,"language":53054,"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",[102,53056,53057,53065,53070,53075,53080,53085,53090,53095,53100,53105,53110,53115,53120,53124,53128],{"__ignoreMap":22},[105,53058,53059,53061,53063],{"class":107,"line":108},[105,53060,1026],{"class":115},[105,53062,51798],{"class":51285},[105,53064,51292],{"class":115},[105,53066,53067],{"class":107,"line":28},[105,53068,53069],{"class":115},"    let students = [\n",[105,53071,53072],{"class":107,"line":1171},[105,53073,53074],{"class":115},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[105,53076,53077],{"class":107,"line":1186},[105,53078,53079],{"class":115},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[105,53081,53082],{"class":107,"line":1192},[105,53083,53084],{"class":115},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[105,53086,53087],{"class":107,"line":1206},[105,53088,53089],{"class":115},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[105,53091,53092],{"class":107,"line":1212},[105,53093,53094],{"class":115},"    ]\n",[105,53096,53097],{"class":107,"line":1303},[105,53098,53099],{"class":115},"    for (let i = 0; i \u003C students.length; i++) {\n",[105,53101,53102],{"class":107,"line":1309},[105,53103,53104],{"class":115},"      for (let k in students[i]) {\n",[105,53106,53107],{"class":107,"line":1321},[105,53108,53109],{"class":115},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[105,53111,53112],{"class":107,"line":1603},[105,53113,53114],{"class":115},"        \u002F\u002F输出每个人的名字：\n",[105,53116,53117],{"class":107,"line":1608},[105,53118,53119],{"class":115},"        \u002F\u002Fconsole.log(students[i].name)\n",[105,53121,53122],{"class":107,"line":1614},[105,53123,52383],{"class":115},[105,53125,53126],{"class":107,"line":1619},[105,53127,2178],{"class":115},[105,53129,53130,53132,53134],{"class":107,"line":1633},[105,53131,52402],{"class":115},[105,53133,51798],{"class":51285},[105,53135,51292],{"class":115},[76,53137,53139],{"id":53138},"_2106-内置对象","2.10.6 内置对象",[14,53141,53142],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[59,53144,53145],{},[62,53146,53147],{},"数学对象Math",[14,53149,53150],{},[20,53151],{"alt":22,"src":53152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53154,53155],{},[354,53156,53159],{"href":53157,"rel":53158},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23858],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53161,53162],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53164,53165],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53167,53168],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53170,53171],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53173,53174],{},"null属于对象数据类型",[59,53176,53177],{"start":28},[62,53178,53179],{},"生成任意范围随机数",[14,53181,53182],{},[20,53183],{"alt":22,"src":53184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53186,53187],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53189,53190],{},"乘以几就取不到几",[14,53192,53193],{},"取数组中的随机元素：",[14,53195,53196],{},"let arr = ['red', 'green', 'blue']",[14,53198,53199],{},"let random = Math.floor(Math.random() * arr.length)",[14,53201,53202],{},"console.log(arr[random])",[14,53204,53205],{},"这个函数得到的是全闭区间",[14,53207,53208],{},"function getRandom(N, M) {",[14,53210,53211],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53213,1062],{},[14,53215,53216],{},"console.log(getRandom(4, 8))",[76,53218,53220],{"id":53219},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53222,53223],{},[20,53224],{"alt":22,"src":53225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53227,53228],{},[20,53229],{"alt":22,"src":53230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53232,53233],{},[20,53234],{"alt":22,"src":53235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53237,53238],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53240,53241],{},[20,53242],{"alt":22,"src":53243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53245,53246],{},[20,53247],{"alt":22,"src":53248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53250,53251],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53253,53254],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53256,53257],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5118,53259,53260],{},"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":28,"depth":28,"links":53262},[53263,53271,53272,53273,53274,53275,53282,53286,53292,53301],{"id":50453,"depth":28,"text":50454,"children":53264},[53265,53266,53267,53268,53269,53270],{"id":50457,"depth":1171,"text":50458},{"id":50474,"depth":1171,"text":50475},{"id":50514,"depth":1171,"text":50515},{"id":50526,"depth":1171,"text":50527},{"id":50535,"depth":1171,"text":50536},{"id":50583,"depth":1171,"text":50584},{"id":50593,"depth":28,"text":50594},{"id":50681,"depth":28,"text":50682},{"id":50704,"depth":28,"text":50705},{"id":50716,"depth":28,"text":50717},{"id":50903,"depth":28,"text":50904,"children":53276},[53277,53278,53279,53280,53281],{"id":50907,"depth":1171,"text":50908},{"id":50916,"depth":1171,"text":50917},{"id":50944,"depth":1171,"text":50945},{"id":50980,"depth":1171,"text":50981},{"id":51005,"depth":1171,"text":51006},{"id":51017,"depth":28,"text":51018,"children":53283},[53284,53285],{"id":51038,"depth":1171,"text":51039},{"id":51132,"depth":1171,"text":51133},{"id":51190,"depth":28,"text":51191,"children":53287},[53288,53289,53290,53291],{"id":51194,"depth":1171,"text":51195},{"id":51218,"depth":1171,"text":51219},{"id":51271,"depth":1171,"text":51272},{"id":52082,"depth":1171,"text":52083},{"id":52468,"depth":28,"text":52469,"children":53293},[53294,53295,53296,53297,53298,53299,53300],{"id":52486,"depth":1171,"text":52487},{"id":52523,"depth":1171,"text":52524},{"id":52554,"depth":1171,"text":52555},{"id":52587,"depth":1171,"text":52588},{"id":52668,"depth":1171,"text":52669},{"id":52766,"depth":1171,"text":52767},{"id":52824,"depth":1171,"text":52825},{"id":52877,"depth":28,"text":52878,"children":53302},[53303,53304,53305,53306,53307,53308,53309],{"id":52881,"depth":1171,"text":52882},{"id":52906,"depth":1171,"text":52907},{"id":52958,"depth":1171,"text":52959},{"id":52978,"depth":1171,"text":52979},{"id":53045,"depth":1171,"text":53046},{"id":53138,"depth":1171,"text":53139},{"id":53219,"depth":1171,"text":53220},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50445,"description":23369},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53316,"title":53317,"body":53318,"description":23369,"extension":30,"meta":76658,"navigation":32,"path":76659,"seo":76660,"stem":76661,"__hash__":76662},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53319,"toc":76598},[53320,53323,53326,53329,53334,53337,53340,53343,53347,53351,53357,53362,53370,53377,53380,53384,53389,53394,53399,53402,53405,53416,53419,53423,53426,53429,53434,53439,53444,53447,53450,53542,53545,53550,53553,53558,53561,53564,53569,53572,53577,53581,53584,53598,53602,53607,53610,53613,53617,53622,53625,53629,53633,53638,53642,53647,53650,53653,53656,53659,53662,53665,53670,53675,53703,53706,53709,53712,53717,53720,53723,53726,53729,53733,53762,53766,53771,53776,53779,53782,53785,53790,53905,53910,53915,54076,54081,54084,54088,54093,54098,54101,54104,54107,54110,54113,54116,54119,54122,54125,54128,54131,54134,54137,54140,54142,54145,54148,54151,54156,54160,54557,54560,54566,54570,54575,55857,55862,55865,55868,55871,55876,57072,57076,57082,57087,57090,57095,57100,57104,57108,57113,57116,57121,57124,57127,57131,58039,58042,58046,58267,58270,58273,58276,58502,58505,58729,58732,58736,58741,58744,58747,58975,58978,59011,59014,59018,59023,59027,59030,59033,59036,59039,59042,59045,59048,59053,60333,60337,60340,61433,61437,61440,61443,61446,61449,61453,61456,61459,61461,61469,62950,62954,62957,62960,62963,63172,63175,63179,63183,63188,63193,63196,63199,63204,63208,63213,63216,63325,63329,63334,63339,63342,63345,63349,63354,63359,63364,63367,63370,63381,63384,63389,63394,63397,63400,63473,63477,63482,63485,63487,63498,63502,63507,64833,64836,64839,64842,64844,64847,64850,64853,64856,64859,64862,64865,64868,64871,64874,64877,64880,64882,64884,64887,64891,65985,65988,65991,66007,66021,66024,66029,66035,66040,66044,66048,66053,66057,66062,66504,66509,66512,66516,66521,66524,66527,66531,66536,66540,66545,66550,66554,66559,66564,66567,66572,66577,66581,66586,66591,66695,66698,66702,66707,67073,67076,67079,67082,67085,67088,67091,67094,67097,68393,68397,68402,68407,68410,68413,68416,68419,68421,68426,68431,68434,68438,68443,68448,68453,68456,68459,68462,68465,68468,68473,68476,68480,68485,68490,68494,68499,68502,68507,68510,68513,68516,68519,68522,68527,68530,68533,68536,68539,68543,68548,68551,68555,68560,68563,68566,68570,68599,68602,68606,68610,68615,68619,68624,68627,68630,68633,68636,68639,68642,68645,68648,68651,68654,68657,68660,68663,68666,68670,68675,68680,68683,68687,68691,68696,68699,68703,68706,68709,68714,68719,68724,68729,68734,68737,68740,68745,68750,68754,68759,68762,68767,68770,68773,68776,68779,68784,68787,68796,68800,68805,68808,68811,68815,68818,68823,68827,68830,68836,68842,68846,68872,68875,70436,70439,70935,70938,70943,70948,70953,70957,70962,70967,70972,70976,70981,70984,70987,70990,70993,70997,71000,71005,71008,71013,71017,71022,71025,71030,71035,71040,71043,71046,71051,71056,71059,71062,71066,71069,71074,71077,71082,71085,71090,71095,71100,71103,71108,71173,71176,71187,71191,71196,71368,71372,71377,71380,71383,71386,71390,71401,71405,71408,71413,71418,71421,71424,71427,71430,71433,71435,71438,71441,71444,71449,71452,71457,71460,71464,71467,71470,71484,71488,71491,71546,71551,71554,71557,71562,71565,71569,71574,71704,71708,71713,71718,71799,71804,71808,71811,71816,71821,71827,71830,71833,71836,71840,71845,71848,71859,71863,71880,74927,74931,74934,74937,74940,74961,74965,74968,74976,74979,74984,74987,74990,74995,75000,75004,75025,75029,75034,75037,75040,75043,75046,75050,75055,75058,75062,75067,75070,75075,75078,75083,75086,75091,76294,76298,76303,76306,76311,76595],[10,53321,53317],{"id":53322},"_3web-apis",[14,53324,53325],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53327,53328],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53330,53331],{},[20,53332],{"alt":22,"src":53333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53335,53336],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53338,53339],{},"建议数组和对象使用 const 来声明",[14,53341,53342],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[47,53344,53346],{"id":53345},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[76,53348,53350],{"id":53349},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53352,53353,53356],{},[102,53354,53355],{},"document"," = HTML 文件解析后的对象化表示；",[14,53358,53359,53361],{},[102,53360,53355],{}," ≠ HTML 文件本身",[14,53363,53364,53369],{},[265,53365,53366],{},[102,53367,53368],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53371,53372,53376],{},[265,53373,53374],{},[102,53375,53355],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53378,53379],{},"document实际上为window.document的简写",[76,53381,53383],{"id":53382},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53385,53386],{},[20,53387],{"alt":22,"src":53388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53390,53391],{},[20,53392],{"alt":22,"src":53393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53395,53396],{},[20,53397],{"alt":22,"src":53398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53400,53401],{},"console.dir()",[14,53403,53404],{},"dir用来打印对象",[1123,53406,53407,53410,53413],{},[62,53408,53409],{},"任何一个标签，都是一个对象",[62,53411,53412],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[62,53414,53415],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53417,53418],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[76,53420,53422],{"id":53421},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53424,53425],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53427,53428],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53430,53431],{},[265,53432,53433],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[59,53435,53436],{},[62,53437,53438],{},"利用CSS选择器来获取标签元素",[14,53440,53441],{},[20,53442],{"alt":22,"src":53443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53445,53446],{},"里边的选择器必须必须加引号！！！",[14,53448,53449],{},"只选择第一个元素",[96,53451,53453],{"className":53052,"code":53452,"language":53054,"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",[102,53454,53455,53463,53484,53503,53511,53516,53521,53526,53534],{"__ignoreMap":22},[105,53456,53457,53459,53461],{"class":107,"line":108},[105,53458,1026],{"class":115},[105,53460,51785],{"class":51285},[105,53462,51292],{"class":115},[105,53464,53465,53467,53469,53472,53474,53477,53480,53482],{"class":107,"line":28},[105,53466,52129],{"class":115},[105,53468,51596],{"class":51285},[105,53470,53471],{"class":1954}," class",[105,53473,161],{"class":115},[105,53475,53476],{"class":220},"\"box\"",[105,53478,53479],{"class":115},">123\u003C\u002F",[105,53481,51596],{"class":51285},[105,53483,51292],{"class":115},[105,53485,53486,53488,53490,53492,53494,53496,53499,53501],{"class":107,"line":1171},[105,53487,52129],{"class":115},[105,53489,51596],{"class":51285},[105,53491,53471],{"class":1954},[105,53493,161],{"class":115},[105,53495,53476],{"class":220},[105,53497,53498],{"class":115},">456\u003C\u002F",[105,53500,51596],{"class":51285},[105,53502,51292],{"class":115},[105,53504,53505,53507,53509],{"class":107,"line":1186},[105,53506,52129],{"class":115},[105,53508,51798],{"class":51285},[105,53510,51292],{"class":115},[105,53512,53513],{"class":107,"line":1192},[105,53514,53515],{"class":115},"    \u002F\u002F 1.获取匹配的第一个元素\n",[105,53517,53518],{"class":107,"line":1206},[105,53519,53520],{"class":115},"    const box = document.querySelector('div')\n",[105,53522,53523],{"class":107,"line":1212},[105,53524,53525],{"class":115},"    console.dir(box)\n",[105,53527,53528,53530,53532],{"class":107,"line":1303},[105,53529,52402],{"class":115},[105,53531,51798],{"class":51285},[105,53533,51292],{"class":115},[105,53535,53536,53538,53540],{"class":107,"line":1309},[105,53537,51770],{"class":115},[105,53539,51785],{"class":51285},[105,53541,51292],{"class":115},[14,53543,53544],{},"只选123，不选456",[14,53546,53547],{},[20,53548],{"alt":22,"src":53549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53551,53552],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53554,53555],{},[20,53556],{"alt":22,"src":53557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53559,53560],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53562,53563],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[59,53565,53566],{"start":28},[62,53567,53568],{},"其他方法来获取标签元素",[14,53570,53571],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53573,53574],{},[20,53575],{"alt":22,"src":53576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[76,53578,53580],{"id":53579},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53582,53583],{},"设置修改DOM元素内容有两种方式：",[1123,53585,53586,53589,53592,53595],{},[62,53587,53588],{},"元素.innerText=''",[62,53590,53591],{},"元素.innerHTML=''",[62,53593,53594],{},"不写字符串输出数字也是可以的",[62,53596,53597],{},"元素.innerHtml=1",[21990,53599,53601],{"id":53600},"_3131-innertext","3.1.3.1 innerText",[14,53603,53604],{},[20,53605],{"alt":22,"src":53606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53608,53609],{},"思路：实现了修改盒子中的内容！",[14,53611,53612],{},"它只显示纯文本，不解析标签",[21990,53614,53616],{"id":53615},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53618,53619],{},[20,53620],{"alt":22,"src":53621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53623,53624],{},"相比于innerText，他的强大之处在于可以解析标签",[76,53626,53628],{"id":53627},"_314-操作元素属性","3.1.4 操作元素属性",[21990,53630,53632],{"id":53631},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53634,53635],{},[20,53636],{"alt":22,"src":53637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21990,53639,53641],{"id":53640},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53643,53644],{},[20,53645],{"alt":22,"src":53646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53648,53649],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53651,53652],{},"div.style.backgroundColor = 'hotpink'",[14,53654,53655],{},"如果按照css的写法，-表示减，就会出错",[14,53657,53658],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53660,53661],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53663,53664],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53666,53667],{},[20,53668],{"alt":22,"src":53669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53671,53672],{},[20,53673],{"alt":22,"src":53674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[59,53676,53677,53680,53683,53686,53689,53692],{},[62,53678,53679],{},"className这个方式就是修改很多样式的时候来使用的！",[62,53681,53682],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[62,53684,53685],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[62,53687,53688],{},"className为属性名，如果还用class的话就导致与关键字冲突",[62,53690,53691],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[62,53693,53694,53695,53700],{},"解析标签的时候就变为了",[51596,53696],{"className":53697},[53698,53699],"nav","box",[53701,53702],"br",{},[14,53704,53705],{},"例子：",[51596,53707],{"className":53708},[53698],[51798,53710,53711],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53713,53714],{},[20,53715],{"alt":22,"src":53716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53718,53719],{},"追加和删除类名用classList",[14,53721,53722],{},"常用于类似于开关的操作",[14,53724,53725],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53727,53728],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21990,53730,53732],{"id":53731},"_3143-牢记点","3.1.4.3 牢记点",[59,53734,53735,53738,53741,53744,53747,53750,53753,53756,53759],{},[62,53736,53737],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[62,53739,53740],{},"使用style属性操作css时不要忘记引号",[62,53742,53743],{},"使用className或者classList时也不要忘记引号",[62,53745,53746],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[62,53748,53749],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[62,53751,53752],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[62,53754,53755],{},"若： let arr=['1','2',3] arr[0]=1",[62,53757,53758],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[62,53760,53761],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[76,53763,53765],{"id":53764},"_315-操作表单元素","3.1.5 操作表单元素",[59,53767,53768],{},[62,53769,53770],{},"天生的属性",[14,53772,53773],{},[20,53774],{"alt":22,"src":53775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53777,53778],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53780,53781],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53783,53784],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53786,53787],{},[20,53788],{"alt":22,"src":53789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[96,53791,53793],{"className":50618,"code":53792,"language":50620,"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",[102,53794,53795,53800,53832,53837,53842,53847,53852,53856,53861,53866,53883,53895,53900],{"__ignoreMap":22},[105,53796,53797],{"class":107,"line":108},[105,53798,53799],{"class":115},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[105,53801,53802,53804,53807,53810,53812,53815,53817,53819,53821,53823,53825,53827,53830],{"class":107,"line":28},[105,53803,1026],{"class":115},[105,53805,53806],{"class":51285},"input",[105,53808,53809],{"class":1954}," type",[105,53811,161],{"class":115},[105,53813,53814],{"class":220},"\"checkbox\"",[105,53816,14912],{"class":1954},[105,53818,161],{"class":115},[105,53820,7644],{"class":220},[105,53822,14951],{"class":1954},[105,53824,161],{"class":115},[105,53826,7644],{"class":220},[105,53828,53829],{"class":1954}," checked",[105,53831,51292],{"class":115},[105,53833,53834],{"class":107,"line":1171},[105,53835,53836],{"class":115},"不选的话：\n",[105,53838,53839],{"class":107,"line":1186},[105,53840,53841],{"class":115},"const input = document.querySelector('input')\n",[105,53843,53844],{"class":107,"line":1192},[105,53845,53846],{"class":115},"input.checked=false\n",[105,53848,53849],{"class":107,"line":1206},[105,53850,53851],{"class":115},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[105,53853,53854],{"class":107,"line":1212},[105,53855,2391],{"emptyLinePlaceholder":32},[105,53857,53858],{"class":107,"line":1303},[105,53859,53860],{"class":115},"禁用按钮：\n",[105,53862,53863],{"class":107,"line":1309},[105,53864,53865],{"class":115},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[105,53867,53868,53870,53873,53876,53879,53881],{"class":107,"line":1321},[105,53869,1026],{"class":115},[105,53871,53872],{"class":51285},"button",[105,53874,53875],{"class":1954}," disabled",[105,53877,53878],{"class":115},">点击\u003C\u002F",[105,53880,53872],{"class":51285},[105,53882,51292],{"class":115},[105,53884,53885,53887,53889,53891,53893],{"class":107,"line":1603},[105,53886,1026],{"class":115},[105,53888,53872],{"class":51285},[105,53890,53878],{"class":115},[105,53892,53872],{"class":51285},[105,53894,51292],{"class":115},[105,53896,53897],{"class":107,"line":1608},[105,53898,53899],{"class":115},"const bt = document.querySelector('button')\n",[105,53901,53902],{"class":107,"line":1614},[105,53903,53904],{"class":115},"bt.disabled = false\n",[59,53906,53907],{"start":28},[62,53908,53909],{},"自定义属性",[14,53911,53912],{},[20,53913],{"alt":22,"src":53914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[96,53916,53918],{"className":53052,"code":53917,"language":53054,"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",[102,53919,53920,53928,53956,53975,53994,54013,54032,54040,54045,54050,54055,54060,54068],{"__ignoreMap":22},[105,53921,53922,53924,53926],{"class":107,"line":108},[105,53923,1026],{"class":115},[105,53925,51785],{"class":51285},[105,53927,51292],{"class":115},[105,53929,53930,53932,53934,53937,53939,53941,53944,53946,53949,53952,53954],{"class":107,"line":28},[105,53931,52129],{"class":115},[105,53933,51596],{"class":51285},[105,53935,53936],{"class":1954}," data-id",[105,53938,161],{"class":115},[105,53940,3669],{"class":220},[105,53942,53943],{"class":1954}," data-spm",[105,53945,161],{"class":115},[105,53947,53948],{"class":220},"\"我不知道\"",[105,53950,53951],{"class":115},">1\u003C\u002F",[105,53953,51596],{"class":51285},[105,53955,51292],{"class":115},[105,53957,53958,53960,53962,53964,53966,53968,53971,53973],{"class":107,"line":1171},[105,53959,52129],{"class":115},[105,53961,51596],{"class":51285},[105,53963,53936],{"class":1954},[105,53965,161],{"class":115},[105,53967,3692],{"class":220},[105,53969,53970],{"class":115},">2\u003C\u002F",[105,53972,51596],{"class":51285},[105,53974,51292],{"class":115},[105,53976,53977,53979,53981,53983,53985,53987,53990,53992],{"class":107,"line":1186},[105,53978,52129],{"class":115},[105,53980,51596],{"class":51285},[105,53982,53936],{"class":1954},[105,53984,161],{"class":115},[105,53986,3705],{"class":220},[105,53988,53989],{"class":115},">3\u003C\u002F",[105,53991,51596],{"class":51285},[105,53993,51292],{"class":115},[105,53995,53996,53998,54000,54002,54004,54006,54009,54011],{"class":107,"line":1192},[105,53997,52129],{"class":115},[105,53999,51596],{"class":51285},[105,54001,53936],{"class":1954},[105,54003,161],{"class":115},[105,54005,3718],{"class":220},[105,54007,54008],{"class":115},">4\u003C\u002F",[105,54010,51596],{"class":51285},[105,54012,51292],{"class":115},[105,54014,54015,54017,54019,54021,54023,54025,54028,54030],{"class":107,"line":1206},[105,54016,52129],{"class":115},[105,54018,51596],{"class":51285},[105,54020,53936],{"class":1954},[105,54022,161],{"class":115},[105,54024,3739],{"class":220},[105,54026,54027],{"class":115},">5\u003C\u002F",[105,54029,51596],{"class":51285},[105,54031,51292],{"class":115},[105,54033,54034,54036,54038],{"class":107,"line":1212},[105,54035,52129],{"class":115},[105,54037,51798],{"class":51285},[105,54039,51292],{"class":115},[105,54041,54042],{"class":107,"line":1303},[105,54043,54044],{"class":115},"    const one = document.querySelector('div')\n",[105,54046,54047],{"class":107,"line":1309},[105,54048,54049],{"class":115},"    console.log(one.dataset)\n",[105,54051,54052],{"class":107,"line":1321},[105,54053,54054],{"class":115},"    console.log(one.dataset.id)\n",[105,54056,54057],{"class":107,"line":1603},[105,54058,54059],{"class":115},"    console.log(one.dataset.spm)\n",[105,54061,54062,54064,54066],{"class":107,"line":1608},[105,54063,52402],{"class":115},[105,54065,51798],{"class":51285},[105,54067,51292],{"class":115},[105,54069,54070,54072,54074],{"class":107,"line":1614},[105,54071,51770],{"class":115},[105,54073,51785],{"class":51285},[105,54075,51292],{"class":115},[14,54077,54078],{},[20,54079],{"alt":22,"src":54080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54082,54083],{},"document.querySelector选择的是第一个对象（元素）",[76,54085,54087],{"id":54086},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54089,54090],{},[20,54091],{"alt":22,"src":54092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54094,54095],{},[20,54096],{"alt":22,"src":54097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54099,54100],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51798,54102,54103],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54105,54106],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51798,54108,54109],{},"\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,54111,54112],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54114,54115],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54117,54118],{},"单位为毫秒！！！",[14,54120,54121],{},"可以搭配匿名函数来用！！！",[14,54123,54124],{},"setInterval(function () {",[14,54126,54127],{},"alert('两秒执行一次')",[14,54129,54130],{},"}, 2000)",[14,54132,54133],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54135,54136],{},"function fn() {",[14,54138,54139],{},"document.write(1)",[14,54141,1062],{},[14,54143,54144],{},"setInterval(fn, 1000)",[14,54146,54147],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54149,54150],{},"setInterval('fn()', 1000)",[14,54152,54153],{},[20,54154],{"alt":22,"src":54155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21990,54157,54159],{"id":54158},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[96,54161,54163],{"className":50618,"code":54162,"language":50620,"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",[102,54164,54165,54175,54189,54193,54201,54215,54235,54247,54255,54259,54267,54304,54309,54314,54319,54327,54335,54357,54365,54370,54392,54397,54402,54413,54418,54438,54446,54461,54476,54487,54492,54502,54512,54516,54525,54529,54537,54545,54549],{"__ignoreMap":22},[105,54166,54167,54169,54171,54173],{"class":107,"line":108},[105,54168,51282],{"class":115},[105,54170,51286],{"class":51285},[105,54172,51289],{"class":1954},[105,54174,51292],{"class":115},[105,54176,54177,54179,54181,54183,54185,54187],{"class":107,"line":28},[105,54178,1026],{"class":115},[105,54180,50620],{"class":51285},[105,54182,51301],{"class":1954},[105,54184,161],{"class":115},[105,54186,51306],{"class":220},[105,54188,51292],{"class":115},[105,54190,54191],{"class":107,"line":1171},[105,54192,2391],{"emptyLinePlaceholder":32},[105,54194,54195,54197,54199],{"class":107,"line":1186},[105,54196,1026],{"class":115},[105,54198,51319],{"class":51285},[105,54200,51292],{"class":115},[105,54202,54203,54205,54207,54209,54211,54213],{"class":107,"line":1192},[105,54204,52129],{"class":115},[105,54206,51329],{"class":51285},[105,54208,51332],{"class":1954},[105,54210,161],{"class":115},[105,54212,51337],{"class":220},[105,54214,51292],{"class":115},[105,54216,54217,54219,54221,54223,54225,54227,54229,54231,54233],{"class":107,"line":1206},[105,54218,52129],{"class":115},[105,54220,51329],{"class":51285},[105,54222,14912],{"class":1954},[105,54224,161],{"class":115},[105,54226,51376],{"class":220},[105,54228,51356],{"class":1954},[105,54230,161],{"class":115},[105,54232,51383],{"class":220},[105,54234,51292],{"class":115},[105,54236,54237,54239,54241,54243,54245],{"class":107,"line":1212},[105,54238,52129],{"class":115},[105,54240,51392],{"class":51285},[105,54242,51395],{"class":115},[105,54244,51392],{"class":51285},[105,54246,51292],{"class":115},[105,54248,54249,54251,54253],{"class":107,"line":1303},[105,54250,51770],{"class":115},[105,54252,51319],{"class":51285},[105,54254,51292],{"class":115},[105,54256,54257],{"class":107,"line":1309},[105,54258,2391],{"emptyLinePlaceholder":32},[105,54260,54261,54263,54265],{"class":107,"line":1321},[105,54262,1026],{"class":115},[105,54264,51785],{"class":51285},[105,54266,51292],{"class":115},[105,54268,54269,54271,54274,54276,54278,54280,54282,54284,54286,54289,54291,54294,54297,54299,54302],{"class":107,"line":1603},[105,54270,52129],{"class":115},[105,54272,54273],{"class":51285},"textarea",[105,54275,14912],{"class":1954},[105,54277,161],{"class":115},[105,54279,7644],{"class":220},[105,54281,14951],{"class":1954},[105,54283,161],{"class":115},[105,54285,7644],{"class":220},[105,54287,54288],{"class":1954}," cols",[105,54290,161],{"class":115},[105,54292,54293],{"class":220},"\"30\"",[105,54295,54296],{"class":1954}," rows",[105,54298,161],{"class":115},[105,54300,54301],{"class":220},"\"10\"",[105,54303,51292],{"class":115},[105,54305,54306],{"class":107,"line":1608},[105,54307,54308],{"class":115},"        用户注册协议\n",[105,54310,54311],{"class":107,"line":1614},[105,54312,54313],{"class":115},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[105,54315,54316],{"class":107,"line":1619},[105,54317,54318],{"class":115},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[105,54320,54321,54323,54325],{"class":107,"line":1633},[105,54322,51761],{"class":115},[105,54324,54273],{"class":51285},[105,54326,51292],{"class":115},[105,54328,54329,54331,54333],{"class":107,"line":1638},[105,54330,52129],{"class":115},[105,54332,53701],{"class":51285},[105,54334,51292],{"class":115},[105,54336,54337,54339,54341,54343,54345,54348,54350,54353,54355],{"class":107,"line":1644},[105,54338,52129],{"class":115},[105,54340,53872],{"class":51285},[105,54342,53471],{"class":1954},[105,54344,161],{"class":115},[105,54346,54347],{"class":220},"\"btn\"",[105,54349,53875],{"class":1954},[105,54351,54352],{"class":115},">我已经阅读用户协议(5)\u003C\u002F",[105,54354,53872],{"class":51285},[105,54356,51292],{"class":115},[105,54358,54359,54361,54363],{"class":107,"line":1665},[105,54360,52129],{"class":115},[105,54362,51798],{"class":51285},[105,54364,51292],{"class":115},[105,54366,54367],{"class":107,"line":1670},[105,54368,54369],{"class":174},"    \u002F\u002F 1. 获取元素\n",[105,54371,54372,54374,54377,54379,54382,54385,54387,54390],{"class":107,"line":1684},[105,54373,11213],{"class":111},[105,54375,54376],{"class":164}," btn",[105,54378,13556],{"class":111},[105,54380,54381],{"class":115}," document.",[105,54383,54384],{"class":1954},"querySelector",[105,54386,116],{"class":115},[105,54388,54389],{"class":220},"'.btn'",[105,54391,122],{"class":115},[105,54393,54394],{"class":107,"line":1689},[105,54395,54396],{"class":174},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[105,54398,54399],{"class":107,"line":1718},[105,54400,54401],{"class":174},"    \u002F\u002F 2. 倒计时\n",[105,54403,54404,54406,54408,54410],{"class":107,"line":1723},[105,54405,52204],{"class":111},[105,54407,9430],{"class":115},[105,54409,161],{"class":111},[105,54411,54412],{"class":164}," 5\n",[105,54414,54415],{"class":107,"line":1740},[105,54416,54417],{"class":174},"    \u002F\u002F 2.1 开启定时器\n",[105,54419,54420,54422,54425,54427,54430,54432,54435],{"class":107,"line":1745},[105,54421,52204],{"class":111},[105,54423,54424],{"class":115}," n ",[105,54426,161],{"class":111},[105,54428,54429],{"class":1954}," setInterval",[105,54431,116],{"class":115},[105,54433,54434],{"class":111},"function",[105,54436,54437],{"class":115}," () {\n",[105,54439,54440,54443],{"class":107,"line":1750},[105,54441,54442],{"class":115},"      i",[105,54444,54445],{"class":111},"--\n",[105,54447,54448,54451,54453,54456,54458],{"class":107,"line":1755},[105,54449,54450],{"class":115},"      btn.innerHTML ",[105,54452,161],{"class":111},[105,54454,54455],{"class":220}," `我已经阅读用户协议(${",[105,54457,557],{"class":115},[105,54459,54460],{"class":220},"})`\n",[105,54462,54463,54466,54469,54472,54474],{"class":107,"line":1769},[105,54464,54465],{"class":111},"      if",[105,54467,54468],{"class":115}," (i ",[105,54470,54471],{"class":111},"===",[105,54473,4084],{"class":164},[105,54475,12434],{"class":115},[105,54477,54478,54481,54484],{"class":107,"line":1774},[105,54479,54480],{"class":1954},"        clearInterval",[105,54482,54483],{"class":115},"(n)  ",[105,54485,54486],{"class":174},"\u002F\u002F 关闭定时器\n",[105,54488,54489],{"class":107,"line":2568},[105,54490,54491],{"class":174},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[105,54493,54494,54497,54499],{"class":107,"line":2582},[105,54495,54496],{"class":115},"        btn.disabled ",[105,54498,161],{"class":111},[105,54500,54501],{"class":164}," false\n",[105,54503,54504,54507,54509],{"class":107,"line":2590},[105,54505,54506],{"class":115},"        btn.innerHTML ",[105,54508,161],{"class":111},[105,54510,54511],{"class":220}," '同意'\n",[105,54513,54514],{"class":107,"line":2595},[105,54515,52383],{"class":115},[105,54517,54518,54521,54523],{"class":107,"line":2601},[105,54519,54520],{"class":115},"    }, ",[105,54522,6402],{"class":164},[105,54524,122],{"class":115},[105,54526,54527],{"class":107,"line":2607},[105,54528,2391],{"emptyLinePlaceholder":32},[105,54530,54531,54533,54535],{"class":107,"line":2612},[105,54532,52402],{"class":115},[105,54534,51798],{"class":51285},[105,54536,51292],{"class":115},[105,54538,54539,54541,54543],{"class":107,"line":7940},[105,54540,51770],{"class":115},[105,54542,51785],{"class":51285},[105,54544,51292],{"class":115},[105,54546,54547],{"class":107,"line":7964},[105,54548,2391],{"emptyLinePlaceholder":32},[105,54550,54551,54553,54555],{"class":107,"line":7969},[105,54552,51770],{"class":115},[105,54554,50620],{"class":51285},[105,54556,51292],{"class":115},[14,54558,54559],{},"不要一直想着用死循环,避免死循环",[14,54561,54562,54565],{},[102,54563,54564],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21990,54567,54569],{"id":54568},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[59,54571,54572],{},[62,54573,54574],{},"法1",[96,54576,54578],{"className":50618,"code":54577,"language":50620,"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",[102,54579,54580,54590,54604,54608,54616,54630,54650,54662,54670,54676,54687,54698,54702,54706,54713,54725,54729,54733,54740,54752,54766,54779,54793,54797,54801,54808,54819,54830,54841,54853,54865,54877,54881,54885,54893,54903,54916,54928,54941,54945,54949,54956,54966,54978,54990,55001,55012,55022,55034,55046,55050,55054,55063,55075,55087,55115,55128,55132,55136,55143,55154,55158,55166,55174,55178,55186,55200,55215,55239,55247,55262,55275,55283,55304,55316,55328,55340,55352,55364,55376,55388,55397,55405,55413,55421,55433,55456,55475,55494,55513,55532,55551,55570,55590,55594,55614,55633,55653,55674,55685,55702,55712,55722,55732,55737,55742,55747,55752,55777,55790,55794,55817,55821,55829,55837,55845,55849],{"__ignoreMap":22},[105,54581,54582,54584,54586,54588],{"class":107,"line":108},[105,54583,51282],{"class":115},[105,54585,51286],{"class":51285},[105,54587,51289],{"class":1954},[105,54589,51292],{"class":115},[105,54591,54592,54594,54596,54598,54600,54602],{"class":107,"line":28},[105,54593,1026],{"class":115},[105,54595,50620],{"class":51285},[105,54597,51301],{"class":1954},[105,54599,161],{"class":115},[105,54601,51306],{"class":220},[105,54603,51292],{"class":115},[105,54605,54606],{"class":107,"line":1171},[105,54607,2391],{"emptyLinePlaceholder":32},[105,54609,54610,54612,54614],{"class":107,"line":1186},[105,54611,1026],{"class":115},[105,54613,51319],{"class":51285},[105,54615,51292],{"class":115},[105,54617,54618,54620,54622,54624,54626,54628],{"class":107,"line":1192},[105,54619,52129],{"class":115},[105,54621,51329],{"class":51285},[105,54623,51332],{"class":1954},[105,54625,161],{"class":115},[105,54627,51337],{"class":220},[105,54629,51292],{"class":115},[105,54631,54632,54634,54636,54638,54640,54642,54644,54646,54648],{"class":107,"line":1206},[105,54633,52129],{"class":115},[105,54635,51329],{"class":51285},[105,54637,14912],{"class":1954},[105,54639,161],{"class":115},[105,54641,51376],{"class":220},[105,54643,51356],{"class":1954},[105,54645,161],{"class":115},[105,54647,51383],{"class":220},[105,54649,51292],{"class":115},[105,54651,54652,54654,54656,54658,54660],{"class":107,"line":1212},[105,54653,52129],{"class":115},[105,54655,51392],{"class":51285},[105,54657,51395],{"class":115},[105,54659,51392],{"class":51285},[105,54661,51292],{"class":115},[105,54663,54664,54666,54668],{"class":107,"line":1303},[105,54665,52129],{"class":115},[105,54667,5118],{"class":51285},[105,54669,51292],{"class":115},[105,54671,54672,54674],{"class":107,"line":1309},[105,54673,6395],{"class":51285},[105,54675,15564],{"class":115},[105,54677,54678,54681,54683,54685],{"class":107,"line":1321},[105,54679,54680],{"class":164},"      padding",[105,54682,51422],{"class":115},[105,54684,307],{"class":164},[105,54686,1282],{"class":115},[105,54688,54689,54692,54694,54696],{"class":107,"line":1603},[105,54690,54691],{"class":164},"      margin",[105,54693,51422],{"class":115},[105,54695,307],{"class":164},[105,54697,1282],{"class":115},[105,54699,54700],{"class":107,"line":1608},[105,54701,2178],{"class":115},[105,54703,54704],{"class":107,"line":1614},[105,54705,2391],{"emptyLinePlaceholder":32},[105,54707,54708,54711],{"class":107,"line":1619},[105,54709,54710],{"class":51285},"    li",[105,54712,15564],{"class":115},[105,54714,54715,54718,54720,54723],{"class":107,"line":1633},[105,54716,54717],{"class":164},"      list-style",[105,54719,51422],{"class":115},[105,54721,54722],{"class":164},"none",[105,54724,1282],{"class":115},[105,54726,54727],{"class":107,"line":1638},[105,54728,2178],{"class":115},[105,54730,54731],{"class":107,"line":1644},[105,54732,2391],{"emptyLinePlaceholder":32},[105,54734,54735,54738],{"class":107,"line":1665},[105,54736,54737],{"class":1954},"    .box",[105,54739,15564],{"class":115},[105,54741,54742,54745,54747,54750],{"class":107,"line":1670},[105,54743,54744],{"class":164},"      position",[105,54746,51422],{"class":115},[105,54748,54749],{"class":164},"relative",[105,54751,1282],{"class":115},[105,54753,54754,54757,54759,54762,54764],{"class":107,"line":1684},[105,54755,54756],{"class":164},"      width",[105,54758,51422],{"class":115},[105,54760,54761],{"class":164},"976",[105,54763,51477],{"class":111},[105,54765,1282],{"class":115},[105,54767,54768,54771,54773,54775,54777],{"class":107,"line":1689},[105,54769,54770],{"class":164},"      height",[105,54772,51422],{"class":115},[105,54774,1530],{"class":164},[105,54776,51477],{"class":111},[105,54778,1282],{"class":115},[105,54780,54781,54783,54785,54787,54789,54791],{"class":107,"line":1718},[105,54782,54691],{"class":164},[105,54784,51422],{"class":115},[105,54786,427],{"class":164},[105,54788,51477],{"class":111},[105,54790,51541],{"class":164},[105,54792,1282],{"class":115},[105,54794,54795],{"class":107,"line":1723},[105,54796,2178],{"class":115},[105,54798,54799],{"class":107,"line":1740},[105,54800,2391],{"emptyLinePlaceholder":32},[105,54802,54803,54806],{"class":107,"line":1745},[105,54804,54805],{"class":1954},"    .slider-footer",[105,54807,15564],{"class":115},[105,54809,54810,54812,54814,54817],{"class":107,"line":1750},[105,54811,54744],{"class":164},[105,54813,51422],{"class":115},[105,54815,54816],{"class":164},"absolute",[105,54818,1282],{"class":115},[105,54820,54821,54824,54826,54828],{"class":107,"line":1755},[105,54822,54823],{"class":164},"      left",[105,54825,51422],{"class":115},[105,54827,307],{"class":164},[105,54829,1282],{"class":115},[105,54831,54832,54835,54837,54839],{"class":107,"line":1769},[105,54833,54834],{"class":164},"      bottom",[105,54836,51422],{"class":115},[105,54838,307],{"class":164},[105,54840,1282],{"class":115},[105,54842,54843,54845,54847,54849,54851],{"class":107,"line":1774},[105,54844,54756],{"class":164},[105,54846,51422],{"class":115},[105,54848,427],{"class":164},[105,54850,444],{"class":111},[105,54852,1282],{"class":115},[105,54854,54855,54857,54859,54861,54863],{"class":107,"line":2568},[105,54856,54770],{"class":164},[105,54858,51422],{"class":115},[105,54860,691],{"class":164},[105,54862,444],{"class":111},[105,54864,1282],{"class":115},[105,54866,54867,54870,54872,54875],{"class":107,"line":2582},[105,54868,54869],{"class":164},"      background-color",[105,54871,51422],{"class":115},[105,54873,54874],{"class":164},"skyblue",[105,54876,1282],{"class":115},[105,54878,54879],{"class":107,"line":2590},[105,54880,2178],{"class":115},[105,54882,54883],{"class":107,"line":2595},[105,54884,2391],{"emptyLinePlaceholder":32},[105,54886,54887,54889,54891],{"class":107,"line":2601},[105,54888,54805],{"class":1954},[105,54890,6817],{"class":51285},[105,54892,15564],{"class":115},[105,54894,54895,54897,54899,54901],{"class":107,"line":2607},[105,54896,54744],{"class":164},[105,54898,51422],{"class":115},[105,54900,54816],{"class":164},[105,54902,1282],{"class":115},[105,54904,54905,54908,54910,54912,54914],{"class":107,"line":2612},[105,54906,54907],{"class":164},"      font-size",[105,54909,51422],{"class":115},[105,54911,1017],{"class":164},[105,54913,51477],{"class":111},[105,54915,1282],{"class":115},[105,54917,54918,54920,54922,54924,54926],{"class":107,"line":7940},[105,54919,54823],{"class":164},[105,54921,51422],{"class":115},[105,54923,816],{"class":164},[105,54925,51477],{"class":111},[105,54927,1282],{"class":115},[105,54929,54930,54933,54935,54937,54939],{"class":107,"line":7964},[105,54931,54932],{"class":164},"      top",[105,54934,51422],{"class":115},[105,54936,435],{"class":164},[105,54938,51477],{"class":111},[105,54940,1282],{"class":115},[105,54942,54943],{"class":107,"line":7969},[105,54944,2178],{"class":115},[105,54946,54947],{"class":107,"line":7975},[105,54948,2391],{"emptyLinePlaceholder":32},[105,54950,54951,54954],{"class":107,"line":8002},[105,54952,54953],{"class":51285},"    ul",[105,54955,15564],{"class":115},[105,54957,54958,54960,54962,54964],{"class":107,"line":8007},[105,54959,54744],{"class":164},[105,54961,51422],{"class":115},[105,54963,54816],{"class":164},[105,54965,1282],{"class":115},[105,54967,54968,54970,54972,54974,54976],{"class":107,"line":8013},[105,54969,54932],{"class":164},[105,54971,51422],{"class":115},[105,54973,897],{"class":164},[105,54975,51477],{"class":111},[105,54977,1282],{"class":115},[105,54979,54980,54982,54984,54986,54988],{"class":107,"line":8025},[105,54981,54823],{"class":164},[105,54983,51422],{"class":115},[105,54985,816],{"class":164},[105,54987,51477],{"class":111},[105,54989,1282],{"class":115},[105,54991,54992,54995,54997,54999],{"class":107,"line":8037},[105,54993,54994],{"class":164},"      display",[105,54996,51422],{"class":115},[105,54998,51462],{"class":164},[105,55000,1282],{"class":115},[105,55002,55003,55006,55008,55010],{"class":107,"line":8049},[105,55004,55005],{"class":164},"      justify-content",[105,55007,51422],{"class":115},[105,55009,51653],{"class":164},[105,55011,1282],{"class":115},[105,55013,55014,55016,55018,55020],{"class":107,"line":9708},[105,55015,54744],{"class":164},[105,55017,51422],{"class":115},[105,55019,54816],{"class":164},[105,55021,1282],{"class":115},[105,55023,55024,55026,55028,55030,55032],{"class":107,"line":9733},[105,55025,54756],{"class":164},[105,55027,51422],{"class":115},[105,55029,3983],{"class":164},[105,55031,51477],{"class":111},[105,55033,1282],{"class":115},[105,55035,55036,55038,55040,55042,55044],{"class":107,"line":9756},[105,55037,54770],{"class":164},[105,55039,51422],{"class":115},[105,55041,816],{"class":164},[105,55043,51477],{"class":111},[105,55045,1282],{"class":115},[105,55047,55048],{"class":107,"line":9780},[105,55049,2178],{"class":115},[105,55051,55052],{"class":107,"line":9785},[105,55053,2391],{"emptyLinePlaceholder":32},[105,55055,55056,55058,55061],{"class":107,"line":9790},[105,55057,54953],{"class":51285},[105,55059,55060],{"class":51285}," li",[105,55062,15564],{"class":115},[105,55064,55065,55067,55069,55071,55073],{"class":107,"line":9795},[105,55066,54756],{"class":164},[105,55068,51422],{"class":115},[105,55070,816],{"class":164},[105,55072,51477],{"class":111},[105,55074,1282],{"class":115},[105,55076,55077,55079,55081,55083,55085],{"class":107,"line":9804},[105,55078,54770],{"class":164},[105,55080,51422],{"class":115},[105,55082,816],{"class":164},[105,55084,51477],{"class":111},[105,55086,1282],{"class":115},[105,55088,55089,55091,55093,55096,55098,55100,55102,55104,55106,55108,55110,55113],{"class":107,"line":9809},[105,55090,54869],{"class":164},[105,55092,51422],{"class":115},[105,55094,55095],{"class":164},"rgba",[105,55097,116],{"class":115},[105,55099,307],{"class":164},[105,55101,12427],{"class":115},[105,55103,307],{"class":164},[105,55105,12427],{"class":115},[105,55107,307],{"class":164},[105,55109,12427],{"class":115},[105,55111,55112],{"class":164},".4",[105,55114,2710],{"class":115},[105,55116,55117,55120,55122,55124,55126],{"class":107,"line":9815},[105,55118,55119],{"class":164},"      border-radius",[105,55121,51422],{"class":115},[105,55123,562],{"class":164},[105,55125,51477],{"class":111},[105,55127,1282],{"class":115},[105,55129,55130],{"class":107,"line":9836},[105,55131,2178],{"class":115},[105,55133,55134],{"class":107,"line":9842},[105,55135,2391],{"emptyLinePlaceholder":32},[105,55137,55138,55141],{"class":107,"line":9856},[105,55139,55140],{"class":1954},"    .activate",[105,55142,15564],{"class":115},[105,55144,55145,55147,55149,55152],{"class":107,"line":9862},[105,55146,54869],{"class":164},[105,55148,51422],{"class":115},[105,55150,55151],{"class":164},"#f7f7f7",[105,55153,1282],{"class":115},[105,55155,55156],{"class":107,"line":9889},[105,55157,2178],{"class":115},[105,55159,55160,55162,55164],{"class":107,"line":9898},[105,55161,52402],{"class":115},[105,55163,5118],{"class":51285},[105,55165,51292],{"class":115},[105,55167,55168,55170,55172],{"class":107,"line":9904},[105,55169,51770],{"class":115},[105,55171,51319],{"class":51285},[105,55173,51292],{"class":115},[105,55175,55176],{"class":107,"line":9912},[105,55177,2391],{"emptyLinePlaceholder":32},[105,55179,55180,55182,55184],{"class":107,"line":9917},[105,55181,1026],{"class":115},[105,55183,51785],{"class":51285},[105,55185,51292],{"class":115},[105,55187,55188,55190,55192,55194,55196,55198],{"class":107,"line":16596},[105,55189,52129],{"class":115},[105,55191,51596],{"class":51285},[105,55193,53471],{"class":1954},[105,55195,161],{"class":115},[105,55197,53476],{"class":220},[105,55199,51292],{"class":115},[105,55201,55202,55204,55206,55208,55210,55213],{"class":107,"line":16602},[105,55203,51326],{"class":115},[105,55205,51596],{"class":51285},[105,55207,53471],{"class":1954},[105,55209,161],{"class":115},[105,55211,55212],{"class":220},"\"slider-wrapper\"",[105,55214,51292],{"class":115},[105,55216,55217,55220,55222,55225,55227,55230,55233,55235,55237],{"class":107,"line":16625},[105,55218,55219],{"class":115},"      \u003C",[105,55221,20],{"class":51285},[105,55223,55224],{"class":1954}," src",[105,55226,161],{"class":115},[105,55228,55229],{"class":220},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[105,55231,55232],{"class":1954}," alt",[105,55234,161],{"class":115},[105,55236,7644],{"class":220},[105,55238,51292],{"class":115},[105,55240,55241,55243,55245],{"class":107,"line":16631},[105,55242,51761],{"class":115},[105,55244,51596],{"class":51285},[105,55246,51292],{"class":115},[105,55248,55249,55251,55253,55255,55257,55260],{"class":107,"line":16654},[105,55250,51326],{"class":115},[105,55252,51596],{"class":51285},[105,55254,53471],{"class":1954},[105,55256,161],{"class":115},[105,55258,55259],{"class":220},"\"slider-footer\"",[105,55261,51292],{"class":115},[105,55263,55264,55266,55268,55271,55273],{"class":107,"line":16668},[105,55265,55219],{"class":115},[105,55267,14],{"class":51285},[105,55269,55270],{"class":115},">对人类来说会不会太超前了?\u003C\u002F",[105,55272,14],{"class":51285},[105,55274,51292],{"class":115},[105,55276,55277,55279,55281],{"class":107,"line":16688},[105,55278,55219],{"class":115},[105,55280,1123],{"class":51285},[105,55282,51292],{"class":115},[105,55284,55285,55288,55290,55292,55294,55297,55300,55302],{"class":107,"line":16694},[105,55286,55287],{"class":115},"        \u003C",[105,55289,62],{"class":51285},[105,55291,53471],{"class":1954},[105,55293,161],{"class":115},[105,55295,55296],{"class":220},"\"activate\"",[105,55298,55299],{"class":115},">\u003C\u002F",[105,55301,62],{"class":51285},[105,55303,51292],{"class":115},[105,55305,55306,55308,55310,55312,55314],{"class":107,"line":16705},[105,55307,55287],{"class":115},[105,55309,62],{"class":51285},[105,55311,55299],{"class":115},[105,55313,62],{"class":51285},[105,55315,51292],{"class":115},[105,55317,55318,55320,55322,55324,55326],{"class":107,"line":16728},[105,55319,55287],{"class":115},[105,55321,62],{"class":51285},[105,55323,55299],{"class":115},[105,55325,62],{"class":51285},[105,55327,51292],{"class":115},[105,55329,55330,55332,55334,55336,55338],{"class":107,"line":16750},[105,55331,55287],{"class":115},[105,55333,62],{"class":51285},[105,55335,55299],{"class":115},[105,55337,62],{"class":51285},[105,55339,51292],{"class":115},[105,55341,55342,55344,55346,55348,55350],{"class":107,"line":16755},[105,55343,55287],{"class":115},[105,55345,62],{"class":51285},[105,55347,55299],{"class":115},[105,55349,62],{"class":51285},[105,55351,51292],{"class":115},[105,55353,55354,55356,55358,55360,55362],{"class":107,"line":16761},[105,55355,55287],{"class":115},[105,55357,62],{"class":51285},[105,55359,55299],{"class":115},[105,55361,62],{"class":51285},[105,55363,51292],{"class":115},[105,55365,55366,55368,55370,55372,55374],{"class":107,"line":16775},[105,55367,55287],{"class":115},[105,55369,62],{"class":51285},[105,55371,55299],{"class":115},[105,55373,62],{"class":51285},[105,55375,51292],{"class":115},[105,55377,55378,55380,55382,55384,55386],{"class":107,"line":16788},[105,55379,55287],{"class":115},[105,55381,62],{"class":51285},[105,55383,55299],{"class":115},[105,55385,62],{"class":51285},[105,55387,51292],{"class":115},[105,55389,55390,55393,55395],{"class":107,"line":16793},[105,55391,55392],{"class":115},"      \u003C\u002F",[105,55394,1123],{"class":51285},[105,55396,51292],{"class":115},[105,55398,55399,55401,55403],{"class":107,"line":16807},[105,55400,51761],{"class":115},[105,55402,51596],{"class":51285},[105,55404,51292],{"class":115},[105,55406,55407,55409,55411],{"class":107,"line":16812},[105,55408,52402],{"class":115},[105,55410,51596],{"class":51285},[105,55412,51292],{"class":115},[105,55414,55415,55417,55419],{"class":107,"line":16818},[105,55416,52129],{"class":115},[105,55418,51798],{"class":51285},[105,55420,51292],{"class":115},[105,55422,55423,55425,55428,55430],{"class":107,"line":16823},[105,55424,11213],{"class":111},[105,55426,55427],{"class":164}," arrImage",[105,55429,13556],{"class":111},[105,55431,55432],{"class":115}," [\n",[105,55434,55435,55438,55441,55444,55447,55450,55453],{"class":107,"line":16837},[105,55436,55437],{"class":115},"      { url: ",[105,55439,55440],{"class":220},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[105,55442,55443],{"class":115},", title: ",[105,55445,55446],{"class":220},"'对人类来说会不会太超前了?'",[105,55448,55449],{"class":115},", color: ",[105,55451,55452],{"class":220},"'rgba(100,67,68)'",[105,55454,55455],{"class":115}," },\n",[105,55457,55458,55460,55463,55465,55468,55470,55473],{"class":107,"line":16842},[105,55459,55437],{"class":115},[105,55461,55462],{"class":220},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[105,55464,55443],{"class":115},[105,55466,55467],{"class":220},"'开启剑与雪的黑暗传说!'",[105,55469,55449],{"class":115},[105,55471,55472],{"class":220},"'rgba(43,35,26)'",[105,55474,55455],{"class":115},[105,55476,55477,55479,55482,55484,55487,55489,55492],{"class":107,"line":16847},[105,55478,55437],{"class":115},[105,55480,55481],{"class":220},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[105,55483,55443],{"class":115},[105,55485,55486],{"class":220},"'真正的jo厨出现了!'",[105,55488,55449],{"class":115},[105,55490,55491],{"class":220},"'rgba(36,31,33)'",[105,55493,55455],{"class":115},[105,55495,55496,55498,55501,55503,55506,55508,55511],{"class":107,"line":16861},[105,55497,55437],{"class":115},[105,55499,55500],{"class":220},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[105,55502,55443],{"class":115},[105,55504,55505],{"class":220},"'李玉刚:让世界通过b站看到东方大国文化'",[105,55507,55449],{"class":115},[105,55509,55510],{"class":220},"'rgba(139,98,66)'",[105,55512,55455],{"class":115},[105,55514,55515,55517,55520,55522,55525,55527,55530],{"class":107,"line":16873},[105,55516,55437],{"class":115},[105,55518,55519],{"class":220},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[105,55521,55443],{"class":115},[105,55523,55524],{"class":220},"'快来分享你的寒假日常吧'",[105,55526,55449],{"class":115},[105,55528,55529],{"class":220},"'rgba(67,90,92)'",[105,55531,55455],{"class":115},[105,55533,55534,55536,55539,55541,55544,55546,55549],{"class":107,"line":16878},[105,55535,55437],{"class":115},[105,55537,55538],{"class":220},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[105,55540,55443],{"class":115},[105,55542,55543],{"class":220},"'哔哩哔哩小年YEAR'",[105,55545,55449],{"class":115},[105,55547,55548],{"class":220},"'rgba(166,131,143)'",[105,55550,55455],{"class":115},[105,55552,55553,55555,55558,55560,55563,55565,55568],{"class":107,"line":16891},[105,55554,55437],{"class":115},[105,55556,55557],{"class":220},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[105,55559,55443],{"class":115},[105,55561,55562],{"class":220},"'一站式解决你的电脑配置问题'",[105,55564,55449],{"class":115},[105,55566,55567],{"class":220},"'rgba(53,29,25)'",[105,55569,55455],{"class":115},[105,55571,55572,55574,55577,55579,55582,55584,55587],{"class":107,"line":16896},[105,55573,55437],{"class":115},[105,55575,55576],{"class":220},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[105,55578,55443],{"class":115},[105,55580,55581],{"class":220},"'谁不想和小猫咪贴贴呢?'",[105,55583,55449],{"class":115},[105,55585,55586],{"class":220},"'rgba(99,72,114)'",[105,55588,55589],{"class":115}," }\n",[105,55591,55592],{"class":107,"line":16901},[105,55593,53094],{"class":115},[105,55595,55596,55598,55601,55603,55605,55607,55609,55612],{"class":107,"line":16906},[105,55597,11213],{"class":111},[105,55599,55600],{"class":164}," img",[105,55602,13556],{"class":111},[105,55604,54381],{"class":115},[105,55606,54384],{"class":1954},[105,55608,116],{"class":115},[105,55610,55611],{"class":220},"'.slider-wrapper img'",[105,55613,122],{"class":115},[105,55615,55616,55618,55620,55622,55624,55626,55628,55631],{"class":107,"line":16919},[105,55617,11213],{"class":111},[105,55619,6817],{"class":164},[105,55621,13556],{"class":111},[105,55623,54381],{"class":115},[105,55625,54384],{"class":1954},[105,55627,116],{"class":115},[105,55629,55630],{"class":220},"'.slider-footer p'",[105,55632,122],{"class":115},[105,55634,55635,55637,55640,55642,55644,55646,55648,55651],{"class":107,"line":16924},[105,55636,11213],{"class":111},[105,55638,55639],{"class":164}," color",[105,55641,13556],{"class":111},[105,55643,54381],{"class":115},[105,55645,54384],{"class":1954},[105,55647,116],{"class":115},[105,55649,55650],{"class":220},"'.slider-footer'",[105,55652,122],{"class":115},[105,55654,55655,55657,55660,55662,55664,55667,55669,55672],{"class":107,"line":32618},[105,55656,11213],{"class":111},[105,55658,55659],{"class":164}," lis",[105,55661,13556],{"class":111},[105,55663,54381],{"class":115},[105,55665,55666],{"class":1954},"querySelectorAll",[105,55668,116],{"class":115},[105,55670,55671],{"class":220},"'.slider-footer ul li'",[105,55673,122],{"class":115},[105,55675,55676,55678,55680,55682],{"class":107,"line":32624},[105,55677,52204],{"class":111},[105,55679,9430],{"class":115},[105,55681,161],{"class":111},[105,55683,55684],{"class":164}," 1\n",[105,55686,55687,55689,55692,55694,55696,55698,55700],{"class":107,"line":32630},[105,55688,52204],{"class":111},[105,55690,55691],{"class":115}," timer ",[105,55693,161],{"class":111},[105,55695,54429],{"class":1954},[105,55697,116],{"class":115},[105,55699,54434],{"class":111},[105,55701,54437],{"class":115},[105,55703,55704,55707,55709],{"class":107,"line":32636},[105,55705,55706],{"class":115},"      img.src ",[105,55708,161],{"class":111},[105,55710,55711],{"class":115}," arrImage[i].url\n",[105,55713,55714,55717,55719],{"class":107,"line":32642},[105,55715,55716],{"class":115},"      p.innerHTML ",[105,55718,161],{"class":111},[105,55720,55721],{"class":115}," arrImage[i].title\n",[105,55723,55724,55727,55729],{"class":107,"line":32653},[105,55725,55726],{"class":115},"      color.style.backgroundColor ",[105,55728,161],{"class":111},[105,55730,55731],{"class":115}," arrImage[i].color\n",[105,55733,55734],{"class":107,"line":32659},[105,55735,55736],{"class":174},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[105,55738,55739],{"class":107,"line":32679},[105,55740,55741],{"class":174},"      \u002F\u002F li.classList.add('activate')\n",[105,55743,55744],{"class":107,"line":32685},[105,55745,55746],{"class":174},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[105,55748,55749],{"class":107,"line":32696},[105,55750,55751],{"class":174},"      \u002F\u002F lis[i].classList.remove('activate')\n",[105,55753,55754,55757,55759,55761,55764,55767,55770,55772,55775],{"class":107,"line":32702},[105,55755,55756],{"class":115},"      document.",[105,55758,54384],{"class":1954},[105,55760,116],{"class":115},[105,55762,55763],{"class":220},"'.activate'",[105,55765,55766],{"class":115},")?.classList.",[105,55768,55769],{"class":1954},"toggle",[105,55771,116],{"class":115},[105,55773,55774],{"class":220},"'activate'",[105,55776,122],{"class":115},[105,55778,55779,55782,55784,55786,55788],{"class":107,"line":32708},[105,55780,55781],{"class":115},"      lis[i].classList.",[105,55783,5326],{"class":1954},[105,55785,116],{"class":115},[105,55787,55774],{"class":220},[105,55789,122],{"class":115},[105,55791,55792],{"class":107,"line":32714},[105,55793,2391],{"emptyLinePlaceholder":32},[105,55795,55796,55799,55801,55803,55805,55807,55809,55811,55814],{"class":107,"line":32720},[105,55797,55798],{"class":115},"      i ",[105,55800,161],{"class":111},[105,55802,54468],{"class":115},[105,55804,597],{"class":111},[105,55806,25103],{"class":164},[105,55808,13706],{"class":115},[105,55810,444],{"class":111},[105,55812,55813],{"class":115}," arrImage.",[105,55815,55816],{"class":164},"length\n",[105,55818,55819],{"class":107,"line":32726},[105,55820,2391],{"emptyLinePlaceholder":32},[105,55822,55823,55825,55827],{"class":107,"line":32732},[105,55824,54520],{"class":115},[105,55826,6402],{"class":164},[105,55828,122],{"class":115},[105,55830,55831,55833,55835],{"class":107,"line":32738},[105,55832,52402],{"class":115},[105,55834,51798],{"class":51285},[105,55836,51292],{"class":115},[105,55838,55839,55841,55843],{"class":107,"line":32758},[105,55840,51770],{"class":115},[105,55842,51785],{"class":51285},[105,55844,51292],{"class":115},[105,55846,55847],{"class":107,"line":32764},[105,55848,2391],{"emptyLinePlaceholder":32},[105,55850,55851,55853,55855],{"class":107,"line":32780},[105,55852,51770],{"class":115},[105,55854,50620],{"class":51285},[105,55856,51292],{"class":115},[14,55858,55859],{},[20,55860],{"alt":22,"src":55861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55863,55864],{},"?.就是短路保护,确保输出正常进行",[14,55866,55867],{},"不要忘记取余%,有时候可以用",[14,55869,55870],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[59,55872,55873],{"start":28},[62,55874,55875],{},"法2",[96,55877,55879],{"className":50618,"code":55878,"language":50620,"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",[102,55880,55881,55891,55905,55909,55917,55931,55951,55963,55971,55977,55987,55997,56001,56005,56011,56021,56025,56029,56035,56045,56057,56069,56083,56087,56091,56097,56107,56117,56127,56139,56151,56161,56165,56169,56177,56187,56199,56211,56223,56227,56231,56237,56247,56259,56271,56281,56291,56301,56313,56325,56329,56333,56341,56353,56365,56391,56403,56407,56411,56417,56427,56431,56439,56447,56451,56459,56473,56487,56507,56515,56529,56541,56549,56567,56579,56591,56603,56615,56627,56639,56651,56659,56667,56675,56683,56694,56710,56726,56742,56758,56774,56790,56806,56822,56826,56831,56849,56867,56877,56882,56887,56898,56904,56919,56928,56932,56937,56946,56951,56960,56965,56970,56975,56998,57028,57032,57040,57044,57052,57060,57064],{"__ignoreMap":22},[105,55882,55883,55885,55887,55889],{"class":107,"line":108},[105,55884,51282],{"class":115},[105,55886,51286],{"class":51285},[105,55888,51289],{"class":1954},[105,55890,51292],{"class":115},[105,55892,55893,55895,55897,55899,55901,55903],{"class":107,"line":28},[105,55894,1026],{"class":115},[105,55896,50620],{"class":51285},[105,55898,51301],{"class":1954},[105,55900,161],{"class":115},[105,55902,51306],{"class":220},[105,55904,51292],{"class":115},[105,55906,55907],{"class":107,"line":1171},[105,55908,2391],{"emptyLinePlaceholder":32},[105,55910,55911,55913,55915],{"class":107,"line":1186},[105,55912,1026],{"class":115},[105,55914,51319],{"class":51285},[105,55916,51292],{"class":115},[105,55918,55919,55921,55923,55925,55927,55929],{"class":107,"line":1192},[105,55920,52129],{"class":115},[105,55922,51329],{"class":51285},[105,55924,51332],{"class":1954},[105,55926,161],{"class":115},[105,55928,51337],{"class":220},[105,55930,51292],{"class":115},[105,55932,55933,55935,55937,55939,55941,55943,55945,55947,55949],{"class":107,"line":1206},[105,55934,52129],{"class":115},[105,55936,51329],{"class":51285},[105,55938,14912],{"class":1954},[105,55940,161],{"class":115},[105,55942,51376],{"class":220},[105,55944,51356],{"class":1954},[105,55946,161],{"class":115},[105,55948,51383],{"class":220},[105,55950,51292],{"class":115},[105,55952,55953,55955,55957,55959,55961],{"class":107,"line":1212},[105,55954,52129],{"class":115},[105,55956,51392],{"class":51285},[105,55958,51395],{"class":115},[105,55960,51392],{"class":51285},[105,55962,51292],{"class":115},[105,55964,55965,55967,55969],{"class":107,"line":1303},[105,55966,52129],{"class":115},[105,55968,5118],{"class":51285},[105,55970,51292],{"class":115},[105,55972,55973,55975],{"class":107,"line":1309},[105,55974,6395],{"class":51285},[105,55976,15564],{"class":115},[105,55978,55979,55981,55983,55985],{"class":107,"line":1321},[105,55980,54680],{"class":164},[105,55982,51422],{"class":115},[105,55984,307],{"class":164},[105,55986,1282],{"class":115},[105,55988,55989,55991,55993,55995],{"class":107,"line":1603},[105,55990,54691],{"class":164},[105,55992,51422],{"class":115},[105,55994,307],{"class":164},[105,55996,1282],{"class":115},[105,55998,55999],{"class":107,"line":1608},[105,56000,2178],{"class":115},[105,56002,56003],{"class":107,"line":1614},[105,56004,2391],{"emptyLinePlaceholder":32},[105,56006,56007,56009],{"class":107,"line":1619},[105,56008,54710],{"class":51285},[105,56010,15564],{"class":115},[105,56012,56013,56015,56017,56019],{"class":107,"line":1633},[105,56014,54717],{"class":164},[105,56016,51422],{"class":115},[105,56018,54722],{"class":164},[105,56020,1282],{"class":115},[105,56022,56023],{"class":107,"line":1638},[105,56024,2178],{"class":115},[105,56026,56027],{"class":107,"line":1644},[105,56028,2391],{"emptyLinePlaceholder":32},[105,56030,56031,56033],{"class":107,"line":1665},[105,56032,54737],{"class":1954},[105,56034,15564],{"class":115},[105,56036,56037,56039,56041,56043],{"class":107,"line":1670},[105,56038,54744],{"class":164},[105,56040,51422],{"class":115},[105,56042,54749],{"class":164},[105,56044,1282],{"class":115},[105,56046,56047,56049,56051,56053,56055],{"class":107,"line":1684},[105,56048,54756],{"class":164},[105,56050,51422],{"class":115},[105,56052,54761],{"class":164},[105,56054,51477],{"class":111},[105,56056,1282],{"class":115},[105,56058,56059,56061,56063,56065,56067],{"class":107,"line":1689},[105,56060,54770],{"class":164},[105,56062,51422],{"class":115},[105,56064,1530],{"class":164},[105,56066,51477],{"class":111},[105,56068,1282],{"class":115},[105,56070,56071,56073,56075,56077,56079,56081],{"class":107,"line":1718},[105,56072,54691],{"class":164},[105,56074,51422],{"class":115},[105,56076,427],{"class":164},[105,56078,51477],{"class":111},[105,56080,51541],{"class":164},[105,56082,1282],{"class":115},[105,56084,56085],{"class":107,"line":1723},[105,56086,2178],{"class":115},[105,56088,56089],{"class":107,"line":1740},[105,56090,2391],{"emptyLinePlaceholder":32},[105,56092,56093,56095],{"class":107,"line":1745},[105,56094,54805],{"class":1954},[105,56096,15564],{"class":115},[105,56098,56099,56101,56103,56105],{"class":107,"line":1750},[105,56100,54744],{"class":164},[105,56102,51422],{"class":115},[105,56104,54816],{"class":164},[105,56106,1282],{"class":115},[105,56108,56109,56111,56113,56115],{"class":107,"line":1755},[105,56110,54823],{"class":164},[105,56112,51422],{"class":115},[105,56114,307],{"class":164},[105,56116,1282],{"class":115},[105,56118,56119,56121,56123,56125],{"class":107,"line":1769},[105,56120,54834],{"class":164},[105,56122,51422],{"class":115},[105,56124,307],{"class":164},[105,56126,1282],{"class":115},[105,56128,56129,56131,56133,56135,56137],{"class":107,"line":1774},[105,56130,54756],{"class":164},[105,56132,51422],{"class":115},[105,56134,427],{"class":164},[105,56136,444],{"class":111},[105,56138,1282],{"class":115},[105,56140,56141,56143,56145,56147,56149],{"class":107,"line":2568},[105,56142,54770],{"class":164},[105,56144,51422],{"class":115},[105,56146,691],{"class":164},[105,56148,444],{"class":111},[105,56150,1282],{"class":115},[105,56152,56153,56155,56157,56159],{"class":107,"line":2582},[105,56154,54869],{"class":164},[105,56156,51422],{"class":115},[105,56158,54874],{"class":164},[105,56160,1282],{"class":115},[105,56162,56163],{"class":107,"line":2590},[105,56164,2178],{"class":115},[105,56166,56167],{"class":107,"line":2595},[105,56168,2391],{"emptyLinePlaceholder":32},[105,56170,56171,56173,56175],{"class":107,"line":2601},[105,56172,54805],{"class":1954},[105,56174,6817],{"class":51285},[105,56176,15564],{"class":115},[105,56178,56179,56181,56183,56185],{"class":107,"line":2607},[105,56180,54744],{"class":164},[105,56182,51422],{"class":115},[105,56184,54816],{"class":164},[105,56186,1282],{"class":115},[105,56188,56189,56191,56193,56195,56197],{"class":107,"line":2612},[105,56190,54907],{"class":164},[105,56192,51422],{"class":115},[105,56194,1017],{"class":164},[105,56196,51477],{"class":111},[105,56198,1282],{"class":115},[105,56200,56201,56203,56205,56207,56209],{"class":107,"line":7940},[105,56202,54823],{"class":164},[105,56204,51422],{"class":115},[105,56206,816],{"class":164},[105,56208,51477],{"class":111},[105,56210,1282],{"class":115},[105,56212,56213,56215,56217,56219,56221],{"class":107,"line":7964},[105,56214,54932],{"class":164},[105,56216,51422],{"class":115},[105,56218,435],{"class":164},[105,56220,51477],{"class":111},[105,56222,1282],{"class":115},[105,56224,56225],{"class":107,"line":7969},[105,56226,2178],{"class":115},[105,56228,56229],{"class":107,"line":7975},[105,56230,2391],{"emptyLinePlaceholder":32},[105,56232,56233,56235],{"class":107,"line":8002},[105,56234,54953],{"class":51285},[105,56236,15564],{"class":115},[105,56238,56239,56241,56243,56245],{"class":107,"line":8007},[105,56240,54744],{"class":164},[105,56242,51422],{"class":115},[105,56244,54816],{"class":164},[105,56246,1282],{"class":115},[105,56248,56249,56251,56253,56255,56257],{"class":107,"line":8013},[105,56250,54932],{"class":164},[105,56252,51422],{"class":115},[105,56254,897],{"class":164},[105,56256,51477],{"class":111},[105,56258,1282],{"class":115},[105,56260,56261,56263,56265,56267,56269],{"class":107,"line":8025},[105,56262,54823],{"class":164},[105,56264,51422],{"class":115},[105,56266,816],{"class":164},[105,56268,51477],{"class":111},[105,56270,1282],{"class":115},[105,56272,56273,56275,56277,56279],{"class":107,"line":8037},[105,56274,54994],{"class":164},[105,56276,51422],{"class":115},[105,56278,51462],{"class":164},[105,56280,1282],{"class":115},[105,56282,56283,56285,56287,56289],{"class":107,"line":8049},[105,56284,55005],{"class":164},[105,56286,51422],{"class":115},[105,56288,51653],{"class":164},[105,56290,1282],{"class":115},[105,56292,56293,56295,56297,56299],{"class":107,"line":9708},[105,56294,54744],{"class":164},[105,56296,51422],{"class":115},[105,56298,54816],{"class":164},[105,56300,1282],{"class":115},[105,56302,56303,56305,56307,56309,56311],{"class":107,"line":9733},[105,56304,54756],{"class":164},[105,56306,51422],{"class":115},[105,56308,3983],{"class":164},[105,56310,51477],{"class":111},[105,56312,1282],{"class":115},[105,56314,56315,56317,56319,56321,56323],{"class":107,"line":9756},[105,56316,54770],{"class":164},[105,56318,51422],{"class":115},[105,56320,816],{"class":164},[105,56322,51477],{"class":111},[105,56324,1282],{"class":115},[105,56326,56327],{"class":107,"line":9780},[105,56328,2178],{"class":115},[105,56330,56331],{"class":107,"line":9785},[105,56332,2391],{"emptyLinePlaceholder":32},[105,56334,56335,56337,56339],{"class":107,"line":9790},[105,56336,54953],{"class":51285},[105,56338,55060],{"class":51285},[105,56340,15564],{"class":115},[105,56342,56343,56345,56347,56349,56351],{"class":107,"line":9795},[105,56344,54756],{"class":164},[105,56346,51422],{"class":115},[105,56348,816],{"class":164},[105,56350,51477],{"class":111},[105,56352,1282],{"class":115},[105,56354,56355,56357,56359,56361,56363],{"class":107,"line":9804},[105,56356,54770],{"class":164},[105,56358,51422],{"class":115},[105,56360,816],{"class":164},[105,56362,51477],{"class":111},[105,56364,1282],{"class":115},[105,56366,56367,56369,56371,56373,56375,56377,56379,56381,56383,56385,56387,56389],{"class":107,"line":9809},[105,56368,54869],{"class":164},[105,56370,51422],{"class":115},[105,56372,55095],{"class":164},[105,56374,116],{"class":115},[105,56376,307],{"class":164},[105,56378,12427],{"class":115},[105,56380,307],{"class":164},[105,56382,12427],{"class":115},[105,56384,307],{"class":164},[105,56386,12427],{"class":115},[105,56388,55112],{"class":164},[105,56390,2710],{"class":115},[105,56392,56393,56395,56397,56399,56401],{"class":107,"line":9815},[105,56394,55119],{"class":164},[105,56396,51422],{"class":115},[105,56398,562],{"class":164},[105,56400,51477],{"class":111},[105,56402,1282],{"class":115},[105,56404,56405],{"class":107,"line":9836},[105,56406,2178],{"class":115},[105,56408,56409],{"class":107,"line":9842},[105,56410,2391],{"emptyLinePlaceholder":32},[105,56412,56413,56415],{"class":107,"line":9856},[105,56414,55140],{"class":1954},[105,56416,15564],{"class":115},[105,56418,56419,56421,56423,56425],{"class":107,"line":9862},[105,56420,54869],{"class":164},[105,56422,51422],{"class":115},[105,56424,55151],{"class":164},[105,56426,1282],{"class":115},[105,56428,56429],{"class":107,"line":9889},[105,56430,2178],{"class":115},[105,56432,56433,56435,56437],{"class":107,"line":9898},[105,56434,52402],{"class":115},[105,56436,5118],{"class":51285},[105,56438,51292],{"class":115},[105,56440,56441,56443,56445],{"class":107,"line":9904},[105,56442,51770],{"class":115},[105,56444,51319],{"class":51285},[105,56446,51292],{"class":115},[105,56448,56449],{"class":107,"line":9912},[105,56450,2391],{"emptyLinePlaceholder":32},[105,56452,56453,56455,56457],{"class":107,"line":9917},[105,56454,1026],{"class":115},[105,56456,51785],{"class":51285},[105,56458,51292],{"class":115},[105,56460,56461,56463,56465,56467,56469,56471],{"class":107,"line":16596},[105,56462,52129],{"class":115},[105,56464,51596],{"class":51285},[105,56466,53471],{"class":1954},[105,56468,161],{"class":115},[105,56470,53476],{"class":220},[105,56472,51292],{"class":115},[105,56474,56475,56477,56479,56481,56483,56485],{"class":107,"line":16602},[105,56476,51326],{"class":115},[105,56478,51596],{"class":51285},[105,56480,53471],{"class":1954},[105,56482,161],{"class":115},[105,56484,55212],{"class":220},[105,56486,51292],{"class":115},[105,56488,56489,56491,56493,56495,56497,56499,56501,56503,56505],{"class":107,"line":16625},[105,56490,55219],{"class":115},[105,56492,20],{"class":51285},[105,56494,55224],{"class":1954},[105,56496,161],{"class":115},[105,56498,55229],{"class":220},[105,56500,55232],{"class":1954},[105,56502,161],{"class":115},[105,56504,7644],{"class":220},[105,56506,51292],{"class":115},[105,56508,56509,56511,56513],{"class":107,"line":16631},[105,56510,51761],{"class":115},[105,56512,51596],{"class":51285},[105,56514,51292],{"class":115},[105,56516,56517,56519,56521,56523,56525,56527],{"class":107,"line":16654},[105,56518,51326],{"class":115},[105,56520,51596],{"class":51285},[105,56522,53471],{"class":1954},[105,56524,161],{"class":115},[105,56526,55259],{"class":220},[105,56528,51292],{"class":115},[105,56530,56531,56533,56535,56537,56539],{"class":107,"line":16668},[105,56532,55219],{"class":115},[105,56534,14],{"class":51285},[105,56536,55270],{"class":115},[105,56538,14],{"class":51285},[105,56540,51292],{"class":115},[105,56542,56543,56545,56547],{"class":107,"line":16688},[105,56544,55219],{"class":115},[105,56546,1123],{"class":51285},[105,56548,51292],{"class":115},[105,56550,56551,56553,56555,56557,56559,56561,56563,56565],{"class":107,"line":16694},[105,56552,55287],{"class":115},[105,56554,62],{"class":51285},[105,56556,53471],{"class":1954},[105,56558,161],{"class":115},[105,56560,55296],{"class":220},[105,56562,55299],{"class":115},[105,56564,62],{"class":51285},[105,56566,51292],{"class":115},[105,56568,56569,56571,56573,56575,56577],{"class":107,"line":16705},[105,56570,55287],{"class":115},[105,56572,62],{"class":51285},[105,56574,55299],{"class":115},[105,56576,62],{"class":51285},[105,56578,51292],{"class":115},[105,56580,56581,56583,56585,56587,56589],{"class":107,"line":16728},[105,56582,55287],{"class":115},[105,56584,62],{"class":51285},[105,56586,55299],{"class":115},[105,56588,62],{"class":51285},[105,56590,51292],{"class":115},[105,56592,56593,56595,56597,56599,56601],{"class":107,"line":16750},[105,56594,55287],{"class":115},[105,56596,62],{"class":51285},[105,56598,55299],{"class":115},[105,56600,62],{"class":51285},[105,56602,51292],{"class":115},[105,56604,56605,56607,56609,56611,56613],{"class":107,"line":16755},[105,56606,55287],{"class":115},[105,56608,62],{"class":51285},[105,56610,55299],{"class":115},[105,56612,62],{"class":51285},[105,56614,51292],{"class":115},[105,56616,56617,56619,56621,56623,56625],{"class":107,"line":16761},[105,56618,55287],{"class":115},[105,56620,62],{"class":51285},[105,56622,55299],{"class":115},[105,56624,62],{"class":51285},[105,56626,51292],{"class":115},[105,56628,56629,56631,56633,56635,56637],{"class":107,"line":16775},[105,56630,55287],{"class":115},[105,56632,62],{"class":51285},[105,56634,55299],{"class":115},[105,56636,62],{"class":51285},[105,56638,51292],{"class":115},[105,56640,56641,56643,56645,56647,56649],{"class":107,"line":16788},[105,56642,55287],{"class":115},[105,56644,62],{"class":51285},[105,56646,55299],{"class":115},[105,56648,62],{"class":51285},[105,56650,51292],{"class":115},[105,56652,56653,56655,56657],{"class":107,"line":16793},[105,56654,55392],{"class":115},[105,56656,1123],{"class":51285},[105,56658,51292],{"class":115},[105,56660,56661,56663,56665],{"class":107,"line":16807},[105,56662,51761],{"class":115},[105,56664,51596],{"class":51285},[105,56666,51292],{"class":115},[105,56668,56669,56671,56673],{"class":107,"line":16812},[105,56670,52402],{"class":115},[105,56672,51596],{"class":51285},[105,56674,51292],{"class":115},[105,56676,56677,56679,56681],{"class":107,"line":16818},[105,56678,52129],{"class":115},[105,56680,51798],{"class":51285},[105,56682,51292],{"class":115},[105,56684,56685,56687,56690,56692],{"class":107,"line":16823},[105,56686,11213],{"class":111},[105,56688,56689],{"class":164}," sliderData",[105,56691,13556],{"class":111},[105,56693,55432],{"class":115},[105,56695,56696,56698,56700,56702,56704,56706,56708],{"class":107,"line":16837},[105,56697,55437],{"class":115},[105,56699,55440],{"class":220},[105,56701,55443],{"class":115},[105,56703,55446],{"class":220},[105,56705,55449],{"class":115},[105,56707,55452],{"class":220},[105,56709,55455],{"class":115},[105,56711,56712,56714,56716,56718,56720,56722,56724],{"class":107,"line":16842},[105,56713,55437],{"class":115},[105,56715,55462],{"class":220},[105,56717,55443],{"class":115},[105,56719,55467],{"class":220},[105,56721,55449],{"class":115},[105,56723,55472],{"class":220},[105,56725,55455],{"class":115},[105,56727,56728,56730,56732,56734,56736,56738,56740],{"class":107,"line":16847},[105,56729,55437],{"class":115},[105,56731,55481],{"class":220},[105,56733,55443],{"class":115},[105,56735,55486],{"class":220},[105,56737,55449],{"class":115},[105,56739,55491],{"class":220},[105,56741,55455],{"class":115},[105,56743,56744,56746,56748,56750,56752,56754,56756],{"class":107,"line":16861},[105,56745,55437],{"class":115},[105,56747,55500],{"class":220},[105,56749,55443],{"class":115},[105,56751,55505],{"class":220},[105,56753,55449],{"class":115},[105,56755,55510],{"class":220},[105,56757,55455],{"class":115},[105,56759,56760,56762,56764,56766,56768,56770,56772],{"class":107,"line":16873},[105,56761,55437],{"class":115},[105,56763,55519],{"class":220},[105,56765,55443],{"class":115},[105,56767,55524],{"class":220},[105,56769,55449],{"class":115},[105,56771,55529],{"class":220},[105,56773,55455],{"class":115},[105,56775,56776,56778,56780,56782,56784,56786,56788],{"class":107,"line":16878},[105,56777,55437],{"class":115},[105,56779,55538],{"class":220},[105,56781,55443],{"class":115},[105,56783,55543],{"class":220},[105,56785,55449],{"class":115},[105,56787,55548],{"class":220},[105,56789,55455],{"class":115},[105,56791,56792,56794,56796,56798,56800,56802,56804],{"class":107,"line":16891},[105,56793,55437],{"class":115},[105,56795,55557],{"class":220},[105,56797,55443],{"class":115},[105,56799,55562],{"class":220},[105,56801,55449],{"class":115},[105,56803,55567],{"class":220},[105,56805,55455],{"class":115},[105,56807,56808,56810,56812,56814,56816,56818,56820],{"class":107,"line":16896},[105,56809,55437],{"class":115},[105,56811,55576],{"class":220},[105,56813,55443],{"class":115},[105,56815,55581],{"class":220},[105,56817,55449],{"class":115},[105,56819,55586],{"class":220},[105,56821,55589],{"class":115},[105,56823,56824],{"class":107,"line":16901},[105,56825,53094],{"class":115},[105,56827,56828],{"class":107,"line":16906},[105,56829,56830],{"class":174},"    \u002F\u002F 1.获取元素\n",[105,56832,56833,56835,56837,56839,56841,56843,56845,56847],{"class":107,"line":16919},[105,56834,11213],{"class":111},[105,56836,55600],{"class":164},[105,56838,13556],{"class":111},[105,56840,54381],{"class":115},[105,56842,54384],{"class":1954},[105,56844,116],{"class":115},[105,56846,55611],{"class":220},[105,56848,122],{"class":115},[105,56850,56851,56853,56855,56857,56859,56861,56863,56865],{"class":107,"line":16924},[105,56852,11213],{"class":111},[105,56854,6817],{"class":164},[105,56856,13556],{"class":111},[105,56858,54381],{"class":115},[105,56860,54384],{"class":1954},[105,56862,116],{"class":115},[105,56864,55630],{"class":220},[105,56866,122],{"class":115},[105,56868,56869,56871,56873,56875],{"class":107,"line":32618},[105,56870,52204],{"class":111},[105,56872,9430],{"class":115},[105,56874,161],{"class":111},[105,56876,47318],{"class":164},[105,56878,56879],{"class":107,"line":32624},[105,56880,56881],{"class":174},"    \u002F\u002F 2.开启定时器\n",[105,56883,56884],{"class":107,"line":32630},[105,56885,56886],{"class":174},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[105,56888,56889,56892,56894,56896],{"class":107,"line":32636},[105,56890,56891],{"class":1954},"    setInterval",[105,56893,116],{"class":115},[105,56895,54434],{"class":111},[105,56897,54437],{"class":115},[105,56899,56900,56902],{"class":107,"line":32642},[105,56901,54442],{"class":115},[105,56903,2693],{"class":111},[105,56905,56906,56908,56910,56912,56915,56917],{"class":107,"line":32653},[105,56907,54465],{"class":111},[105,56909,54468],{"class":115},[105,56911,1701],{"class":111},[105,56913,56914],{"class":115}," sliderData.",[105,56916,51953],{"class":164},[105,56918,12434],{"class":115},[105,56920,56921,56924,56926],{"class":107,"line":32659},[105,56922,56923],{"class":115},"        i ",[105,56925,161],{"class":111},[105,56927,47318],{"class":164},[105,56929,56930],{"class":107,"line":32679},[105,56931,52383],{"class":115},[105,56933,56934],{"class":107,"line":32685},[105,56935,56936],{"class":174},"      \u002F\u002F 更换图片路径\n",[105,56938,56939,56941,56943],{"class":107,"line":32696},[105,56940,55706],{"class":115},[105,56942,161],{"class":111},[105,56944,56945],{"class":115}," sliderData[i].url\n",[105,56947,56948],{"class":107,"line":32702},[105,56949,56950],{"class":174},"      \u002F\u002F 把文字写到p里面\n",[105,56952,56953,56955,56957],{"class":107,"line":32708},[105,56954,55716],{"class":115},[105,56956,161],{"class":111},[105,56958,56959],{"class":115}," sliderData[i].title\n",[105,56961,56962],{"class":107,"line":32714},[105,56963,56964],{"class":174},"      \u002F\u002F 小圆点\n",[105,56966,56967],{"class":107,"line":32720},[105,56968,56969],{"class":174},"      \u002F\u002F 先删除以前的active\n",[105,56971,56972],{"class":107,"line":32726},[105,56973,56974],{"class":174},"      \u002F\u002F 只让当前li添加active\n",[105,56976,56977,56979,56981,56983,56986,56989,56992,56994,56996],{"class":107,"line":32732},[105,56978,55756],{"class":115},[105,56980,54384],{"class":1954},[105,56982,116],{"class":115},[105,56984,56985],{"class":220},"'.slider-footer .activate'",[105,56987,56988],{"class":115},").classList.",[105,56990,56991],{"class":1954},"remove",[105,56993,116],{"class":115},[105,56995,55774],{"class":220},[105,56997,122],{"class":115},[105,56999,57000,57002,57004,57006,57009,57011,57013,57015,57018,57020,57022,57024,57026],{"class":107,"line":32738},[105,57001,55756],{"class":115},[105,57003,54384],{"class":1954},[105,57005,116],{"class":115},[105,57007,57008],{"class":220},"`.slider-footer ul li:nth-child(${",[105,57010,557],{"class":115},[105,57012,45551],{"class":111},[105,57014,25103],{"class":164},[105,57016,57017],{"class":220},"})`",[105,57019,56988],{"class":115},[105,57021,5326],{"class":1954},[105,57023,116],{"class":115},[105,57025,55774],{"class":220},[105,57027,122],{"class":115},[105,57029,57030],{"class":107,"line":32758},[105,57031,2391],{"emptyLinePlaceholder":32},[105,57033,57034,57036,57038],{"class":107,"line":32764},[105,57035,54520],{"class":115},[105,57037,6402],{"class":164},[105,57039,122],{"class":115},[105,57041,57042],{"class":107,"line":32780},[105,57043,2391],{"emptyLinePlaceholder":32},[105,57045,57046,57048,57050],{"class":107,"line":32786},[105,57047,52402],{"class":115},[105,57049,51798],{"class":51285},[105,57051,51292],{"class":115},[105,57053,57054,57056,57058],{"class":107,"line":32800},[105,57055,51770],{"class":115},[105,57057,51785],{"class":51285},[105,57059,51292],{"class":115},[105,57061,57062],{"class":107,"line":32806},[105,57063,2391],{"emptyLinePlaceholder":32},[105,57065,57066,57068,57070],{"class":107,"line":32821},[105,57067,51770],{"class":115},[105,57069,50620],{"class":51285},[105,57071,51292],{"class":115},[76,57073,57075],{"id":57074},"_317-重要知识点","3.1.7 重要知识点",[14,57077,57078,57079],{},"浏览器在渲染文本时， ",[265,57080,57081],{},"没有空格或换行符就没有“断行点”",[14,57083,57084],{},[20,57085],{"alt":22,"src":57086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57088,57089],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57091,57092],{},[20,57093],{"alt":22,"src":57094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57096,57097],{},[20,57098],{"alt":22,"src":57099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[47,57101,57103],{"id":57102},"_32-dom事件基础","3.2 DOM事件基础",[76,57105,57107],{"id":57106},"_321-事件监听","3.2.1 事件监听",[14,57109,57110],{},[20,57111],{"alt":22,"src":57112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57114,57115],{},"事件监听有响应的发生",[14,57117,57118],{},[20,57119],{"alt":22,"src":57120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57122,57123],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57125,57126],{},"对于有名函数,要执行的函数名后边不要加()",[76,57128,57130],{"id":57129},"_322-随机点名案例","3.2.2 随机点名案例",[96,57132,57134],{"className":50618,"code":57133,"language":50620,"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",[102,57135,57136,57146,57160,57164,57172,57186,57206,57218,57226,57232,57242,57252,57256,57260,57267,57278,57282,57286,57292,57304,57318,57328,57340,57353,57357,57361,57368,57372,57385,57397,57409,57413,57417,57421,57428,57438,57442,57446,57455,57467,57479,57494,57498,57506,57514,57518,57526,57539,57553,57566,57586,57594,57609,57629,57649,57657,57661,57669,57674,57710,57730,57735,57754,57759,57770,57775,57786,57791,57810,57825,57830,57856,57866,57875,57880,57896,57901,57906,57911,57926,57930,57934,57939,57958,57975,57983,57988,58003,58007,58011,58019,58027,58031],{"__ignoreMap":22},[105,57137,57138,57140,57142,57144],{"class":107,"line":108},[105,57139,51282],{"class":115},[105,57141,51286],{"class":51285},[105,57143,51289],{"class":1954},[105,57145,51292],{"class":115},[105,57147,57148,57150,57152,57154,57156,57158],{"class":107,"line":28},[105,57149,1026],{"class":115},[105,57151,50620],{"class":51285},[105,57153,51301],{"class":1954},[105,57155,161],{"class":115},[105,57157,51306],{"class":220},[105,57159,51292],{"class":115},[105,57161,57162],{"class":107,"line":1171},[105,57163,2391],{"emptyLinePlaceholder":32},[105,57165,57166,57168,57170],{"class":107,"line":1186},[105,57167,1026],{"class":115},[105,57169,51319],{"class":51285},[105,57171,51292],{"class":115},[105,57173,57174,57176,57178,57180,57182,57184],{"class":107,"line":1192},[105,57175,52129],{"class":115},[105,57177,51329],{"class":51285},[105,57179,51332],{"class":1954},[105,57181,161],{"class":115},[105,57183,51337],{"class":220},[105,57185,51292],{"class":115},[105,57187,57188,57190,57192,57194,57196,57198,57200,57202,57204],{"class":107,"line":1206},[105,57189,52129],{"class":115},[105,57191,51329],{"class":51285},[105,57193,14912],{"class":1954},[105,57195,161],{"class":115},[105,57197,51376],{"class":220},[105,57199,51356],{"class":1954},[105,57201,161],{"class":115},[105,57203,51383],{"class":220},[105,57205,51292],{"class":115},[105,57207,57208,57210,57212,57214,57216],{"class":107,"line":1212},[105,57209,52129],{"class":115},[105,57211,51392],{"class":51285},[105,57213,51395],{"class":115},[105,57215,51392],{"class":51285},[105,57217,51292],{"class":115},[105,57219,57220,57222,57224],{"class":107,"line":1303},[105,57221,52129],{"class":115},[105,57223,5118],{"class":51285},[105,57225,51292],{"class":115},[105,57227,57228,57230],{"class":107,"line":1309},[105,57229,6395],{"class":51285},[105,57231,15564],{"class":115},[105,57233,57234,57236,57238,57240],{"class":107,"line":1321},[105,57235,54691],{"class":164},[105,57237,51422],{"class":115},[105,57239,307],{"class":164},[105,57241,1282],{"class":115},[105,57243,57244,57246,57248,57250],{"class":107,"line":1603},[105,57245,54680],{"class":164},[105,57247,51422],{"class":115},[105,57249,307],{"class":164},[105,57251,1282],{"class":115},[105,57253,57254],{"class":107,"line":1608},[105,57255,2178],{"class":115},[105,57257,57258],{"class":107,"line":1614},[105,57259,2391],{"emptyLinePlaceholder":32},[105,57261,57262,57265],{"class":107,"line":1619},[105,57263,57264],{"class":51285},"    h2",[105,57266,15564],{"class":115},[105,57268,57269,57272,57274,57276],{"class":107,"line":1633},[105,57270,57271],{"class":164},"      text-align",[105,57273,51422],{"class":115},[105,57275,51577],{"class":164},[105,57277,1282],{"class":115},[105,57279,57280],{"class":107,"line":1638},[105,57281,2178],{"class":115},[105,57283,57284],{"class":107,"line":1644},[105,57285,2391],{"emptyLinePlaceholder":32},[105,57287,57288,57290],{"class":107,"line":1665},[105,57289,54737],{"class":1954},[105,57291,15564],{"class":115},[105,57293,57294,57296,57298,57300,57302],{"class":107,"line":1670},[105,57295,54756],{"class":164},[105,57297,51422],{"class":115},[105,57299,1530],{"class":164},[105,57301,51477],{"class":111},[105,57303,1282],{"class":115},[105,57305,57306,57308,57310,57312,57314,57316],{"class":107,"line":1684},[105,57307,54691],{"class":164},[105,57309,51422],{"class":115},[105,57311,772],{"class":164},[105,57313,51477],{"class":111},[105,57315,51541],{"class":164},[105,57317,1282],{"class":115},[105,57319,57320,57322,57324,57326],{"class":107,"line":1689},[105,57321,54994],{"class":164},[105,57323,51422],{"class":115},[105,57325,51462],{"class":164},[105,57327,1282],{"class":115},[105,57329,57330,57332,57334,57336,57338],{"class":107,"line":1718},[105,57331,54907],{"class":164},[105,57333,51422],{"class":115},[105,57335,941],{"class":164},[105,57337,51477],{"class":111},[105,57339,1282],{"class":115},[105,57341,57342,57345,57347,57349,57351],{"class":107,"line":1723},[105,57343,57344],{"class":164},"      line-height",[105,57346,51422],{"class":115},[105,57348,517],{"class":164},[105,57350,51477],{"class":111},[105,57352,1282],{"class":115},[105,57354,57355],{"class":107,"line":1740},[105,57356,2178],{"class":115},[105,57358,57359],{"class":107,"line":1745},[105,57360,2391],{"emptyLinePlaceholder":32},[105,57362,57363,57366],{"class":107,"line":1750},[105,57364,57365],{"class":1954},"    .qs",[105,57367,15564],{"class":115},[105,57369,57370],{"class":107,"line":1755},[105,57371,2391],{"emptyLinePlaceholder":32},[105,57373,57374,57376,57378,57381,57383],{"class":107,"line":1769},[105,57375,54756],{"class":164},[105,57377,51422],{"class":115},[105,57379,57380],{"class":164},"450",[105,57382,51477],{"class":111},[105,57384,1282],{"class":115},[105,57386,57387,57389,57391,57393,57395],{"class":107,"line":1774},[105,57388,54770],{"class":164},[105,57390,51422],{"class":115},[105,57392,517],{"class":164},[105,57394,51477],{"class":111},[105,57396,1282],{"class":115},[105,57398,57399,57402,57404,57407],{"class":107,"line":2568},[105,57400,57401],{"class":164},"      color",[105,57403,51422],{"class":115},[105,57405,57406],{"class":164},"red",[105,57408,1282],{"class":115},[105,57410,57411],{"class":107,"line":2582},[105,57412,2391],{"emptyLinePlaceholder":32},[105,57414,57415],{"class":107,"line":2590},[105,57416,2178],{"class":115},[105,57418,57419],{"class":107,"line":2595},[105,57420,2391],{"emptyLinePlaceholder":32},[105,57422,57423,57426],{"class":107,"line":2601},[105,57424,57425],{"class":1954},"    .btns",[105,57427,15564],{"class":115},[105,57429,57430,57432,57434,57436],{"class":107,"line":2607},[105,57431,57271],{"class":164},[105,57433,51422],{"class":115},[105,57435,51577],{"class":164},[105,57437,1282],{"class":115},[105,57439,57440],{"class":107,"line":2612},[105,57441,2178],{"class":115},[105,57443,57444],{"class":107,"line":7940},[105,57445,2391],{"emptyLinePlaceholder":32},[105,57447,57448,57450,57453],{"class":107,"line":7964},[105,57449,57425],{"class":1954},[105,57451,57452],{"class":51285}," button",[105,57454,15564],{"class":115},[105,57456,57457,57459,57461,57463,57465],{"class":107,"line":7969},[105,57458,54756],{"class":164},[105,57460,51422],{"class":115},[105,57462,933],{"class":164},[105,57464,51477],{"class":111},[105,57466,1282],{"class":115},[105,57468,57469,57471,57473,57475,57477],{"class":107,"line":7975},[105,57470,54770],{"class":164},[105,57472,51422],{"class":115},[105,57474,389],{"class":164},[105,57476,51477],{"class":111},[105,57478,1282],{"class":115},[105,57480,57481,57483,57485,57487,57490,57492],{"class":107,"line":8002},[105,57482,54691],{"class":164},[105,57484,51422],{"class":115},[105,57486,307],{"class":164},[105,57488,57489],{"class":164}," 50",[105,57491,51477],{"class":111},[105,57493,1282],{"class":115},[105,57495,57496],{"class":107,"line":8007},[105,57497,2178],{"class":115},[105,57499,57500,57502,57504],{"class":107,"line":8013},[105,57501,52402],{"class":115},[105,57503,5118],{"class":51285},[105,57505,51292],{"class":115},[105,57507,57508,57510,57512],{"class":107,"line":8025},[105,57509,51770],{"class":115},[105,57511,51319],{"class":51285},[105,57513,51292],{"class":115},[105,57515,57516],{"class":107,"line":8037},[105,57517,2391],{"emptyLinePlaceholder":32},[105,57519,57520,57522,57524],{"class":107,"line":8049},[105,57521,1026],{"class":115},[105,57523,51785],{"class":51285},[105,57525,51292],{"class":115},[105,57527,57528,57530,57532,57535,57537],{"class":107,"line":9708},[105,57529,52129],{"class":115},[105,57531,47],{"class":51285},[105,57533,57534],{"class":115},">随机点名\u003C\u002F",[105,57536,47],{"class":51285},[105,57538,51292],{"class":115},[105,57540,57541,57543,57545,57547,57549,57551],{"class":107,"line":9733},[105,57542,52129],{"class":115},[105,57544,51596],{"class":51285},[105,57546,53471],{"class":1954},[105,57548,161],{"class":115},[105,57550,53476],{"class":220},[105,57552,51292],{"class":115},[105,57554,57555,57557,57559,57562,57564],{"class":107,"line":9756},[105,57556,51326],{"class":115},[105,57558,105],{"class":51285},[105,57560,57561],{"class":115},">名字是：\u003C\u002F",[105,57563,105],{"class":51285},[105,57565,51292],{"class":115},[105,57567,57568,57570,57572,57574,57576,57579,57582,57584],{"class":107,"line":9780},[105,57569,51326],{"class":115},[105,57571,51596],{"class":51285},[105,57573,53471],{"class":1954},[105,57575,161],{"class":115},[105,57577,57578],{"class":220},"\"qs\"",[105,57580,57581],{"class":115},">这里显示姓名\u003C\u002F",[105,57583,51596],{"class":51285},[105,57585,51292],{"class":115},[105,57587,57588,57590,57592],{"class":107,"line":9785},[105,57589,52402],{"class":115},[105,57591,51596],{"class":51285},[105,57593,51292],{"class":115},[105,57595,57596,57598,57600,57602,57604,57607],{"class":107,"line":9790},[105,57597,52129],{"class":115},[105,57599,51596],{"class":51285},[105,57601,53471],{"class":1954},[105,57603,161],{"class":115},[105,57605,57606],{"class":220},"\"btns\"",[105,57608,51292],{"class":115},[105,57610,57611,57613,57615,57617,57619,57622,57625,57627],{"class":107,"line":9795},[105,57612,51326],{"class":115},[105,57614,53872],{"class":51285},[105,57616,53471],{"class":1954},[105,57618,161],{"class":115},[105,57620,57621],{"class":220},"\"start\"",[105,57623,57624],{"class":115},">开始\u003C\u002F",[105,57626,53872],{"class":51285},[105,57628,51292],{"class":115},[105,57630,57631,57633,57635,57637,57639,57642,57645,57647],{"class":107,"line":9804},[105,57632,51326],{"class":115},[105,57634,53872],{"class":51285},[105,57636,53471],{"class":1954},[105,57638,161],{"class":115},[105,57640,57641],{"class":220},"\"end\"",[105,57643,57644],{"class":115},">结束\u003C\u002F",[105,57646,53872],{"class":51285},[105,57648,51292],{"class":115},[105,57650,57651,57653,57655],{"class":107,"line":9809},[105,57652,52402],{"class":115},[105,57654,51596],{"class":51285},[105,57656,51292],{"class":115},[105,57658,57659],{"class":107,"line":9815},[105,57660,2391],{"emptyLinePlaceholder":32},[105,57662,57663,57665,57667],{"class":107,"line":9836},[105,57664,52129],{"class":115},[105,57666,51798],{"class":51285},[105,57668,51292],{"class":115},[105,57670,57671],{"class":107,"line":9842},[105,57672,57673],{"class":174},"    \u002F\u002F 数据数组\n",[105,57675,57676,57678,57681,57683,57685,57688,57690,57693,57695,57698,57700,57703,57705,57708],{"class":107,"line":9856},[105,57677,11213],{"class":111},[105,57679,57680],{"class":164}," arr",[105,57682,13556],{"class":111},[105,57684,52211],{"class":115},[105,57686,57687],{"class":220},"'马超'",[105,57689,12427],{"class":115},[105,57691,57692],{"class":220},"'黄忠'",[105,57694,12427],{"class":115},[105,57696,57697],{"class":220},"'赵云'",[105,57699,12427],{"class":115},[105,57701,57702],{"class":220},"'关羽'",[105,57704,12427],{"class":115},[105,57706,57707],{"class":220},"'张飞'",[105,57709,33231],{"class":115},[105,57711,57712,57714,57717,57719,57721,57723,57725,57728],{"class":107,"line":9862},[105,57713,11213],{"class":111},[105,57715,57716],{"class":164}," qs",[105,57718,13556],{"class":111},[105,57720,54381],{"class":115},[105,57722,54384],{"class":1954},[105,57724,116],{"class":115},[105,57726,57727],{"class":220},"'.qs'",[105,57729,122],{"class":115},[105,57731,57732],{"class":107,"line":9889},[105,57733,57734],{"class":174},"    \u002F\u002F 1.业务1.开始按钮模块\n",[105,57736,57737,57739,57741,57743,57745,57747,57749,57752],{"class":107,"line":9898},[105,57738,11213],{"class":111},[105,57740,4175],{"class":164},[105,57742,13556],{"class":111},[105,57744,54381],{"class":115},[105,57746,54384],{"class":1954},[105,57748,116],{"class":115},[105,57750,57751],{"class":220},"'.start'",[105,57753,122],{"class":115},[105,57755,57756],{"class":107,"line":9904},[105,57757,57758],{"class":174},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[105,57760,57761,57763,57766,57768],{"class":107,"line":9912},[105,57762,52204],{"class":111},[105,57764,57765],{"class":115}," timerId ",[105,57767,161],{"class":111},[105,57769,47318],{"class":164},[105,57771,57772],{"class":107,"line":9917},[105,57773,57774],{"class":174},"    \u002F\u002F 随机号要全局变量\n",[105,57776,57777,57779,57782,57784],{"class":107,"line":16596},[105,57778,52204],{"class":111},[105,57780,57781],{"class":115}," random ",[105,57783,161],{"class":111},[105,57785,47318],{"class":164},[105,57787,57788],{"class":107,"line":16602},[105,57789,57790],{"class":174},"    \u002F\u002F 1.1 添加点击事件\n",[105,57792,57793,57796,57799,57801,57804,57806,57808],{"class":107,"line":16625},[105,57794,57795],{"class":115},"    start.",[105,57797,57798],{"class":1954},"addEventListener",[105,57800,116],{"class":115},[105,57802,57803],{"class":220},"'click'",[105,57805,12427],{"class":115},[105,57807,54434],{"class":111},[105,57809,54437],{"class":115},[105,57811,57812,57815,57817,57819,57821,57823],{"class":107,"line":16631},[105,57813,57814],{"class":115},"      timerId ",[105,57816,161],{"class":111},[105,57818,54429],{"class":1954},[105,57820,116],{"class":115},[105,57822,54434],{"class":111},[105,57824,54437],{"class":115},[105,57826,57827],{"class":107,"line":16654},[105,57828,57829],{"class":174},"        \u002F\u002F 随机数\n",[105,57831,57832,57835,57837,57840,57843,57846,57848,57850,57852,57854],{"class":107,"line":16668},[105,57833,57834],{"class":115},"        random ",[105,57836,161],{"class":111},[105,57838,57839],{"class":1954}," parseInt",[105,57841,57842],{"class":115},"(Math.",[105,57844,57845],{"class":1954},"random",[105,57847,13042],{"class":115},[105,57849,571],{"class":111},[105,57851,51950],{"class":115},[105,57853,51953],{"class":164},[105,57855,122],{"class":115},[105,57857,57858,57861,57863],{"class":107,"line":16688},[105,57859,57860],{"class":115},"        qs.innerHTML ",[105,57862,161],{"class":111},[105,57864,57865],{"class":115}," arr[random]\n",[105,57867,57868,57871,57873],{"class":107,"line":16694},[105,57869,57870],{"class":115},"      }, ",[105,57872,389],{"class":164},[105,57874,122],{"class":115},[105,57876,57877],{"class":107,"line":16705},[105,57878,57879],{"class":174},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[105,57881,57882,57884,57887,57889,57892,57894],{"class":107,"line":16728},[105,57883,54465],{"class":111},[105,57885,57886],{"class":115}," (arr.",[105,57888,51953],{"class":164},[105,57890,57891],{"class":111}," ===",[105,57893,25103],{"class":164},[105,57895,12434],{"class":115},[105,57897,57898],{"class":107,"line":16750},[105,57899,57900],{"class":174},"        \u002F\u002F start.disabled = true\n",[105,57902,57903],{"class":107,"line":16755},[105,57904,57905],{"class":174},"        \u002F\u002F end.disabled = true\n",[105,57907,57908],{"class":107,"line":16761},[105,57909,57910],{"class":174},"        \u002F\u002F 可以合起来写\n",[105,57912,57913,57916,57918,57921,57923],{"class":107,"line":16775},[105,57914,57915],{"class":115},"        start.disabled ",[105,57917,161],{"class":111},[105,57919,57920],{"class":115}," end.disabled ",[105,57922,161],{"class":111},[105,57924,57925],{"class":164}," true\n",[105,57927,57928],{"class":107,"line":16788},[105,57929,52383],{"class":115},[105,57931,57932],{"class":107,"line":16793},[105,57933,33446],{"class":115},[105,57935,57936],{"class":107,"line":16807},[105,57937,57938],{"class":174},"    \u002F\u002F 1.2 关闭按钮模块\n",[105,57940,57941,57943,57945,57947,57949,57951,57953,57956],{"class":107,"line":16812},[105,57942,11213],{"class":111},[105,57944,4191],{"class":164},[105,57946,13556],{"class":111},[105,57948,54381],{"class":115},[105,57950,54384],{"class":1954},[105,57952,116],{"class":115},[105,57954,57955],{"class":220},"'.end'",[105,57957,122],{"class":115},[105,57959,57960,57963,57965,57967,57969,57971,57973],{"class":107,"line":16818},[105,57961,57962],{"class":115},"    end.",[105,57964,57798],{"class":1954},[105,57966,116],{"class":115},[105,57968,57803],{"class":220},[105,57970,12427],{"class":115},[105,57972,54434],{"class":111},[105,57974,54437],{"class":115},[105,57976,57977,57980],{"class":107,"line":16823},[105,57978,57979],{"class":1954},"      clearInterval",[105,57981,57982],{"class":115},"(timerId)\n",[105,57984,57985],{"class":107,"line":16837},[105,57986,57987],{"class":174},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[105,57989,57990,57993,57996,57999,58001],{"class":107,"line":16842},[105,57991,57992],{"class":115},"      arr.",[105,57994,57995],{"class":1954},"splice",[105,57997,57998],{"class":115},"(random, ",[105,58000,333],{"class":164},[105,58002,122],{"class":115},[105,58004,58005],{"class":107,"line":16847},[105,58006,33446],{"class":115},[105,58008,58009],{"class":107,"line":16861},[105,58010,2391],{"emptyLinePlaceholder":32},[105,58012,58013,58015,58017],{"class":107,"line":16873},[105,58014,52402],{"class":115},[105,58016,51798],{"class":51285},[105,58018,51292],{"class":115},[105,58020,58021,58023,58025],{"class":107,"line":16878},[105,58022,51770],{"class":115},[105,58024,51785],{"class":51285},[105,58026,51292],{"class":115},[105,58028,58029],{"class":107,"line":16891},[105,58030,2391],{"emptyLinePlaceholder":32},[105,58032,58033,58035,58037],{"class":107,"line":16896},[105,58034,51770],{"class":115},[105,58036,50620],{"class":51285},[105,58038,51292],{"class":115},[14,58040,58041],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[76,58043,58045],{"id":58044},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[96,58047,58049],{"className":50618,"code":58048,"language":50620,"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",[102,58050,58051,58061,58075,58079,58087,58101,58121,58133,58141,58145,58153,58165,58173,58192,58209,58225,58235,58239,58247,58255,58259],{"__ignoreMap":22},[105,58052,58053,58055,58057,58059],{"class":107,"line":108},[105,58054,51282],{"class":115},[105,58056,51286],{"class":51285},[105,58058,51289],{"class":1954},[105,58060,51292],{"class":115},[105,58062,58063,58065,58067,58069,58071,58073],{"class":107,"line":28},[105,58064,1026],{"class":115},[105,58066,50620],{"class":51285},[105,58068,51301],{"class":1954},[105,58070,161],{"class":115},[105,58072,51306],{"class":220},[105,58074,51292],{"class":115},[105,58076,58077],{"class":107,"line":1171},[105,58078,2391],{"emptyLinePlaceholder":32},[105,58080,58081,58083,58085],{"class":107,"line":1186},[105,58082,1026],{"class":115},[105,58084,51319],{"class":51285},[105,58086,51292],{"class":115},[105,58088,58089,58091,58093,58095,58097,58099],{"class":107,"line":1192},[105,58090,52129],{"class":115},[105,58092,51329],{"class":51285},[105,58094,51332],{"class":1954},[105,58096,161],{"class":115},[105,58098,51337],{"class":220},[105,58100,51292],{"class":115},[105,58102,58103,58105,58107,58109,58111,58113,58115,58117,58119],{"class":107,"line":1206},[105,58104,52129],{"class":115},[105,58106,51329],{"class":51285},[105,58108,14912],{"class":1954},[105,58110,161],{"class":115},[105,58112,51376],{"class":220},[105,58114,51356],{"class":1954},[105,58116,161],{"class":115},[105,58118,51383],{"class":220},[105,58120,51292],{"class":115},[105,58122,58123,58125,58127,58129,58131],{"class":107,"line":1212},[105,58124,52129],{"class":115},[105,58126,51392],{"class":51285},[105,58128,51395],{"class":115},[105,58130,51392],{"class":51285},[105,58132,51292],{"class":115},[105,58134,58135,58137,58139],{"class":107,"line":1303},[105,58136,51770],{"class":115},[105,58138,51319],{"class":51285},[105,58140,51292],{"class":115},[105,58142,58143],{"class":107,"line":1309},[105,58144,2391],{"emptyLinePlaceholder":32},[105,58146,58147,58149,58151],{"class":107,"line":1321},[105,58148,1026],{"class":115},[105,58150,51785],{"class":51285},[105,58152,51292],{"class":115},[105,58154,58155,58157,58159,58161,58163],{"class":107,"line":1603},[105,58156,52129],{"class":115},[105,58158,53872],{"class":51285},[105,58160,53878],{"class":115},[105,58162,53872],{"class":51285},[105,58164,51292],{"class":115},[105,58166,58167,58169,58171],{"class":107,"line":1608},[105,58168,52129],{"class":115},[105,58170,51798],{"class":51285},[105,58172,51292],{"class":115},[105,58174,58175,58177,58179,58181,58183,58185,58187,58190],{"class":107,"line":1614},[105,58176,11213],{"class":111},[105,58178,54376],{"class":164},[105,58180,13556],{"class":111},[105,58182,54381],{"class":115},[105,58184,54384],{"class":1954},[105,58186,116],{"class":115},[105,58188,58189],{"class":220},"'button'",[105,58191,122],{"class":115},[105,58193,58194,58197,58199,58201,58203,58205,58207],{"class":107,"line":1619},[105,58195,58196],{"class":115},"    btn.",[105,58198,57798],{"class":1954},[105,58200,116],{"class":115},[105,58202,57803],{"class":220},[105,58204,12427],{"class":115},[105,58206,54434],{"class":111},[105,58208,54437],{"class":115},[105,58210,58211,58214,58216,58218,58221,58223],{"class":107,"line":1633},[105,58212,58213],{"class":111},"      const",[105,58215,2231],{"class":164},[105,58217,13556],{"class":111},[105,58219,58220],{"class":115}," Math.",[105,58222,57845],{"class":1954},[105,58224,1967],{"class":115},[105,58226,58227,58230,58233],{"class":107,"line":1638},[105,58228,58229],{"class":115},"      console.",[105,58231,58232],{"class":1954},"log",[105,58234,129],{"class":115},[105,58236,58237],{"class":107,"line":1644},[105,58238,33446],{"class":115},[105,58240,58241,58243,58245],{"class":107,"line":1665},[105,58242,52402],{"class":115},[105,58244,51798],{"class":51285},[105,58246,51292],{"class":115},[105,58248,58249,58251,58253],{"class":107,"line":1670},[105,58250,51770],{"class":115},[105,58252,51785],{"class":51285},[105,58254,51292],{"class":115},[105,58256,58257],{"class":107,"line":1684},[105,58258,2391],{"emptyLinePlaceholder":32},[105,58260,58261,58263,58265],{"class":107,"line":1689},[105,58262,51770],{"class":115},[105,58264,50620],{"class":51285},[105,58266,51292],{"class":115},[14,58268,58269],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58271,58272],{},"常量不可以重新赋值",[14,58274,58275],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[96,58277,58279],{"className":50618,"code":58278,"language":50620,"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",[102,58280,58281,58291,58305,58309,58317,58331,58351,58363,58371,58375,58383,58395,58403,58414,58432,58448,58462,58470,58474,58482,58490,58494],{"__ignoreMap":22},[105,58282,58283,58285,58287,58289],{"class":107,"line":108},[105,58284,51282],{"class":115},[105,58286,51286],{"class":51285},[105,58288,51289],{"class":1954},[105,58290,51292],{"class":115},[105,58292,58293,58295,58297,58299,58301,58303],{"class":107,"line":28},[105,58294,1026],{"class":115},[105,58296,50620],{"class":51285},[105,58298,51301],{"class":1954},[105,58300,161],{"class":115},[105,58302,51306],{"class":220},[105,58304,51292],{"class":115},[105,58306,58307],{"class":107,"line":1171},[105,58308,2391],{"emptyLinePlaceholder":32},[105,58310,58311,58313,58315],{"class":107,"line":1186},[105,58312,1026],{"class":115},[105,58314,51319],{"class":51285},[105,58316,51292],{"class":115},[105,58318,58319,58321,58323,58325,58327,58329],{"class":107,"line":1192},[105,58320,52129],{"class":115},[105,58322,51329],{"class":51285},[105,58324,51332],{"class":1954},[105,58326,161],{"class":115},[105,58328,51337],{"class":220},[105,58330,51292],{"class":115},[105,58332,58333,58335,58337,58339,58341,58343,58345,58347,58349],{"class":107,"line":1206},[105,58334,52129],{"class":115},[105,58336,51329],{"class":51285},[105,58338,14912],{"class":1954},[105,58340,161],{"class":115},[105,58342,51376],{"class":220},[105,58344,51356],{"class":1954},[105,58346,161],{"class":115},[105,58348,51383],{"class":220},[105,58350,51292],{"class":115},[105,58352,58353,58355,58357,58359,58361],{"class":107,"line":1212},[105,58354,52129],{"class":115},[105,58356,51392],{"class":51285},[105,58358,51395],{"class":115},[105,58360,51392],{"class":51285},[105,58362,51292],{"class":115},[105,58364,58365,58367,58369],{"class":107,"line":1303},[105,58366,51770],{"class":115},[105,58368,51319],{"class":51285},[105,58370,51292],{"class":115},[105,58372,58373],{"class":107,"line":1309},[105,58374,2391],{"emptyLinePlaceholder":32},[105,58376,58377,58379,58381],{"class":107,"line":1321},[105,58378,1026],{"class":115},[105,58380,51785],{"class":51285},[105,58382,51292],{"class":115},[105,58384,58385,58387,58389,58391,58393],{"class":107,"line":1603},[105,58386,52129],{"class":115},[105,58388,53872],{"class":51285},[105,58390,53878],{"class":115},[105,58392,53872],{"class":51285},[105,58394,51292],{"class":115},[105,58396,58397,58399,58401],{"class":107,"line":1608},[105,58398,52129],{"class":115},[105,58400,51798],{"class":51285},[105,58402,51292],{"class":115},[105,58404,58405,58407,58409,58411],{"class":107,"line":1614},[105,58406,11213],{"class":111},[105,58408,2231],{"class":164},[105,58410,13556],{"class":111},[105,58412,58413],{"class":164}," 10\n",[105,58415,58416,58418,58420,58422,58424,58426,58428,58430],{"class":107,"line":1619},[105,58417,11213],{"class":111},[105,58419,54376],{"class":164},[105,58421,13556],{"class":111},[105,58423,54381],{"class":115},[105,58425,54384],{"class":1954},[105,58427,116],{"class":115},[105,58429,58189],{"class":220},[105,58431,122],{"class":115},[105,58433,58434,58436,58438,58440,58442,58444,58446],{"class":107,"line":1633},[105,58435,58196],{"class":115},[105,58437,57798],{"class":1954},[105,58439,116],{"class":115},[105,58441,57803],{"class":220},[105,58443,12427],{"class":115},[105,58445,54434],{"class":111},[105,58447,54437],{"class":115},[105,58449,58450,58452,58454,58456,58458,58460],{"class":107,"line":1638},[105,58451,58213],{"class":111},[105,58453,2231],{"class":164},[105,58455,13556],{"class":111},[105,58457,58220],{"class":115},[105,58459,57845],{"class":1954},[105,58461,1967],{"class":115},[105,58463,58464,58466,58468],{"class":107,"line":1644},[105,58465,58229],{"class":115},[105,58467,58232],{"class":1954},[105,58469,129],{"class":115},[105,58471,58472],{"class":107,"line":1665},[105,58473,33446],{"class":115},[105,58475,58476,58478,58480],{"class":107,"line":1670},[105,58477,52402],{"class":115},[105,58479,51798],{"class":51285},[105,58481,51292],{"class":115},[105,58483,58484,58486,58488],{"class":107,"line":1684},[105,58485,51770],{"class":115},[105,58487,51785],{"class":51285},[105,58489,51292],{"class":115},[105,58491,58492],{"class":107,"line":1689},[105,58493,2391],{"emptyLinePlaceholder":32},[105,58495,58496,58498,58500],{"class":107,"line":1718},[105,58497,51770],{"class":115},[105,58499,50620],{"class":51285},[105,58501,51292],{"class":115},[14,58503,58504],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[96,58506,58508],{"className":50618,"code":58507,"language":50620,"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",[102,58509,58510,58520,58534,58538,58546,58560,58580,58592,58600,58604,58612,58624,58632,58642,58660,58676,58689,58697,58701,58709,58717,58721],{"__ignoreMap":22},[105,58511,58512,58514,58516,58518],{"class":107,"line":108},[105,58513,51282],{"class":115},[105,58515,51286],{"class":51285},[105,58517,51289],{"class":1954},[105,58519,51292],{"class":115},[105,58521,58522,58524,58526,58528,58530,58532],{"class":107,"line":28},[105,58523,1026],{"class":115},[105,58525,50620],{"class":51285},[105,58527,51301],{"class":1954},[105,58529,161],{"class":115},[105,58531,51306],{"class":220},[105,58533,51292],{"class":115},[105,58535,58536],{"class":107,"line":1171},[105,58537,2391],{"emptyLinePlaceholder":32},[105,58539,58540,58542,58544],{"class":107,"line":1186},[105,58541,1026],{"class":115},[105,58543,51319],{"class":51285},[105,58545,51292],{"class":115},[105,58547,58548,58550,58552,58554,58556,58558],{"class":107,"line":1192},[105,58549,52129],{"class":115},[105,58551,51329],{"class":51285},[105,58553,51332],{"class":1954},[105,58555,161],{"class":115},[105,58557,51337],{"class":220},[105,58559,51292],{"class":115},[105,58561,58562,58564,58566,58568,58570,58572,58574,58576,58578],{"class":107,"line":1206},[105,58563,52129],{"class":115},[105,58565,51329],{"class":51285},[105,58567,14912],{"class":1954},[105,58569,161],{"class":115},[105,58571,51376],{"class":220},[105,58573,51356],{"class":1954},[105,58575,161],{"class":115},[105,58577,51383],{"class":220},[105,58579,51292],{"class":115},[105,58581,58582,58584,58586,58588,58590],{"class":107,"line":1212},[105,58583,52129],{"class":115},[105,58585,51392],{"class":51285},[105,58587,51395],{"class":115},[105,58589,51392],{"class":51285},[105,58591,51292],{"class":115},[105,58593,58594,58596,58598],{"class":107,"line":1303},[105,58595,51770],{"class":115},[105,58597,51319],{"class":51285},[105,58599,51292],{"class":115},[105,58601,58602],{"class":107,"line":1309},[105,58603,2391],{"emptyLinePlaceholder":32},[105,58605,58606,58608,58610],{"class":107,"line":1321},[105,58607,1026],{"class":115},[105,58609,51785],{"class":51285},[105,58611,51292],{"class":115},[105,58613,58614,58616,58618,58620,58622],{"class":107,"line":1603},[105,58615,52129],{"class":115},[105,58617,53872],{"class":51285},[105,58619,53878],{"class":115},[105,58621,53872],{"class":51285},[105,58623,51292],{"class":115},[105,58625,58626,58628,58630],{"class":107,"line":1608},[105,58627,52129],{"class":115},[105,58629,51798],{"class":51285},[105,58631,51292],{"class":115},[105,58633,58634,58636,58638,58640],{"class":107,"line":1614},[105,58635,11213],{"class":111},[105,58637,2231],{"class":164},[105,58639,13556],{"class":111},[105,58641,58413],{"class":164},[105,58643,58644,58646,58648,58650,58652,58654,58656,58658],{"class":107,"line":1619},[105,58645,11213],{"class":111},[105,58647,54376],{"class":164},[105,58649,13556],{"class":111},[105,58651,54381],{"class":115},[105,58653,54384],{"class":1954},[105,58655,116],{"class":115},[105,58657,58189],{"class":220},[105,58659,122],{"class":115},[105,58661,58662,58664,58666,58668,58670,58672,58674],{"class":107,"line":1633},[105,58663,58196],{"class":115},[105,58665,57798],{"class":1954},[105,58667,116],{"class":115},[105,58669,57803],{"class":220},[105,58671,12427],{"class":115},[105,58673,54434],{"class":111},[105,58675,54437],{"class":115},[105,58677,58678,58681,58683,58685,58687],{"class":107,"line":1638},[105,58679,58680],{"class":115},"      num ",[105,58682,161],{"class":111},[105,58684,58220],{"class":115},[105,58686,57845],{"class":1954},[105,58688,1967],{"class":115},[105,58690,58691,58693,58695],{"class":107,"line":1644},[105,58692,58229],{"class":115},[105,58694,58232],{"class":1954},[105,58696,129],{"class":115},[105,58698,58699],{"class":107,"line":1665},[105,58700,33446],{"class":115},[105,58702,58703,58705,58707],{"class":107,"line":1670},[105,58704,52402],{"class":115},[105,58706,51798],{"class":51285},[105,58708,51292],{"class":115},[105,58710,58711,58713,58715],{"class":107,"line":1684},[105,58712,51770],{"class":115},[105,58714,51785],{"class":51285},[105,58716,51292],{"class":115},[105,58718,58719],{"class":107,"line":1689},[105,58720,2391],{"emptyLinePlaceholder":32},[105,58722,58723,58725,58727],{"class":107,"line":1718},[105,58724,51770],{"class":115},[105,58726,50620],{"class":51285},[105,58728,51292],{"class":115},[14,58730,58731],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[76,58733,58735],{"id":58734},"_324-事件监听版本","3.2.4 事件监听版本",[14,58737,58738],{},[20,58739],{"alt":22,"src":58740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58742,58743],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58745,58746],{},"这种方式会覆盖前边的事件监听:",[96,58748,58750],{"className":50618,"code":58749,"language":50620,"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",[102,58751,58752,58762,58776,58780,58788,58802,58822,58834,58842,58846,58854,58866,58874,58892,58906,58917,58921,58933,58943,58947,58955,58963,58967],{"__ignoreMap":22},[105,58753,58754,58756,58758,58760],{"class":107,"line":108},[105,58755,51282],{"class":115},[105,58757,51286],{"class":51285},[105,58759,51289],{"class":1954},[105,58761,51292],{"class":115},[105,58763,58764,58766,58768,58770,58772,58774],{"class":107,"line":28},[105,58765,1026],{"class":115},[105,58767,50620],{"class":51285},[105,58769,51301],{"class":1954},[105,58771,161],{"class":115},[105,58773,51306],{"class":220},[105,58775,51292],{"class":115},[105,58777,58778],{"class":107,"line":1171},[105,58779,2391],{"emptyLinePlaceholder":32},[105,58781,58782,58784,58786],{"class":107,"line":1186},[105,58783,1026],{"class":115},[105,58785,51319],{"class":51285},[105,58787,51292],{"class":115},[105,58789,58790,58792,58794,58796,58798,58800],{"class":107,"line":1192},[105,58791,52129],{"class":115},[105,58793,51329],{"class":51285},[105,58795,51332],{"class":1954},[105,58797,161],{"class":115},[105,58799,51337],{"class":220},[105,58801,51292],{"class":115},[105,58803,58804,58806,58808,58810,58812,58814,58816,58818,58820],{"class":107,"line":1206},[105,58805,52129],{"class":115},[105,58807,51329],{"class":51285},[105,58809,14912],{"class":1954},[105,58811,161],{"class":115},[105,58813,51376],{"class":220},[105,58815,51356],{"class":1954},[105,58817,161],{"class":115},[105,58819,51383],{"class":220},[105,58821,51292],{"class":115},[105,58823,58824,58826,58828,58830,58832],{"class":107,"line":1212},[105,58825,52129],{"class":115},[105,58827,51392],{"class":51285},[105,58829,51395],{"class":115},[105,58831,51392],{"class":51285},[105,58833,51292],{"class":115},[105,58835,58836,58838,58840],{"class":107,"line":1303},[105,58837,51770],{"class":115},[105,58839,51319],{"class":51285},[105,58841,51292],{"class":115},[105,58843,58844],{"class":107,"line":1309},[105,58845,2391],{"emptyLinePlaceholder":32},[105,58847,58848,58850,58852],{"class":107,"line":1321},[105,58849,1026],{"class":115},[105,58851,51785],{"class":51285},[105,58853,51292],{"class":115},[105,58855,58856,58858,58860,58862,58864],{"class":107,"line":1603},[105,58857,52129],{"class":115},[105,58859,53872],{"class":51285},[105,58861,53878],{"class":115},[105,58863,53872],{"class":51285},[105,58865,51292],{"class":115},[105,58867,58868,58870,58872],{"class":107,"line":1608},[105,58869,52129],{"class":115},[105,58871,51798],{"class":51285},[105,58873,51292],{"class":115},[105,58875,58876,58878,58880,58882,58884,58886,58888,58890],{"class":107,"line":1614},[105,58877,11213],{"class":111},[105,58879,54376],{"class":164},[105,58881,13556],{"class":111},[105,58883,54381],{"class":115},[105,58885,54384],{"class":1954},[105,58887,116],{"class":115},[105,58889,58189],{"class":220},[105,58891,122],{"class":115},[105,58893,58894,58896,58899,58901,58904],{"class":107,"line":1619},[105,58895,58196],{"class":115},[105,58897,58898],{"class":1954},"onclick",[105,58900,13556],{"class":111},[105,58902,58903],{"class":111}," function",[105,58905,54437],{"class":115},[105,58907,58908,58911,58913,58915],{"class":107,"line":1633},[105,58909,58910],{"class":1954},"      alert",[105,58912,116],{"class":115},[105,58914,588],{"class":164},[105,58916,122],{"class":115},[105,58918,58919],{"class":107,"line":1638},[105,58920,2178],{"class":115},[105,58922,58923,58925,58927,58929,58931],{"class":107,"line":1644},[105,58924,58196],{"class":115},[105,58926,58898],{"class":1954},[105,58928,13556],{"class":111},[105,58930,58903],{"class":111},[105,58932,54437],{"class":115},[105,58934,58935,58937,58939,58941],{"class":107,"line":1665},[105,58936,58910],{"class":1954},[105,58938,116],{"class":115},[105,58940,866],{"class":164},[105,58942,122],{"class":115},[105,58944,58945],{"class":107,"line":1670},[105,58946,2178],{"class":115},[105,58948,58949,58951,58953],{"class":107,"line":1684},[105,58950,52402],{"class":115},[105,58952,51798],{"class":51285},[105,58954,51292],{"class":115},[105,58956,58957,58959,58961],{"class":107,"line":1689},[105,58958,51770],{"class":115},[105,58960,51785],{"class":51285},[105,58962,51292],{"class":115},[105,58964,58965],{"class":107,"line":1718},[105,58966,2391],{"emptyLinePlaceholder":32},[105,58968,58969,58971,58973],{"class":107,"line":1723},[105,58970,51770],{"class":115},[105,58972,50620],{"class":51285},[105,58974,51292],{"class":115},[14,58976,58977],{},"只要点击就输出结果为22,前边11被覆盖了",[96,58979,58981],{"className":50618,"code":58980,"language":50620,"meta":22,"style":22},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[102,58982,58983,58988,58993,58997,59002,59007],{"__ignoreMap":22},[105,58984,58985],{"class":107,"line":108},[105,58986,58987],{"class":115},"  btn.addEventListener('click', function () {\n",[105,58989,58990],{"class":107,"line":28},[105,58991,58992],{"class":115},"      alert(11)\n",[105,58994,58995],{"class":107,"line":1171},[105,58996,33446],{"class":115},[105,58998,58999],{"class":107,"line":1186},[105,59000,59001],{"class":115},"    btn.addEventListener('click', function () {\n",[105,59003,59004],{"class":107,"line":1192},[105,59005,59006],{"class":115},"      alert(22)\n",[105,59008,59009],{"class":107,"line":1206},[105,59010,33446],{"class":115},[14,59012,59013],{},"点击第一次输出11,第二次点击为22",[76,59015,59017],{"id":59016},"_325-事件类型","3.2.5 事件类型",[14,59019,59020],{},[20,59021],{"alt":22,"src":59022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21990,59024,59026],{"id":59025},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59028,59029],{},"补充知识:",[14,59031,59032],{},"轮播图自动播放模块,可以使用",[14,59034,59035],{},"let timerId = setInterval(function () {",[14,59037,59038],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59040,59041],{},"用js方法模拟进行点击事件,click必须加()",[14,59043,59044],{},"next.click()",[14,59046,59047],{},"}, 1000)",[14,59049,59050],{},[20,59051],{"alt":22,"src":59052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[96,59054,59056],{"className":53052,"code":59055,"language":53054,"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",[102,59057,59058,59062,59072,59086,59090,59098,59113,59133,59153,59166,59174,59179,59184,59188,59192,59197,59202,59207,59212,59216,59220,59225,59230,59235,59239,59243,59248,59252,59257,59262,59266,59270,59275,59280,59285,59290,59295,59299,59303,59308,59313,59318,59323,59328,59332,59336,59341,59346,59351,59356,59361,59366,59371,59376,59381,59386,59390,59394,59399,59404,59408,59412,59417,59422,59426,59431,59436,59440,59444,59449,59453,59458,59463,59467,59472,59476,59480,59485,59490,59495,59500,59505,59510,59515,59519,59523,59527,59532,59537,59542,59547,59551,59559,59567,59571,59579,59594,59608,59629,59637,59651,59664,59679,59698,59710,59722,59734,59746,59758,59770,59782,59790,59805,59829,59853,59861,59869,59877,59885,59890,59895,59900,59905,59910,59915,59920,59925,59930,59935,59939,59944,59949,59954,59959,59964,59969,59974,59979,59984,59988,59993,59998,60003,60008,60013,60018,60023,60028,60033,60038,60043,60048,60052,60056,60061,60066,60071,60075,60080,60085,60090,60095,60100,60104,60109,60113,60117,60121,60125,60129,60133,60138,60143,60148,60153,60158,60163,60168,60173,60178,60182,60186,60191,60196,60201,60206,60211,60215,60220,60225,60230,60235,60240,60245,60249,60253,60258,60262,60267,60271,60276,60281,60286,60291,60296,60301,60305,60313,60321,60325],{"__ignoreMap":22},[105,59059,59060],{"class":107,"line":108},[105,59061,2391],{"emptyLinePlaceholder":32},[105,59063,59064,59066,59068,59070],{"class":107,"line":28},[105,59065,51282],{"class":115},[105,59067,51286],{"class":111},[105,59069,51289],{"class":164},[105,59071,51292],{"class":115},[105,59073,59074,59076,59078,59080,59082,59084],{"class":107,"line":1171},[105,59075,1026],{"class":115},[105,59077,50620],{"class":51285},[105,59079,51301],{"class":1954},[105,59081,161],{"class":115},[105,59083,51306],{"class":220},[105,59085,51292],{"class":115},[105,59087,59088],{"class":107,"line":1186},[105,59089,2391],{"emptyLinePlaceholder":32},[105,59091,59092,59094,59096],{"class":107,"line":1192},[105,59093,1026],{"class":115},[105,59095,51319],{"class":51285},[105,59097,51292],{"class":115},[105,59099,59100,59102,59104,59106,59108,59110],{"class":107,"line":1206},[105,59101,52129],{"class":115},[105,59103,51329],{"class":51285},[105,59105,51332],{"class":1954},[105,59107,161],{"class":115},[105,59109,51337],{"class":220},[105,59111,59112],{"class":115}," \u002F>\n",[105,59114,59115,59117,59119,59121,59123,59125,59127,59129,59131],{"class":107,"line":1212},[105,59116,52129],{"class":115},[105,59118,51329],{"class":51285},[105,59120,51348],{"class":1954},[105,59122,161],{"class":115},[105,59124,51353],{"class":220},[105,59126,51356],{"class":1954},[105,59128,161],{"class":115},[105,59130,51361],{"class":220},[105,59132,59112],{"class":115},[105,59134,59135,59137,59139,59141,59143,59145,59147,59149,59151],{"class":107,"line":1303},[105,59136,52129],{"class":115},[105,59138,51329],{"class":51285},[105,59140,14912],{"class":1954},[105,59142,161],{"class":115},[105,59144,51376],{"class":220},[105,59146,51356],{"class":1954},[105,59148,161],{"class":115},[105,59150,51383],{"class":220},[105,59152,59112],{"class":115},[105,59154,59155,59157,59159,59162,59164],{"class":107,"line":1309},[105,59156,52129],{"class":115},[105,59158,51392],{"class":51285},[105,59160,59161],{"class":115},">轮播图点击切换\u003C\u002F",[105,59163,51392],{"class":51285},[105,59165,51292],{"class":115},[105,59167,59168,59170,59172],{"class":107,"line":1321},[105,59169,52129],{"class":115},[105,59171,5118],{"class":51285},[105,59173,51292],{"class":115},[105,59175,59176],{"class":107,"line":1603},[105,59177,59178],{"class":115},"    * {\n",[105,59180,59181],{"class":107,"line":1608},[105,59182,59183],{"class":115},"      box-sizing: border-box;\n",[105,59185,59186],{"class":107,"line":1614},[105,59187,2178],{"class":115},[105,59189,59190],{"class":107,"line":1619},[105,59191,2391],{"emptyLinePlaceholder":32},[105,59193,59194],{"class":107,"line":1633},[105,59195,59196],{"class":115},"    .slider {\n",[105,59198,59199],{"class":107,"line":1638},[105,59200,59201],{"class":115},"      width: 560px;\n",[105,59203,59204],{"class":107,"line":1644},[105,59205,59206],{"class":115},"      height: 400px;\n",[105,59208,59209],{"class":107,"line":1665},[105,59210,59211],{"class":115},"      overflow: hidden;\n",[105,59213,59214],{"class":107,"line":1670},[105,59215,2178],{"class":115},[105,59217,59218],{"class":107,"line":1684},[105,59219,2391],{"emptyLinePlaceholder":32},[105,59221,59222],{"class":107,"line":1689},[105,59223,59224],{"class":115},"    .slider-wrapper {\n",[105,59226,59227],{"class":107,"line":1718},[105,59228,59229],{"class":115},"      width: 100%;\n",[105,59231,59232],{"class":107,"line":1723},[105,59233,59234],{"class":115},"      height: 320px;\n",[105,59236,59237],{"class":107,"line":1740},[105,59238,2178],{"class":115},[105,59240,59241],{"class":107,"line":1745},[105,59242,2391],{"emptyLinePlaceholder":32},[105,59244,59245],{"class":107,"line":1750},[105,59246,59247],{"class":115},"    .slider-wrapper img {\n",[105,59249,59250],{"class":107,"line":1755},[105,59251,59229],{"class":115},[105,59253,59254],{"class":107,"line":1769},[105,59255,59256],{"class":115},"      height: 100%;\n",[105,59258,59259],{"class":107,"line":1774},[105,59260,59261],{"class":115},"      display: block;\n",[105,59263,59264],{"class":107,"line":2568},[105,59265,2178],{"class":115},[105,59267,59268],{"class":107,"line":2582},[105,59269,2391],{"emptyLinePlaceholder":32},[105,59271,59272],{"class":107,"line":2590},[105,59273,59274],{"class":115},"    .slider-footer {\n",[105,59276,59277],{"class":107,"line":2595},[105,59278,59279],{"class":115},"      height: 80px;\n",[105,59281,59282],{"class":107,"line":2601},[105,59283,59284],{"class":115},"      background-color: rgb(100, 67, 68);\n",[105,59286,59287],{"class":107,"line":2607},[105,59288,59289],{"class":115},"      padding: 12px 12px 0 12px;\n",[105,59291,59292],{"class":107,"line":2612},[105,59293,59294],{"class":115},"      position: relative;\n",[105,59296,59297],{"class":107,"line":7940},[105,59298,2178],{"class":115},[105,59300,59301],{"class":107,"line":7964},[105,59302,2391],{"emptyLinePlaceholder":32},[105,59304,59305],{"class":107,"line":7969},[105,59306,59307],{"class":115},"    .slider-footer .toggle {\n",[105,59309,59310],{"class":107,"line":7975},[105,59311,59312],{"class":115},"      position: absolute;\n",[105,59314,59315],{"class":107,"line":8002},[105,59316,59317],{"class":115},"      right: 0;\n",[105,59319,59320],{"class":107,"line":8007},[105,59321,59322],{"class":115},"      top: 12px;\n",[105,59324,59325],{"class":107,"line":8013},[105,59326,59327],{"class":115},"      display: flex;\n",[105,59329,59330],{"class":107,"line":8025},[105,59331,2178],{"class":115},[105,59333,59334],{"class":107,"line":8037},[105,59335,2391],{"emptyLinePlaceholder":32},[105,59337,59338],{"class":107,"line":8049},[105,59339,59340],{"class":115},"    .slider-footer .toggle button {\n",[105,59342,59343],{"class":107,"line":9708},[105,59344,59345],{"class":115},"      margin-right: 12px;\n",[105,59347,59348],{"class":107,"line":9733},[105,59349,59350],{"class":115},"      width: 28px;\n",[105,59352,59353],{"class":107,"line":9756},[105,59354,59355],{"class":115},"      height: 28px;\n",[105,59357,59358],{"class":107,"line":9780},[105,59359,59360],{"class":115},"      appearance: none;\n",[105,59362,59363],{"class":107,"line":9785},[105,59364,59365],{"class":115},"      border: none;\n",[105,59367,59368],{"class":107,"line":9790},[105,59369,59370],{"class":115},"      background: rgba(255, 255, 255, 0.1);\n",[105,59372,59373],{"class":107,"line":9795},[105,59374,59375],{"class":115},"      color: #fff;\n",[105,59377,59378],{"class":107,"line":9804},[105,59379,59380],{"class":115},"      border-radius: 4px;\n",[105,59382,59383],{"class":107,"line":9809},[105,59384,59385],{"class":115},"      cursor: pointer;\n",[105,59387,59388],{"class":107,"line":9815},[105,59389,2178],{"class":115},[105,59391,59392],{"class":107,"line":9836},[105,59393,2391],{"emptyLinePlaceholder":32},[105,59395,59396],{"class":107,"line":9842},[105,59397,59398],{"class":115},"    .slider-footer .toggle button:hover {\n",[105,59400,59401],{"class":107,"line":9856},[105,59402,59403],{"class":115},"      background: rgba(255, 255, 255, 0.2);\n",[105,59405,59406],{"class":107,"line":9862},[105,59407,2178],{"class":115},[105,59409,59410],{"class":107,"line":9889},[105,59411,2391],{"emptyLinePlaceholder":32},[105,59413,59414],{"class":107,"line":9898},[105,59415,59416],{"class":115},"    .slider-footer p {\n",[105,59418,59419],{"class":107,"line":9904},[105,59420,59421],{"class":115},"      margin: 0;\n",[105,59423,59424],{"class":107,"line":9912},[105,59425,59375],{"class":115},[105,59427,59428],{"class":107,"line":9917},[105,59429,59430],{"class":115},"      font-size: 18px;\n",[105,59432,59433],{"class":107,"line":16596},[105,59434,59435],{"class":115},"      margin-bottom: 10px;\n",[105,59437,59438],{"class":107,"line":16602},[105,59439,2178],{"class":115},[105,59441,59442],{"class":107,"line":16625},[105,59443,2391],{"emptyLinePlaceholder":32},[105,59445,59446],{"class":107,"line":16631},[105,59447,59448],{"class":115},"    .slider-indicator {\n",[105,59450,59451],{"class":107,"line":16654},[105,59452,59421],{"class":115},[105,59454,59455],{"class":107,"line":16668},[105,59456,59457],{"class":115},"      padding: 0;\n",[105,59459,59460],{"class":107,"line":16688},[105,59461,59462],{"class":115},"      list-style: none;\n",[105,59464,59465],{"class":107,"line":16694},[105,59466,59327],{"class":115},[105,59468,59469],{"class":107,"line":16705},[105,59470,59471],{"class":115},"      align-items: center;\n",[105,59473,59474],{"class":107,"line":16728},[105,59475,2178],{"class":115},[105,59477,59478],{"class":107,"line":16750},[105,59479,2391],{"emptyLinePlaceholder":32},[105,59481,59482],{"class":107,"line":16755},[105,59483,59484],{"class":115},"    .slider-indicator li {\n",[105,59486,59487],{"class":107,"line":16761},[105,59488,59489],{"class":115},"      width: 8px;\n",[105,59491,59492],{"class":107,"line":16775},[105,59493,59494],{"class":115},"      height: 8px;\n",[105,59496,59497],{"class":107,"line":16788},[105,59498,59499],{"class":115},"      margin: 4px;\n",[105,59501,59502],{"class":107,"line":16793},[105,59503,59504],{"class":115},"      border-radius: 50%;\n",[105,59506,59507],{"class":107,"line":16807},[105,59508,59509],{"class":115},"      background: #fff;\n",[105,59511,59512],{"class":107,"line":16812},[105,59513,59514],{"class":115},"      opacity: 0.4;\n",[105,59516,59517],{"class":107,"line":16818},[105,59518,59385],{"class":115},[105,59520,59521],{"class":107,"line":16823},[105,59522,2178],{"class":115},[105,59524,59525],{"class":107,"line":16837},[105,59526,2391],{"emptyLinePlaceholder":32},[105,59528,59529],{"class":107,"line":16842},[105,59530,59531],{"class":115},"    .slider-indicator li.active {\n",[105,59533,59534],{"class":107,"line":16847},[105,59535,59536],{"class":115},"      width: 12px;\n",[105,59538,59539],{"class":107,"line":16861},[105,59540,59541],{"class":115},"      height: 12px;\n",[105,59543,59544],{"class":107,"line":16873},[105,59545,59546],{"class":115},"      opacity: 1;\n",[105,59548,59549],{"class":107,"line":16878},[105,59550,2178],{"class":115},[105,59552,59553,59555,59557],{"class":107,"line":16891},[105,59554,52402],{"class":115},[105,59556,5118],{"class":51285},[105,59558,51292],{"class":115},[105,59560,59561,59563,59565],{"class":107,"line":16896},[105,59562,51770],{"class":115},[105,59564,51319],{"class":51285},[105,59566,51292],{"class":115},[105,59568,59569],{"class":107,"line":16901},[105,59570,2391],{"emptyLinePlaceholder":32},[105,59572,59573,59575,59577],{"class":107,"line":16906},[105,59574,1026],{"class":115},[105,59576,51785],{"class":51285},[105,59578,51292],{"class":115},[105,59580,59581,59583,59585,59587,59589,59592],{"class":107,"line":16919},[105,59582,52129],{"class":115},[105,59584,51596],{"class":51285},[105,59586,53471],{"class":1954},[105,59588,161],{"class":115},[105,59590,59591],{"class":220},"\"slider\"",[105,59593,51292],{"class":115},[105,59595,59596,59598,59600,59602,59604,59606],{"class":107,"line":16924},[105,59597,51326],{"class":115},[105,59599,51596],{"class":51285},[105,59601,53471],{"class":1954},[105,59603,161],{"class":115},[105,59605,55212],{"class":220},[105,59607,51292],{"class":115},[105,59609,59610,59612,59614,59616,59618,59621,59623,59625,59627],{"class":107,"line":32618},[105,59611,55219],{"class":115},[105,59613,20],{"class":51285},[105,59615,55224],{"class":1954},[105,59617,161],{"class":115},[105,59619,59620],{"class":220},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[105,59622,55232],{"class":1954},[105,59624,161],{"class":115},[105,59626,7644],{"class":220},[105,59628,59112],{"class":115},[105,59630,59631,59633,59635],{"class":107,"line":32624},[105,59632,51761],{"class":115},[105,59634,51596],{"class":51285},[105,59636,51292],{"class":115},[105,59638,59639,59641,59643,59645,59647,59649],{"class":107,"line":32630},[105,59640,51326],{"class":115},[105,59642,51596],{"class":51285},[105,59644,53471],{"class":1954},[105,59646,161],{"class":115},[105,59648,55259],{"class":220},[105,59650,51292],{"class":115},[105,59652,59653,59655,59657,59660,59662],{"class":107,"line":32636},[105,59654,55219],{"class":115},[105,59656,14],{"class":51285},[105,59658,59659],{"class":115},">对人类来说会不会太超前了？\u003C\u002F",[105,59661,14],{"class":51285},[105,59663,51292],{"class":115},[105,59665,59666,59668,59670,59672,59674,59677],{"class":107,"line":32642},[105,59667,55219],{"class":115},[105,59669,1123],{"class":51285},[105,59671,53471],{"class":1954},[105,59673,161],{"class":115},[105,59675,59676],{"class":220},"\"slider-indicator\"",[105,59678,51292],{"class":115},[105,59680,59681,59683,59685,59687,59689,59692,59694,59696],{"class":107,"line":32653},[105,59682,55287],{"class":115},[105,59684,62],{"class":51285},[105,59686,53471],{"class":1954},[105,59688,161],{"class":115},[105,59690,59691],{"class":220},"\"active\"",[105,59693,55299],{"class":115},[105,59695,62],{"class":51285},[105,59697,51292],{"class":115},[105,59699,59700,59702,59704,59706,59708],{"class":107,"line":32659},[105,59701,55287],{"class":115},[105,59703,62],{"class":51285},[105,59705,55299],{"class":115},[105,59707,62],{"class":51285},[105,59709,51292],{"class":115},[105,59711,59712,59714,59716,59718,59720],{"class":107,"line":32679},[105,59713,55287],{"class":115},[105,59715,62],{"class":51285},[105,59717,55299],{"class":115},[105,59719,62],{"class":51285},[105,59721,51292],{"class":115},[105,59723,59724,59726,59728,59730,59732],{"class":107,"line":32685},[105,59725,55287],{"class":115},[105,59727,62],{"class":51285},[105,59729,55299],{"class":115},[105,59731,62],{"class":51285},[105,59733,51292],{"class":115},[105,59735,59736,59738,59740,59742,59744],{"class":107,"line":32696},[105,59737,55287],{"class":115},[105,59739,62],{"class":51285},[105,59741,55299],{"class":115},[105,59743,62],{"class":51285},[105,59745,51292],{"class":115},[105,59747,59748,59750,59752,59754,59756],{"class":107,"line":32702},[105,59749,55287],{"class":115},[105,59751,62],{"class":51285},[105,59753,55299],{"class":115},[105,59755,62],{"class":51285},[105,59757,51292],{"class":115},[105,59759,59760,59762,59764,59766,59768],{"class":107,"line":32708},[105,59761,55287],{"class":115},[105,59763,62],{"class":51285},[105,59765,55299],{"class":115},[105,59767,62],{"class":51285},[105,59769,51292],{"class":115},[105,59771,59772,59774,59776,59778,59780],{"class":107,"line":32714},[105,59773,55287],{"class":115},[105,59775,62],{"class":51285},[105,59777,55299],{"class":115},[105,59779,62],{"class":51285},[105,59781,51292],{"class":115},[105,59783,59784,59786,59788],{"class":107,"line":32720},[105,59785,55392],{"class":115},[105,59787,1123],{"class":51285},[105,59789,51292],{"class":115},[105,59791,59792,59794,59796,59798,59800,59803],{"class":107,"line":32726},[105,59793,55219],{"class":115},[105,59795,51596],{"class":51285},[105,59797,53471],{"class":1954},[105,59799,161],{"class":115},[105,59801,59802],{"class":220},"\"toggle\"",[105,59804,51292],{"class":115},[105,59806,59807,59809,59811,59813,59815,59818,59820,59823,59825,59827],{"class":107,"line":32732},[105,59808,55287],{"class":115},[105,59810,53872],{"class":51285},[105,59812,53471],{"class":1954},[105,59814,161],{"class":115},[105,59816,59817],{"class":220},"\"prev\"",[105,59819,1076],{"class":115},[105,59821,59822],{"class":164},"&lt;",[105,59824,51770],{"class":115},[105,59826,53872],{"class":51285},[105,59828,51292],{"class":115},[105,59830,59831,59833,59835,59837,59839,59842,59844,59847,59849,59851],{"class":107,"line":32738},[105,59832,55287],{"class":115},[105,59834,53872],{"class":51285},[105,59836,53471],{"class":1954},[105,59838,161],{"class":115},[105,59840,59841],{"class":220},"\"next\"",[105,59843,1076],{"class":115},[105,59845,59846],{"class":164},"&gt;",[105,59848,51770],{"class":115},[105,59850,53872],{"class":51285},[105,59852,51292],{"class":115},[105,59854,59855,59857,59859],{"class":107,"line":32758},[105,59856,55392],{"class":115},[105,59858,51596],{"class":51285},[105,59860,51292],{"class":115},[105,59862,59863,59865,59867],{"class":107,"line":32764},[105,59864,51761],{"class":115},[105,59866,51596],{"class":51285},[105,59868,51292],{"class":115},[105,59870,59871,59873,59875],{"class":107,"line":32780},[105,59872,52402],{"class":115},[105,59874,51596],{"class":51285},[105,59876,51292],{"class":115},[105,59878,59879,59881,59883],{"class":107,"line":32786},[105,59880,52129],{"class":115},[105,59882,51798],{"class":51285},[105,59884,51292],{"class":115},[105,59886,59887],{"class":107,"line":32800},[105,59888,59889],{"class":115},"    \u002F\u002F 1. 初始数据\n",[105,59891,59892],{"class":107,"line":32806},[105,59893,59894],{"class":115},"    const data = [\n",[105,59896,59897],{"class":107,"line":32821},[105,59898,59899],{"class":115},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[105,59901,59902],{"class":107,"line":32827},[105,59903,59904],{"class":115},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[105,59906,59907],{"class":107,"line":32836},[105,59908,59909],{"class":115},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[105,59911,59912],{"class":107,"line":32842},[105,59913,59914],{"class":115},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[105,59916,59917],{"class":107,"line":32851},[105,59918,59919],{"class":115},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[105,59921,59922],{"class":107,"line":32857},[105,59923,59924],{"class":115},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[105,59926,59927],{"class":107,"line":32863},[105,59928,59929],{"class":115},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[105,59931,59932],{"class":107,"line":32872},[105,59933,59934],{"class":115},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[105,59936,59937],{"class":107,"line":32878},[105,59938,53094],{"class":115},[105,59940,59941],{"class":107,"line":32889},[105,59942,59943],{"class":115},"    \u002F\u002F 获取元素\n",[105,59945,59946],{"class":107,"line":32895},[105,59947,59948],{"class":115},"    const img = document.querySelector('.slider-wrapper img')\n",[105,59950,59951],{"class":107,"line":32914},[105,59952,59953],{"class":115},"    const p = document.querySelector('.slider-footer p')\n",[105,59955,59956],{"class":107,"line":32920},[105,59957,59958],{"class":115},"    const footer = document.querySelector('.slider-footer')\n",[105,59960,59961],{"class":107,"line":32931},[105,59962,59963],{"class":115},"    \u002F\u002F 1. 右按钮业务\n",[105,59965,59966],{"class":107,"line":32937},[105,59967,59968],{"class":115},"    \u002F\u002F 1.1 获取右侧按钮 \n",[105,59970,59971],{"class":107,"line":32957},[105,59972,59973],{"class":115},"    const next = document.querySelector('.next')\n",[105,59975,59976],{"class":107,"line":32973},[105,59977,59978],{"class":115},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[105,59980,59981],{"class":107,"line":32979},[105,59982,59983],{"class":115},"    \u002F\u002F 1.2 注册点击事件\n",[105,59985,59986],{"class":107,"line":32993},[105,59987,2391],{"emptyLinePlaceholder":32},[105,59989,59990],{"class":107,"line":32999},[105,59991,59992],{"class":115},"    next.addEventListener('click', function () {\n",[105,59994,59995],{"class":107,"line":33005},[105,59996,59997],{"class":115},"      \u002F\u002F console.log(11)\n",[105,59999,60000],{"class":107,"line":33016},[105,60001,60002],{"class":115},"      i++\n",[105,60004,60005],{"class":107,"line":33022},[105,60006,60007],{"class":115},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[105,60009,60010],{"class":107,"line":33028},[105,60011,60012],{"class":115},"      \u002F\u002F if (i >= 8) {\n",[105,60014,60015],{"class":107,"line":33038},[105,60016,60017],{"class":115},"      \u002F\u002F   i = 0\n",[105,60019,60020],{"class":107,"line":33044},[105,60021,60022],{"class":115},"      \u002F\u002F }\n",[105,60024,60025],{"class":107,"line":33055},[105,60026,60027],{"class":115},"      i = i >= data.length ? 0 : i\n",[105,60029,60030],{"class":107,"line":33061},[105,60031,60032],{"class":115},"      \u002F\u002F 1.3 得到对应的对象\n",[105,60034,60035],{"class":107,"line":33071},[105,60036,60037],{"class":115},"      \u002F\u002F console.log(data[i])\n",[105,60039,60040],{"class":107,"line":33076},[105,60041,60042],{"class":115},"      \u002F\u002F 调用函数\n",[105,60044,60045],{"class":107,"line":33082},[105,60046,60047],{"class":115},"      toggle()\n",[105,60049,60050],{"class":107,"line":33131},[105,60051,33446],{"class":115},[105,60053,60054],{"class":107,"line":33178},[105,60055,2391],{"emptyLinePlaceholder":32},[105,60057,60058],{"class":107,"line":33183},[105,60059,60060],{"class":115},"    \u002F\u002F 2. 左侧按钮业务\n",[105,60062,60063],{"class":107,"line":33189},[105,60064,60065],{"class":115},"    \u002F\u002F 2.1 获取左侧按钮 \n",[105,60067,60068],{"class":107,"line":33208},[105,60069,60070],{"class":115},"    const prev = document.querySelector('.prev')\n",[105,60072,60073],{"class":107,"line":33214},[105,60074,59983],{"class":115},[105,60076,60077],{"class":107,"line":33234},[105,60078,60079],{"class":115},"    prev.addEventListener('click', function () {\n",[105,60081,60082],{"class":107,"line":33240},[105,60083,60084],{"class":115},"      i--\n",[105,60086,60087],{"class":107,"line":33246},[105,60088,60089],{"class":115},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[105,60091,60092],{"class":107,"line":33256},[105,60093,60094],{"class":115},"      \u002F\u002F if (i \u003C 0) {\n",[105,60096,60097],{"class":107,"line":33261},[105,60098,60099],{"class":115},"      \u002F\u002F   i = 7\n",[105,60101,60102],{"class":107,"line":33267},[105,60103,60022],{"class":115},[105,60105,60106],{"class":107,"line":33283},[105,60107,60108],{"class":115},"      i = i \u003C 0 ? data.length - 1 : i\n",[105,60110,60111],{"class":107,"line":33328},[105,60112,60032],{"class":115},[105,60114,60115],{"class":107,"line":33334},[105,60116,60037],{"class":115},[105,60118,60119],{"class":107,"line":33340},[105,60120,60042],{"class":115},[105,60122,60123],{"class":107,"line":33346},[105,60124,60047],{"class":115},[105,60126,60127],{"class":107,"line":33357},[105,60128,33446],{"class":115},[105,60130,60131],{"class":107,"line":33363},[105,60132,2391],{"emptyLinePlaceholder":32},[105,60134,60135],{"class":107,"line":33369},[105,60136,60137],{"class":115},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[105,60139,60140],{"class":107,"line":33375},[105,60141,60142],{"class":115},"    function toggle() {\n",[105,60144,60145],{"class":107,"line":33393},[105,60146,60147],{"class":115},"      \u002F\u002F 1.4 渲染对应的数据\n",[105,60149,60150],{"class":107,"line":33407},[105,60151,60152],{"class":115},"      img.src = data[i].url\n",[105,60154,60155],{"class":107,"line":33416},[105,60156,60157],{"class":115},"      p.innerHTML = data[i].title\n",[105,60159,60160],{"class":107,"line":33425},[105,60161,60162],{"class":115},"      footer.style.backgroundColor = data[i].color\n",[105,60164,60165],{"class":107,"line":33434},[105,60166,60167],{"class":115},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[105,60169,60170],{"class":107,"line":33443},[105,60171,60172],{"class":115},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[105,60174,60175],{"class":107,"line":33449},[105,60176,60177],{"class":115},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[105,60179,60180],{"class":107,"line":33455},[105,60181,2178],{"class":115},[105,60183,60184],{"class":107,"line":33463},[105,60185,2391],{"emptyLinePlaceholder":32},[105,60187,60188],{"class":107,"line":33468},[105,60189,60190],{"class":115},"    \u002F\u002F 3. 自动播放模块\n",[105,60192,60193],{"class":107,"line":33474},[105,60194,60195],{"class":115},"    let timerId = setInterval(function () {\n",[105,60197,60198],{"class":107,"line":33485},[105,60199,60200],{"class":115},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[105,60202,60203],{"class":107,"line":33491},[105,60204,60205],{"class":115},"      next.click()\n",[105,60207,60208],{"class":107,"line":33511},[105,60209,60210],{"class":115},"    }, 1000)\n",[105,60212,60213],{"class":107,"line":33517},[105,60214,2391],{"emptyLinePlaceholder":32},[105,60216,60217],{"class":107,"line":33523},[105,60218,60219],{"class":115},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[105,60221,60222],{"class":107,"line":33529},[105,60223,60224],{"class":115},"    const slider = document.querySelector('.slider')\n",[105,60226,60227],{"class":107,"line":33546},[105,60228,60229],{"class":115},"    \u002F\u002F 注册事件\n",[105,60231,60232],{"class":107,"line":33552},[105,60233,60234],{"class":115},"    slider.addEventListener('mouseenter', function () {\n",[105,60236,60237],{"class":107,"line":33558},[105,60238,60239],{"class":115},"      \u002F\u002F 停止定时器\n",[105,60241,60242],{"class":107,"line":33564},[105,60243,60244],{"class":115},"      clearInterval(timerId)\n",[105,60246,60247],{"class":107,"line":33570},[105,60248,33446],{"class":115},[105,60250,60251],{"class":107,"line":33576},[105,60252,2391],{"emptyLinePlaceholder":32},[105,60254,60255],{"class":107,"line":33603},[105,60256,60257],{"class":115},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[105,60259,60260],{"class":107,"line":33627},[105,60261,60229],{"class":115},[105,60263,60264],{"class":107,"line":33633},[105,60265,60266],{"class":115},"    slider.addEventListener('mouseleave', function () {\n",[105,60268,60269],{"class":107,"line":33639},[105,60270,60239],{"class":115},[105,60272,60273],{"class":107,"line":33645},[105,60274,60275],{"class":115},"      if (timerId) clearInterval(timerId)\n",[105,60277,60278],{"class":107,"line":33656},[105,60279,60280],{"class":115},"      \u002F\u002F 开启定时器\n",[105,60282,60283],{"class":107,"line":33667},[105,60284,60285],{"class":115},"      timerId = setInterval(function () {\n",[105,60287,60288],{"class":107,"line":33673},[105,60289,60290],{"class":115},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[105,60292,60293],{"class":107,"line":33690},[105,60294,60295],{"class":115},"        next.click()\n",[105,60297,60298],{"class":107,"line":33713},[105,60299,60300],{"class":115},"      }, 1000)\n",[105,60302,60303],{"class":107,"line":33736},[105,60304,33446],{"class":115},[105,60306,60307,60309,60311],{"class":107,"line":33742},[105,60308,52402],{"class":115},[105,60310,51798],{"class":51285},[105,60312,51292],{"class":115},[105,60314,60315,60317,60319],{"class":107,"line":33747},[105,60316,51770],{"class":115},[105,60318,51785],{"class":51285},[105,60320,51292],{"class":115},[105,60322,60323],{"class":107,"line":33756},[105,60324,2391],{"emptyLinePlaceholder":32},[105,60326,60327,60329,60331],{"class":107,"line":33766},[105,60328,51770],{"class":115},[105,60330,50620],{"class":51285},[105,60332,51292],{"class":115},[21990,60334,60336],{"id":60335},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60338,60339],{},"小米搜索框案例：",[96,60341,60343],{"className":50618,"code":60342,"language":50620,"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",[102,60344,60345,60355,60369,60373,60381,60395,60415,60435,60447,60455,60461,60471,60481,60493,60497,60501,60508,60512,60523,60527,60531,60538,60549,60562,60576,60580,60584,60593,60605,60617,60631,60644,60657,60675,60686,60690,60694,60703,60720,60724,60728,60735,60745,60755,60766,60779,60791,60807,60818,60830,60834,60838,60846,60857,60874,60886,60898,60909,60913,60917,60928,60939,60943,60951,60955,60963,60967,60975,60990,61013,61028,61059,61086,61113,61140,61167,61194,61221,61230,61238,61246,61251,61271,61291,61296,61301,61319,61324,61334,61339,61353,61358,61363,61380,61389,61401,61405,61413,61421,61425],{"__ignoreMap":22},[105,60346,60347,60349,60351,60353],{"class":107,"line":108},[105,60348,51282],{"class":115},[105,60350,51286],{"class":51285},[105,60352,51289],{"class":1954},[105,60354,51292],{"class":115},[105,60356,60357,60359,60361,60363,60365,60367],{"class":107,"line":28},[105,60358,1026],{"class":115},[105,60360,50620],{"class":51285},[105,60362,51301],{"class":1954},[105,60364,161],{"class":115},[105,60366,51306],{"class":220},[105,60368,51292],{"class":115},[105,60370,60371],{"class":107,"line":1171},[105,60372,2391],{"emptyLinePlaceholder":32},[105,60374,60375,60377,60379],{"class":107,"line":1186},[105,60376,1026],{"class":115},[105,60378,51319],{"class":51285},[105,60380,51292],{"class":115},[105,60382,60383,60385,60387,60389,60391,60393],{"class":107,"line":1192},[105,60384,51326],{"class":115},[105,60386,51329],{"class":51285},[105,60388,51332],{"class":1954},[105,60390,161],{"class":115},[105,60392,51337],{"class":220},[105,60394,51292],{"class":115},[105,60396,60397,60399,60401,60403,60405,60407,60409,60411,60413],{"class":107,"line":1206},[105,60398,51326],{"class":115},[105,60400,51329],{"class":51285},[105,60402,51348],{"class":1954},[105,60404,161],{"class":115},[105,60406,51353],{"class":220},[105,60408,51356],{"class":1954},[105,60410,161],{"class":115},[105,60412,51361],{"class":220},[105,60414,51292],{"class":115},[105,60416,60417,60419,60421,60423,60425,60427,60429,60431,60433],{"class":107,"line":1212},[105,60418,51326],{"class":115},[105,60420,51329],{"class":51285},[105,60422,14912],{"class":1954},[105,60424,161],{"class":115},[105,60426,51376],{"class":220},[105,60428,51356],{"class":1954},[105,60430,161],{"class":115},[105,60432,51383],{"class":220},[105,60434,51292],{"class":115},[105,60436,60437,60439,60441,60443,60445],{"class":107,"line":1303},[105,60438,51326],{"class":115},[105,60440,51392],{"class":51285},[105,60442,51395],{"class":115},[105,60444,51392],{"class":51285},[105,60446,51292],{"class":115},[105,60448,60449,60451,60453],{"class":107,"line":1309},[105,60450,51326],{"class":115},[105,60452,5118],{"class":51285},[105,60454,51292],{"class":115},[105,60456,60457,60459],{"class":107,"line":1321},[105,60458,51412],{"class":51285},[105,60460,15564],{"class":115},[105,60462,60463,60465,60467,60469],{"class":107,"line":1603},[105,60464,51419],{"class":164},[105,60466,51422],{"class":115},[105,60468,307],{"class":164},[105,60470,1282],{"class":115},[105,60472,60473,60475,60477,60479],{"class":107,"line":1608},[105,60474,51431],{"class":164},[105,60476,51422],{"class":115},[105,60478,307],{"class":164},[105,60480,1282],{"class":115},[105,60482,60483,60486,60488,60491],{"class":107,"line":1614},[105,60484,60485],{"class":164},"            box-sizing",[105,60487,51422],{"class":115},[105,60489,60490],{"class":164},"border-box",[105,60492,1282],{"class":115},[105,60494,60495],{"class":107,"line":1619},[105,60496,2520],{"class":115},[105,60498,60499],{"class":107,"line":1633},[105,60500,2391],{"emptyLinePlaceholder":32},[105,60502,60503,60506],{"class":107,"line":1638},[105,60504,60505],{"class":51285},"        ul",[105,60507,15564],{"class":115},[105,60509,60510],{"class":107,"line":1644},[105,60511,2391],{"emptyLinePlaceholder":32},[105,60513,60514,60517,60519,60521],{"class":107,"line":1665},[105,60515,60516],{"class":164},"            list-style",[105,60518,51422],{"class":115},[105,60520,54722],{"class":164},[105,60522,1282],{"class":115},[105,60524,60525],{"class":107,"line":1670},[105,60526,2520],{"class":115},[105,60528,60529],{"class":107,"line":1684},[105,60530,2391],{"emptyLinePlaceholder":32},[105,60532,60533,60536],{"class":107,"line":1689},[105,60534,60535],{"class":1954},"        .mi",[105,60537,15564],{"class":115},[105,60539,60540,60543,60545,60547],{"class":107,"line":1718},[105,60541,60542],{"class":164},"            position",[105,60544,51422],{"class":115},[105,60546,54749],{"class":164},[105,60548,1282],{"class":115},[105,60550,60551,60553,60555,60558,60560],{"class":107,"line":1723},[105,60552,51469],{"class":164},[105,60554,51422],{"class":115},[105,60556,60557],{"class":164},"223",[105,60559,51477],{"class":111},[105,60561,1282],{"class":115},[105,60563,60564,60566,60568,60570,60572,60574],{"class":107,"line":1740},[105,60565,51419],{"class":164},[105,60567,51422],{"class":115},[105,60569,427],{"class":164},[105,60571,51477],{"class":111},[105,60573,51541],{"class":164},[105,60575,1282],{"class":115},[105,60577,60578],{"class":107,"line":1745},[105,60579,2520],{"class":115},[105,60581,60582],{"class":107,"line":1750},[105,60583,2391],{"emptyLinePlaceholder":32},[105,60585,60586,60588,60591],{"class":107,"line":1755},[105,60587,60535],{"class":1954},[105,60589,60590],{"class":51285}," input",[105,60592,15564],{"class":115},[105,60594,60595,60597,60599,60601,60603],{"class":107,"line":1769},[105,60596,51469],{"class":164},[105,60598,51422],{"class":115},[105,60600,60557],{"class":164},[105,60602,51477],{"class":111},[105,60604,1282],{"class":115},[105,60606,60607,60609,60611,60613,60615],{"class":107,"line":1774},[105,60608,51484],{"class":164},[105,60610,51422],{"class":115},[105,60612,723],{"class":164},[105,60614,51477],{"class":111},[105,60616,1282],{"class":115},[105,60618,60619,60621,60623,60625,60627,60629],{"class":107,"line":2568},[105,60620,51431],{"class":164},[105,60622,51422],{"class":115},[105,60624,307],{"class":164},[105,60626,2029],{"class":164},[105,60628,51477],{"class":111},[105,60630,1282],{"class":115},[105,60632,60633,60636,60638,60640,60642],{"class":107,"line":2582},[105,60634,60635],{"class":164},"            font-size",[105,60637,51422],{"class":115},[105,60639,665],{"class":164},[105,60641,51477],{"class":111},[105,60643,1282],{"class":115},[105,60645,60646,60649,60651,60653,60655],{"class":107,"line":2590},[105,60647,60648],{"class":164},"            line-height",[105,60650,51422],{"class":115},[105,60652,723],{"class":164},[105,60654,51477],{"class":111},[105,60656,1282],{"class":115},[105,60658,60659,60662,60664,60666,60668,60670,60673],{"class":107,"line":2595},[105,60660,60661],{"class":164},"            border",[105,60663,51422],{"class":115},[105,60665,333],{"class":164},[105,60667,51477],{"class":111},[105,60669,51506],{"class":164},[105,60671,60672],{"class":164}," #e0e0e0",[105,60674,1282],{"class":115},[105,60676,60677,60680,60682,60684],{"class":107,"line":2601},[105,60678,60679],{"class":164},"            outline",[105,60681,51422],{"class":115},[105,60683,54722],{"class":164},[105,60685,1282],{"class":115},[105,60687,60688],{"class":107,"line":2607},[105,60689,2520],{"class":115},[105,60691,60692],{"class":107,"line":2612},[105,60693,2391],{"emptyLinePlaceholder":32},[105,60695,60696,60698,60701],{"class":107,"line":7940},[105,60697,60535],{"class":1954},[105,60699,60700],{"class":1954}," .search",[105,60702,15564],{"class":115},[105,60704,60705,60707,60709,60711,60713,60715,60718],{"class":107,"line":7964},[105,60706,60661],{"class":164},[105,60708,51422],{"class":115},[105,60710,333],{"class":164},[105,60712,51477],{"class":111},[105,60714,51506],{"class":164},[105,60716,60717],{"class":164}," #ff6700",[105,60719,1282],{"class":115},[105,60721,60722],{"class":107,"line":7969},[105,60723,2520],{"class":115},[105,60725,60726],{"class":107,"line":7975},[105,60727,2391],{"emptyLinePlaceholder":32},[105,60729,60730,60733],{"class":107,"line":8002},[105,60731,60732],{"class":1954},"        .result-list",[105,60734,15564],{"class":115},[105,60736,60737,60739,60741,60743],{"class":107,"line":8007},[105,60738,51457],{"class":164},[105,60740,51422],{"class":115},[105,60742,54722],{"class":164},[105,60744,1282],{"class":115},[105,60746,60747,60749,60751,60753],{"class":107,"line":8013},[105,60748,60542],{"class":164},[105,60750,51422],{"class":115},[105,60752,54816],{"class":164},[105,60754,1282],{"class":115},[105,60756,60757,60760,60762,60764],{"class":107,"line":8025},[105,60758,60759],{"class":164},"            left",[105,60761,51422],{"class":115},[105,60763,307],{"class":164},[105,60765,1282],{"class":115},[105,60767,60768,60771,60773,60775,60777],{"class":107,"line":8037},[105,60769,60770],{"class":164},"            top",[105,60772,51422],{"class":115},[105,60774,723],{"class":164},[105,60776,51477],{"class":111},[105,60778,1282],{"class":115},[105,60780,60781,60783,60785,60787,60789],{"class":107,"line":8049},[105,60782,51469],{"class":164},[105,60784,51422],{"class":115},[105,60786,60557],{"class":164},[105,60788,51477],{"class":111},[105,60790,1282],{"class":115},[105,60792,60793,60795,60797,60799,60801,60803,60805],{"class":107,"line":9708},[105,60794,60661],{"class":164},[105,60796,51422],{"class":115},[105,60798,333],{"class":164},[105,60800,51477],{"class":111},[105,60802,51506],{"class":164},[105,60804,60717],{"class":164},[105,60806,1282],{"class":115},[105,60808,60809,60812,60814,60816],{"class":107,"line":9733},[105,60810,60811],{"class":164},"            border-top",[105,60813,51422],{"class":115},[105,60815,307],{"class":164},[105,60817,1282],{"class":115},[105,60819,60820,60823,60825,60828],{"class":107,"line":9756},[105,60821,60822],{"class":164},"            background",[105,60824,51422],{"class":115},[105,60826,60827],{"class":164},"#fff",[105,60829,1282],{"class":115},[105,60831,60832],{"class":107,"line":9780},[105,60833,2520],{"class":115},[105,60835,60836],{"class":107,"line":9785},[105,60837,2391],{"emptyLinePlaceholder":32},[105,60839,60840,60842,60844],{"class":107,"line":9790},[105,60841,60732],{"class":1954},[105,60843,1390],{"class":51285},[105,60845,15564],{"class":115},[105,60847,60848,60850,60852,60855],{"class":107,"line":9795},[105,60849,51457],{"class":164},[105,60851,51422],{"class":115},[105,60853,60854],{"class":164},"block",[105,60856,1282],{"class":115},[105,60858,60859,60861,60863,60865,60867,60870,60872],{"class":107,"line":9804},[105,60860,51431],{"class":164},[105,60862,51422],{"class":115},[105,60864,460],{"class":164},[105,60866,51477],{"class":111},[105,60868,60869],{"class":164}," 15",[105,60871,51477],{"class":111},[105,60873,1282],{"class":115},[105,60875,60876,60878,60880,60882,60884],{"class":107,"line":9809},[105,60877,60635],{"class":164},[105,60879,51422],{"class":115},[105,60881,614],{"class":164},[105,60883,51477],{"class":111},[105,60885,1282],{"class":115},[105,60887,60888,60891,60893,60896],{"class":107,"line":9815},[105,60889,60890],{"class":164},"            color",[105,60892,51422],{"class":115},[105,60894,60895],{"class":164},"#424242",[105,60897,1282],{"class":115},[105,60899,60900,60903,60905,60907],{"class":107,"line":9836},[105,60901,60902],{"class":164},"            text-decoration",[105,60904,51422],{"class":115},[105,60906,54722],{"class":164},[105,60908,1282],{"class":115},[105,60910,60911],{"class":107,"line":9842},[105,60912,2520],{"class":115},[105,60914,60915],{"class":107,"line":9856},[105,60916,2391],{"emptyLinePlaceholder":32},[105,60918,60919,60921,60923,60926],{"class":107,"line":9862},[105,60920,60732],{"class":1954},[105,60922,1390],{"class":51285},[105,60924,60925],{"class":1954},":hover",[105,60927,15564],{"class":115},[105,60929,60930,60932,60934,60937],{"class":107,"line":9889},[105,60931,51625],{"class":164},[105,60933,51422],{"class":115},[105,60935,60936],{"class":164},"#eee",[105,60938,1282],{"class":115},[105,60940,60941],{"class":107,"line":9898},[105,60942,2520],{"class":115},[105,60944,60945,60947,60949],{"class":107,"line":9904},[105,60946,51761],{"class":115},[105,60948,5118],{"class":51285},[105,60950,51292],{"class":115},[105,60952,60953],{"class":107,"line":9912},[105,60954,2391],{"emptyLinePlaceholder":32},[105,60956,60957,60959,60961],{"class":107,"line":9917},[105,60958,51770],{"class":115},[105,60960,51319],{"class":51285},[105,60962,51292],{"class":115},[105,60964,60965],{"class":107,"line":16596},[105,60966,2391],{"emptyLinePlaceholder":32},[105,60968,60969,60971,60973],{"class":107,"line":16602},[105,60970,1026],{"class":115},[105,60972,51785],{"class":51285},[105,60974,51292],{"class":115},[105,60976,60977,60979,60981,60983,60985,60988],{"class":107,"line":16625},[105,60978,51326],{"class":115},[105,60980,51596],{"class":51285},[105,60982,53471],{"class":1954},[105,60984,161],{"class":115},[105,60986,60987],{"class":220},"\"mi\"",[105,60989,51292],{"class":115},[105,60991,60992,60994,60996,60998,61000,61003,61006,61008,61011],{"class":107,"line":16631},[105,60993,55287],{"class":115},[105,60995,53806],{"class":51285},[105,60997,53809],{"class":1954},[105,60999,161],{"class":115},[105,61001,61002],{"class":220},"\"search\"",[105,61004,61005],{"class":1954}," placeholder",[105,61007,161],{"class":115},[105,61009,61010],{"class":220},"\"小米笔记本\"",[105,61012,51292],{"class":115},[105,61014,61015,61017,61019,61021,61023,61026],{"class":107,"line":16654},[105,61016,55287],{"class":115},[105,61018,1123],{"class":51285},[105,61020,53471],{"class":1954},[105,61022,161],{"class":115},[105,61024,61025],{"class":220},"\"result-list\"",[105,61027,51292],{"class":115},[105,61029,61030,61033,61035,61038,61040,61043,61045,61048,61051,61053,61055,61057],{"class":107,"line":16668},[105,61031,61032],{"class":115},"            \u003C",[105,61034,62],{"class":51285},[105,61036,61037],{"class":115},">\u003C",[105,61039,354],{"class":51285},[105,61041,61042],{"class":1954}," href",[105,61044,161],{"class":115},[105,61046,61047],{"class":220},"\"#\"",[105,61049,61050],{"class":115},">全部商品\u003C\u002F",[105,61052,354],{"class":51285},[105,61054,55299],{"class":115},[105,61056,62],{"class":51285},[105,61058,51292],{"class":115},[105,61060,61061,61063,61065,61067,61069,61071,61073,61075,61078,61080,61082,61084],{"class":107,"line":16688},[105,61062,61032],{"class":115},[105,61064,62],{"class":51285},[105,61066,61037],{"class":115},[105,61068,354],{"class":51285},[105,61070,61042],{"class":1954},[105,61072,161],{"class":115},[105,61074,61047],{"class":220},[105,61076,61077],{"class":115},">小米11\u003C\u002F",[105,61079,354],{"class":51285},[105,61081,55299],{"class":115},[105,61083,62],{"class":51285},[105,61085,51292],{"class":115},[105,61087,61088,61090,61092,61094,61096,61098,61100,61102,61105,61107,61109,61111],{"class":107,"line":16694},[105,61089,61032],{"class":115},[105,61091,62],{"class":51285},[105,61093,61037],{"class":115},[105,61095,354],{"class":51285},[105,61097,61042],{"class":1954},[105,61099,161],{"class":115},[105,61101,61047],{"class":220},[105,61103,61104],{"class":115},">小米10S\u003C\u002F",[105,61106,354],{"class":51285},[105,61108,55299],{"class":115},[105,61110,62],{"class":51285},[105,61112,51292],{"class":115},[105,61114,61115,61117,61119,61121,61123,61125,61127,61129,61132,61134,61136,61138],{"class":107,"line":16705},[105,61116,61032],{"class":115},[105,61118,62],{"class":51285},[105,61120,61037],{"class":115},[105,61122,354],{"class":51285},[105,61124,61042],{"class":1954},[105,61126,161],{"class":115},[105,61128,61047],{"class":220},[105,61130,61131],{"class":115},">小米笔记本\u003C\u002F",[105,61133,354],{"class":51285},[105,61135,55299],{"class":115},[105,61137,62],{"class":51285},[105,61139,51292],{"class":115},[105,61141,61142,61144,61146,61148,61150,61152,61154,61156,61159,61161,61163,61165],{"class":107,"line":16728},[105,61143,61032],{"class":115},[105,61145,62],{"class":51285},[105,61147,61037],{"class":115},[105,61149,354],{"class":51285},[105,61151,61042],{"class":1954},[105,61153,161],{"class":115},[105,61155,61047],{"class":220},[105,61157,61158],{"class":115},">小米手机\u003C\u002F",[105,61160,354],{"class":51285},[105,61162,55299],{"class":115},[105,61164,62],{"class":51285},[105,61166,51292],{"class":115},[105,61168,61169,61171,61173,61175,61177,61179,61181,61183,61186,61188,61190,61192],{"class":107,"line":16750},[105,61170,61032],{"class":115},[105,61172,62],{"class":51285},[105,61174,61037],{"class":115},[105,61176,354],{"class":51285},[105,61178,61042],{"class":1954},[105,61180,161],{"class":115},[105,61182,61047],{"class":220},[105,61184,61185],{"class":115},">黑鲨4\u003C\u002F",[105,61187,354],{"class":51285},[105,61189,55299],{"class":115},[105,61191,62],{"class":51285},[105,61193,51292],{"class":115},[105,61195,61196,61198,61200,61202,61204,61206,61208,61210,61213,61215,61217,61219],{"class":107,"line":16755},[105,61197,61032],{"class":115},[105,61199,62],{"class":51285},[105,61201,61037],{"class":115},[105,61203,354],{"class":51285},[105,61205,61042],{"class":1954},[105,61207,161],{"class":115},[105,61209,61047],{"class":220},[105,61211,61212],{"class":115},">空调\u003C\u002F",[105,61214,354],{"class":51285},[105,61216,55299],{"class":115},[105,61218,62],{"class":51285},[105,61220,51292],{"class":115},[105,61222,61223,61226,61228],{"class":107,"line":16761},[105,61224,61225],{"class":115},"        \u003C\u002F",[105,61227,1123],{"class":51285},[105,61229,51292],{"class":115},[105,61231,61232,61234,61236],{"class":107,"line":16775},[105,61233,51761],{"class":115},[105,61235,51596],{"class":51285},[105,61237,51292],{"class":115},[105,61239,61240,61242,61244],{"class":107,"line":16788},[105,61241,51326],{"class":115},[105,61243,51798],{"class":51285},[105,61245,51292],{"class":115},[105,61247,61248],{"class":107,"line":16793},[105,61249,61250],{"class":174},"        \u002F\u002F 1. 获取元素\n",[105,61252,61253,61256,61258,61260,61262,61264,61266,61269],{"class":107,"line":16807},[105,61254,61255],{"class":111},"        const",[105,61257,60590],{"class":164},[105,61259,13556],{"class":111},[105,61261,54381],{"class":115},[105,61263,54384],{"class":1954},[105,61265,116],{"class":115},[105,61267,61268],{"class":220},"'[type=search]'",[105,61270,122],{"class":115},[105,61272,61273,61275,61278,61280,61282,61284,61286,61289],{"class":107,"line":16812},[105,61274,61255],{"class":111},[105,61276,61277],{"class":164}," ul",[105,61279,13556],{"class":111},[105,61281,54381],{"class":115},[105,61283,54384],{"class":1954},[105,61285,116],{"class":115},[105,61287,61288],{"class":220},"'.result-list'",[105,61290,122],{"class":115},[105,61292,61293],{"class":107,"line":16818},[105,61294,61295],{"class":174},"        \u002F\u002F console.log(input)\n",[105,61297,61298],{"class":107,"line":16823},[105,61299,61300],{"class":174},"        \u002F\u002F 2. 监听事件 获得焦点\n",[105,61302,61303,61306,61308,61310,61313,61315,61317],{"class":107,"line":16837},[105,61304,61305],{"class":115},"        input.",[105,61307,57798],{"class":1954},[105,61309,116],{"class":115},[105,61311,61312],{"class":220},"'focus'",[105,61314,12427],{"class":115},[105,61316,54434],{"class":111},[105,61318,54437],{"class":115},[105,61320,61321],{"class":107,"line":16842},[105,61322,61323],{"class":174},"            \u002F\u002F ul显示\n",[105,61325,61326,61329,61331],{"class":107,"line":16847},[105,61327,61328],{"class":115},"            ul.style.display ",[105,61330,161],{"class":111},[105,61332,61333],{"class":220}," 'block'\n",[105,61335,61336],{"class":107,"line":16861},[105,61337,61338],{"class":174},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[105,61340,61341,61344,61346,61348,61351],{"class":107,"line":16873},[105,61342,61343],{"class":115},"            input.classList.",[105,61345,5326],{"class":1954},[105,61347,116],{"class":115},[105,61349,61350],{"class":220},"'search'",[105,61352,122],{"class":115},[105,61354,61355],{"class":107,"line":16878},[105,61356,61357],{"class":115},"        })\n",[105,61359,61360],{"class":107,"line":16891},[105,61361,61362],{"class":174},"        \u002F\u002F 3. 监听事件 失去焦点\n",[105,61364,61365,61367,61369,61371,61374,61376,61378],{"class":107,"line":16896},[105,61366,61305],{"class":115},[105,61368,57798],{"class":1954},[105,61370,116],{"class":115},[105,61372,61373],{"class":220},"'blur'",[105,61375,12427],{"class":115},[105,61377,54434],{"class":111},[105,61379,54437],{"class":115},[105,61381,61382,61384,61386],{"class":107,"line":16901},[105,61383,61328],{"class":115},[105,61385,161],{"class":111},[105,61387,61388],{"class":220}," 'none'\n",[105,61390,61391,61393,61395,61397,61399],{"class":107,"line":16906},[105,61392,61343],{"class":115},[105,61394,56991],{"class":1954},[105,61396,116],{"class":115},[105,61398,61350],{"class":220},[105,61400,122],{"class":115},[105,61402,61403],{"class":107,"line":16919},[105,61404,61357],{"class":115},[105,61406,61407,61409,61411],{"class":107,"line":16924},[105,61408,51761],{"class":115},[105,61410,51798],{"class":51285},[105,61412,51292],{"class":115},[105,61414,61415,61417,61419],{"class":107,"line":32618},[105,61416,51770],{"class":115},[105,61418,51785],{"class":51285},[105,61420,51292],{"class":115},[105,61422,61423],{"class":107,"line":32624},[105,61424,2391],{"emptyLinePlaceholder":32},[105,61426,61427,61429,61431],{"class":107,"line":32630},[105,61428,51770],{"class":115},[105,61430,50620],{"class":51285},[105,61432,51292],{"class":115},[21990,61434,61436],{"id":61435},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61438,61439],{},"评论字数统计案例",[14,61441,61442],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61444,61445],{},"牢记focus伪类选择器",[51329,61447],{"charSet":61448},"UTF-8",[51329,61450],{"name":61451,"content":61452},"viewport","width=device-width, initial-scale=1.0",[51392,61454,61455],{},"Document",[5118,61457,61458],{},"\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",[53806,61460],{"type":5179},[1123,61462,61463,61466],{},[62,61464,61465],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[62,61467,61468],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[96,61470,61472],{"className":50618,"code":61471,"language":50620,"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",[102,61473,61474,61484,61498,61502,61510,61524,61544,61564,61577,61585,61592,61605,61619,61629,61639,61643,61647,61654,61666,61678,61690,61702,61731,61744,61748,61752,61761,61772,61784,61795,61806,61818,61829,61841,61857,61869,61873,61877,61888,61899,61909,61921,61925,61929,61937,61948,61958,61969,61981,61994,62006,62018,62022,62026,62035,62047,62058,62071,62082,62096,62100,62104,62111,62123,62135,62145,62149,62153,62162,62174,62184,62188,62192,62203,62213,62232,62245,62249,62253,62263,62273,62277,62281,62292,62303,62315,62327,62331,62335,62346,62357,62371,62375,62379,62390,62400,62412,62416,62424,62432,62436,62444,62459,62478,62518,62531,62539,62553,62573,62581,62596,62619,62637,62652,62672,62692,62712,62720,62728,62736,62744,62764,62784,62789,62806,62815,62819,62824,62840,62848,62852,62857,62874,62879,62904,62908,62912,62917,62922,62930,62938,62942],{"__ignoreMap":22},[105,61475,61476,61478,61480,61482],{"class":107,"line":108},[105,61477,51282],{"class":115},[105,61479,51286],{"class":51285},[105,61481,51289],{"class":1954},[105,61483,51292],{"class":115},[105,61485,61486,61488,61490,61492,61494,61496],{"class":107,"line":28},[105,61487,1026],{"class":115},[105,61489,50620],{"class":51285},[105,61491,51301],{"class":1954},[105,61493,161],{"class":115},[105,61495,51306],{"class":220},[105,61497,51292],{"class":115},[105,61499,61500],{"class":107,"line":1171},[105,61501,2391],{"emptyLinePlaceholder":32},[105,61503,61504,61506,61508],{"class":107,"line":1186},[105,61505,1026],{"class":115},[105,61507,51319],{"class":51285},[105,61509,51292],{"class":115},[105,61511,61512,61514,61516,61518,61520,61522],{"class":107,"line":1192},[105,61513,52129],{"class":115},[105,61515,51329],{"class":51285},[105,61517,51332],{"class":1954},[105,61519,161],{"class":115},[105,61521,51337],{"class":220},[105,61523,51292],{"class":115},[105,61525,61526,61528,61530,61532,61534,61536,61538,61540,61542],{"class":107,"line":1206},[105,61527,52129],{"class":115},[105,61529,51329],{"class":51285},[105,61531,51348],{"class":1954},[105,61533,161],{"class":115},[105,61535,51353],{"class":220},[105,61537,51356],{"class":1954},[105,61539,161],{"class":115},[105,61541,51361],{"class":220},[105,61543,51292],{"class":115},[105,61545,61546,61548,61550,61552,61554,61556,61558,61560,61562],{"class":107,"line":1212},[105,61547,52129],{"class":115},[105,61549,51329],{"class":51285},[105,61551,14912],{"class":1954},[105,61553,161],{"class":115},[105,61555,51376],{"class":220},[105,61557,51356],{"class":1954},[105,61559,161],{"class":115},[105,61561,51383],{"class":220},[105,61563,51292],{"class":115},[105,61565,61566,61568,61570,61573,61575],{"class":107,"line":1303},[105,61567,52129],{"class":115},[105,61569,51392],{"class":51285},[105,61571,61572],{"class":115},">评论回车发布\u003C\u002F",[105,61574,51392],{"class":51285},[105,61576,51292],{"class":115},[105,61578,61579,61581,61583],{"class":107,"line":1309},[105,61580,52129],{"class":115},[105,61582,5118],{"class":51285},[105,61584,51292],{"class":115},[105,61586,61587,61590],{"class":107,"line":1321},[105,61588,61589],{"class":1954},"    .wrapper",[105,61591,15564],{"class":115},[105,61593,61594,61597,61599,61601,61603],{"class":107,"line":1603},[105,61595,61596],{"class":164},"      min-width",[105,61598,51422],{"class":115},[105,61600,3978],{"class":164},[105,61602,51477],{"class":111},[105,61604,1282],{"class":115},[105,61606,61607,61610,61612,61615,61617],{"class":107,"line":1608},[105,61608,61609],{"class":164},"      max-width",[105,61611,51422],{"class":115},[105,61613,61614],{"class":164},"800",[105,61616,51477],{"class":111},[105,61618,1282],{"class":115},[105,61620,61621,61623,61625,61627],{"class":107,"line":1614},[105,61622,54994],{"class":164},[105,61624,51422],{"class":115},[105,61626,51462],{"class":164},[105,61628,1282],{"class":115},[105,61630,61631,61633,61635,61637],{"class":107,"line":1619},[105,61632,55005],{"class":164},[105,61634,51422],{"class":115},[105,61636,51565],{"class":164},[105,61638,1282],{"class":115},[105,61640,61641],{"class":107,"line":1633},[105,61642,2178],{"class":115},[105,61644,61645],{"class":107,"line":1638},[105,61646,2391],{"emptyLinePlaceholder":32},[105,61648,61649,61652],{"class":107,"line":1644},[105,61650,61651],{"class":1954},"    .avatar",[105,61653,15564],{"class":115},[105,61655,61656,61658,61660,61662,61664],{"class":107,"line":1665},[105,61657,54756],{"class":164},[105,61659,51422],{"class":115},[105,61661,723],{"class":164},[105,61663,51477],{"class":111},[105,61665,1282],{"class":115},[105,61667,61668,61670,61672,61674,61676],{"class":107,"line":1670},[105,61669,54770],{"class":164},[105,61671,51422],{"class":115},[105,61673,723],{"class":164},[105,61675,51477],{"class":111},[105,61677,1282],{"class":115},[105,61679,61680,61682,61684,61686,61688],{"class":107,"line":1684},[105,61681,55119],{"class":164},[105,61683,51422],{"class":115},[105,61685,772],{"class":164},[105,61687,444],{"class":111},[105,61689,1282],{"class":115},[105,61691,61692,61695,61697,61700],{"class":107,"line":1689},[105,61693,61694],{"class":164},"      overflow",[105,61696,51422],{"class":115},[105,61698,61699],{"class":164},"hidden",[105,61701,1282],{"class":115},[105,61703,61704,61707,61709,61712,61714,61717,61719,61722,61724,61726,61729],{"class":107,"line":1718},[105,61705,61706],{"class":164},"      background",[105,61708,51422],{"class":115},[105,61710,61711],{"class":164},"url",[105,61713,116],{"class":115},[105,61715,61716],{"class":5208},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[105,61718,13706],{"class":115},[105,61720,61721],{"class":164},"no-repeat",[105,61723,17136],{"class":164},[105,61725,24963],{"class":115},[105,61727,61728],{"class":164},"cover",[105,61730,1282],{"class":115},[105,61732,61733,61736,61738,61740,61742],{"class":107,"line":1723},[105,61734,61735],{"class":164},"      margin-right",[105,61737,51422],{"class":115},[105,61739,816],{"class":164},[105,61741,51477],{"class":111},[105,61743,1282],{"class":115},[105,61745,61746],{"class":107,"line":1740},[105,61747,2178],{"class":115},[105,61749,61750],{"class":107,"line":1745},[105,61751,2391],{"emptyLinePlaceholder":32},[105,61753,61754,61756,61759],{"class":107,"line":1750},[105,61755,61589],{"class":1954},[105,61757,61758],{"class":51285}," textarea",[105,61760,15564],{"class":115},[105,61762,61763,61766,61768,61770],{"class":107,"line":1755},[105,61764,61765],{"class":164},"      outline",[105,61767,51422],{"class":115},[105,61769,54722],{"class":164},[105,61771,1282],{"class":115},[105,61773,61774,61777,61779,61782],{"class":107,"line":1769},[105,61775,61776],{"class":164},"      border-color",[105,61778,51422],{"class":115},[105,61780,61781],{"class":164},"transparent",[105,61783,1282],{"class":115},[105,61785,61786,61789,61791,61793],{"class":107,"line":1774},[105,61787,61788],{"class":164},"      resize",[105,61790,51422],{"class":115},[105,61792,54722],{"class":164},[105,61794,1282],{"class":115},[105,61796,61797,61799,61801,61804],{"class":107,"line":2568},[105,61798,61706],{"class":164},[105,61800,51422],{"class":115},[105,61802,61803],{"class":164},"#f5f5f5",[105,61805,1282],{"class":115},[105,61807,61808,61810,61812,61814,61816],{"class":107,"line":2582},[105,61809,55119],{"class":164},[105,61811,51422],{"class":115},[105,61813,409],{"class":164},[105,61815,51477],{"class":111},[105,61817,1282],{"class":115},[105,61819,61820,61823,61825,61827],{"class":107,"line":2590},[105,61821,61822],{"class":164},"      flex",[105,61824,51422],{"class":115},[105,61826,333],{"class":164},[105,61828,1282],{"class":115},[105,61830,61831,61833,61835,61837,61839],{"class":107,"line":2595},[105,61832,54680],{"class":164},[105,61834,51422],{"class":115},[105,61836,562],{"class":164},[105,61838,51477],{"class":111},[105,61840,1282],{"class":115},[105,61842,61843,61846,61848,61850,61853,61855],{"class":107,"line":2601},[105,61844,61845],{"class":164},"      transition",[105,61847,51422],{"class":115},[105,61849,28106],{"class":164},[105,61851,61852],{"class":164}," 0.5",[105,61854,811],{"class":111},[105,61856,1282],{"class":115},[105,61858,61859,61861,61863,61865,61867],{"class":107,"line":2607},[105,61860,54770],{"class":164},[105,61862,51422],{"class":115},[105,61864,1067],{"class":164},[105,61866,51477],{"class":111},[105,61868,1282],{"class":115},[105,61870,61871],{"class":107,"line":2612},[105,61872,2178],{"class":115},[105,61874,61875],{"class":107,"line":7940},[105,61876,2391],{"emptyLinePlaceholder":32},[105,61878,61879,61881,61883,61886],{"class":107,"line":7964},[105,61880,61589],{"class":1954},[105,61882,61758],{"class":51285},[105,61884,61885],{"class":1954},":focus",[105,61887,15564],{"class":115},[105,61889,61890,61892,61894,61897],{"class":107,"line":7969},[105,61891,61776],{"class":164},[105,61893,51422],{"class":115},[105,61895,61896],{"class":164},"#e4e4e4",[105,61898,1282],{"class":115},[105,61900,61901,61903,61905,61907],{"class":107,"line":7975},[105,61902,61706],{"class":164},[105,61904,51422],{"class":115},[105,61906,60827],{"class":164},[105,61908,1282],{"class":115},[105,61910,61911,61913,61915,61917,61919],{"class":107,"line":8002},[105,61912,54770],{"class":164},[105,61914,51422],{"class":115},[105,61916,772],{"class":164},[105,61918,51477],{"class":111},[105,61920,1282],{"class":115},[105,61922,61923],{"class":107,"line":8007},[105,61924,2178],{"class":115},[105,61926,61927],{"class":107,"line":8013},[105,61928,2391],{"emptyLinePlaceholder":32},[105,61930,61931,61933,61935],{"class":107,"line":8025},[105,61932,61589],{"class":1954},[105,61934,57452],{"class":51285},[105,61936,15564],{"class":115},[105,61938,61939,61941,61943,61946],{"class":107,"line":8037},[105,61940,61706],{"class":164},[105,61942,51422],{"class":115},[105,61944,61945],{"class":164},"#00aeec",[105,61947,1282],{"class":115},[105,61949,61950,61952,61954,61956],{"class":107,"line":8049},[105,61951,57401],{"class":164},[105,61953,51422],{"class":115},[105,61955,60827],{"class":164},[105,61957,1282],{"class":115},[105,61959,61960,61963,61965,61967],{"class":107,"line":9708},[105,61961,61962],{"class":164},"      border",[105,61964,51422],{"class":115},[105,61966,54722],{"class":164},[105,61968,1282],{"class":115},[105,61970,61971,61973,61975,61977,61979],{"class":107,"line":9733},[105,61972,55119],{"class":164},[105,61974,51422],{"class":115},[105,61976,409],{"class":164},[105,61978,51477],{"class":111},[105,61980,1282],{"class":115},[105,61982,61983,61986,61988,61990,61992],{"class":107,"line":9756},[105,61984,61985],{"class":164},"      margin-left",[105,61987,51422],{"class":115},[105,61989,562],{"class":164},[105,61991,51477],{"class":111},[105,61993,1282],{"class":115},[105,61995,61996,61998,62000,62002,62004],{"class":107,"line":9780},[105,61997,54756],{"class":164},[105,61999,51422],{"class":115},[105,62001,472],{"class":164},[105,62003,51477],{"class":111},[105,62005,1282],{"class":115},[105,62007,62008,62011,62013,62016],{"class":107,"line":9785},[105,62009,62010],{"class":164},"      cursor",[105,62012,51422],{"class":115},[105,62014,62015],{"class":164},"pointer",[105,62017,1282],{"class":115},[105,62019,62020],{"class":107,"line":9790},[105,62021,2178],{"class":115},[105,62023,62024],{"class":107,"line":9795},[105,62025,2391],{"emptyLinePlaceholder":32},[105,62027,62028,62030,62033],{"class":107,"line":9804},[105,62029,61589],{"class":1954},[105,62031,62032],{"class":1954}," .total",[105,62034,15564],{"class":115},[105,62036,62037,62039,62041,62043,62045],{"class":107,"line":9809},[105,62038,61735],{"class":164},[105,62040,51422],{"class":115},[105,62042,728],{"class":164},[105,62044,51477],{"class":111},[105,62046,1282],{"class":115},[105,62048,62049,62051,62053,62056],{"class":107,"line":9815},[105,62050,57401],{"class":164},[105,62052,51422],{"class":115},[105,62054,62055],{"class":164},"#999",[105,62057,1282],{"class":115},[105,62059,62060,62063,62065,62067,62069],{"class":107,"line":9836},[105,62061,62062],{"class":164},"      margin-top",[105,62064,51422],{"class":115},[105,62066,435],{"class":164},[105,62068,51477],{"class":111},[105,62070,1282],{"class":115},[105,62072,62073,62076,62078,62080],{"class":107,"line":9842},[105,62074,62075],{"class":164},"      opacity",[105,62077,51422],{"class":115},[105,62079,307],{"class":164},[105,62081,1282],{"class":115},[105,62083,62084,62086,62088,62090,62092,62094],{"class":107,"line":9856},[105,62085,61845],{"class":164},[105,62087,51422],{"class":115},[105,62089,28106],{"class":164},[105,62091,61852],{"class":164},[105,62093,811],{"class":111},[105,62095,1282],{"class":115},[105,62097,62098],{"class":107,"line":9862},[105,62099,2178],{"class":115},[105,62101,62102],{"class":107,"line":9889},[105,62103,2391],{"emptyLinePlaceholder":32},[105,62105,62106,62109],{"class":107,"line":9898},[105,62107,62108],{"class":1954},"    .list",[105,62110,15564],{"class":115},[105,62112,62113,62115,62117,62119,62121],{"class":107,"line":9904},[105,62114,61596],{"class":164},[105,62116,51422],{"class":115},[105,62118,3978],{"class":164},[105,62120,51477],{"class":111},[105,62122,1282],{"class":115},[105,62124,62125,62127,62129,62131,62133],{"class":107,"line":9912},[105,62126,61609],{"class":164},[105,62128,51422],{"class":115},[105,62130,61614],{"class":164},[105,62132,51477],{"class":111},[105,62134,1282],{"class":115},[105,62136,62137,62139,62141,62143],{"class":107,"line":9917},[105,62138,54994],{"class":164},[105,62140,51422],{"class":115},[105,62142,51462],{"class":164},[105,62144,1282],{"class":115},[105,62146,62147],{"class":107,"line":16596},[105,62148,2178],{"class":115},[105,62150,62151],{"class":107,"line":16602},[105,62152,2391],{"emptyLinePlaceholder":32},[105,62154,62155,62157,62160],{"class":107,"line":16625},[105,62156,62108],{"class":1954},[105,62158,62159],{"class":1954}," .item",[105,62161,15564],{"class":115},[105,62163,62164,62166,62168,62170,62172],{"class":107,"line":16631},[105,62165,54756],{"class":164},[105,62167,51422],{"class":115},[105,62169,427],{"class":164},[105,62171,444],{"class":111},[105,62173,1282],{"class":115},[105,62175,62176,62178,62180,62182],{"class":107,"line":16654},[105,62177,54994],{"class":164},[105,62179,51422],{"class":115},[105,62181,51462],{"class":164},[105,62183,1282],{"class":115},[105,62185,62186],{"class":107,"line":16668},[105,62187,2178],{"class":115},[105,62189,62190],{"class":107,"line":16688},[105,62191,2391],{"emptyLinePlaceholder":32},[105,62193,62194,62196,62198,62201],{"class":107,"line":16694},[105,62195,62108],{"class":1954},[105,62197,62159],{"class":1954},[105,62199,62200],{"class":1954}," .info",[105,62202,15564],{"class":115},[105,62204,62205,62207,62209,62211],{"class":107,"line":16705},[105,62206,61822],{"class":164},[105,62208,51422],{"class":115},[105,62210,333],{"class":164},[105,62212,1282],{"class":115},[105,62214,62215,62218,62220,62222,62224,62227,62230],{"class":107,"line":16728},[105,62216,62217],{"class":164},"      border-bottom",[105,62219,51422],{"class":115},[105,62221,333],{"class":164},[105,62223,51477],{"class":111},[105,62225,62226],{"class":164}," dashed",[105,62228,62229],{"class":164}," #e4e4e4",[105,62231,1282],{"class":115},[105,62233,62234,62237,62239,62241,62243],{"class":107,"line":16750},[105,62235,62236],{"class":164},"      padding-bottom",[105,62238,51422],{"class":115},[105,62240,562],{"class":164},[105,62242,51477],{"class":111},[105,62244,1282],{"class":115},[105,62246,62247],{"class":107,"line":16755},[105,62248,2178],{"class":115},[105,62250,62251],{"class":107,"line":16761},[105,62252,2391],{"emptyLinePlaceholder":32},[105,62254,62255,62257,62259,62261],{"class":107,"line":16775},[105,62256,62108],{"class":1954},[105,62258,62159],{"class":1954},[105,62260,6817],{"class":51285},[105,62262,15564],{"class":115},[105,62264,62265,62267,62269,62271],{"class":107,"line":16788},[105,62266,54691],{"class":164},[105,62268,51422],{"class":115},[105,62270,307],{"class":164},[105,62272,1282],{"class":115},[105,62274,62275],{"class":107,"line":16793},[105,62276,2178],{"class":115},[105,62278,62279],{"class":107,"line":16807},[105,62280,2391],{"emptyLinePlaceholder":32},[105,62282,62283,62285,62287,62290],{"class":107,"line":16812},[105,62284,62108],{"class":1954},[105,62286,62159],{"class":1954},[105,62288,62289],{"class":1954}," .name",[105,62291,15564],{"class":115},[105,62293,62294,62296,62298,62301],{"class":107,"line":16818},[105,62295,57401],{"class":164},[105,62297,51422],{"class":115},[105,62299,62300],{"class":164},"#FB7299",[105,62302,1282],{"class":115},[105,62304,62305,62307,62309,62311,62313],{"class":107,"line":16823},[105,62306,54907],{"class":164},[105,62308,51422],{"class":115},[105,62310,665],{"class":164},[105,62312,51477],{"class":111},[105,62314,1282],{"class":115},[105,62316,62317,62320,62322,62325],{"class":107,"line":16837},[105,62318,62319],{"class":164},"      font-weight",[105,62321,51422],{"class":115},[105,62323,62324],{"class":164},"bold",[105,62326,1282],{"class":115},[105,62328,62329],{"class":107,"line":16842},[105,62330,2178],{"class":115},[105,62332,62333],{"class":107,"line":16847},[105,62334,2391],{"emptyLinePlaceholder":32},[105,62336,62337,62339,62341,62344],{"class":107,"line":16861},[105,62338,62108],{"class":1954},[105,62340,62159],{"class":1954},[105,62342,62343],{"class":1954}," .text",[105,62345,15564],{"class":115},[105,62347,62348,62350,62352,62355],{"class":107,"line":16873},[105,62349,57401],{"class":164},[105,62351,51422],{"class":115},[105,62353,62354],{"class":164},"#333",[105,62356,1282],{"class":115},[105,62358,62359,62361,62363,62365,62367,62369],{"class":107,"line":16878},[105,62360,54680],{"class":164},[105,62362,51422],{"class":115},[105,62364,562],{"class":164},[105,62366,51477],{"class":111},[105,62368,4084],{"class":164},[105,62370,1282],{"class":115},[105,62372,62373],{"class":107,"line":16891},[105,62374,2178],{"class":115},[105,62376,62377],{"class":107,"line":16896},[105,62378,2391],{"emptyLinePlaceholder":32},[105,62380,62381,62383,62385,62388],{"class":107,"line":16901},[105,62382,62108],{"class":1954},[105,62384,62159],{"class":1954},[105,62386,62387],{"class":1954}," .time",[105,62389,15564],{"class":115},[105,62391,62392,62394,62396,62398],{"class":107,"line":16906},[105,62393,57401],{"class":164},[105,62395,51422],{"class":115},[105,62397,62055],{"class":164},[105,62399,1282],{"class":115},[105,62401,62402,62404,62406,62408,62410],{"class":107,"line":16919},[105,62403,54907],{"class":164},[105,62405,51422],{"class":115},[105,62407,614],{"class":164},[105,62409,51477],{"class":111},[105,62411,1282],{"class":115},[105,62413,62414],{"class":107,"line":16924},[105,62415,2178],{"class":115},[105,62417,62418,62420,62422],{"class":107,"line":32618},[105,62419,52402],{"class":115},[105,62421,5118],{"class":51285},[105,62423,51292],{"class":115},[105,62425,62426,62428,62430],{"class":107,"line":32624},[105,62427,51770],{"class":115},[105,62429,51319],{"class":51285},[105,62431,51292],{"class":115},[105,62433,62434],{"class":107,"line":32630},[105,62435,2391],{"emptyLinePlaceholder":32},[105,62437,62438,62440,62442],{"class":107,"line":32636},[105,62439,1026],{"class":115},[105,62441,51785],{"class":51285},[105,62443,51292],{"class":115},[105,62445,62446,62448,62450,62452,62454,62457],{"class":107,"line":32642},[105,62447,52129],{"class":115},[105,62449,51596],{"class":51285},[105,62451,53471],{"class":1954},[105,62453,161],{"class":115},[105,62455,62456],{"class":220},"\"wrapper\"",[105,62458,51292],{"class":115},[105,62460,62461,62463,62465,62467,62469,62472,62474,62476],{"class":107,"line":32653},[105,62462,51326],{"class":115},[105,62464,557],{"class":51285},[105,62466,53471],{"class":1954},[105,62468,161],{"class":115},[105,62470,62471],{"class":220},"\"avatar\"",[105,62473,55299],{"class":115},[105,62475,557],{"class":51285},[105,62477,51292],{"class":115},[105,62479,62480,62482,62484,62486,62488,62491,62493,62495,62498,62500,62502,62504,62507,62509,62512,62514,62516],{"class":107,"line":32659},[105,62481,51326],{"class":115},[105,62483,54273],{"class":51285},[105,62485,14951],{"class":1954},[105,62487,161],{"class":115},[105,62489,62490],{"class":220},"\"tx\"",[105,62492,61005],{"class":1954},[105,62494,161],{"class":115},[105,62496,62497],{"class":220},"\"发一条友善的评论\"",[105,62499,54296],{"class":1954},[105,62501,161],{"class":115},[105,62503,3692],{"class":220},[105,62505,62506],{"class":1954}," maxlength",[105,62508,161],{"class":115},[105,62510,62511],{"class":220},"\"200\"",[105,62513,55299],{"class":115},[105,62515,54273],{"class":51285},[105,62517,51292],{"class":115},[105,62519,62520,62522,62524,62527,62529],{"class":107,"line":32679},[105,62521,51326],{"class":115},[105,62523,53872],{"class":51285},[105,62525,62526],{"class":115},">发布\u003C\u002F",[105,62528,53872],{"class":51285},[105,62530,51292],{"class":115},[105,62532,62533,62535,62537],{"class":107,"line":32685},[105,62534,52402],{"class":115},[105,62536,51596],{"class":51285},[105,62538,51292],{"class":115},[105,62540,62541,62543,62545,62547,62549,62551],{"class":107,"line":32696},[105,62542,52129],{"class":115},[105,62544,51596],{"class":51285},[105,62546,53471],{"class":1954},[105,62548,161],{"class":115},[105,62550,62456],{"class":220},[105,62552,51292],{"class":115},[105,62554,62555,62557,62559,62561,62563,62566,62569,62571],{"class":107,"line":32702},[105,62556,51326],{"class":115},[105,62558,105],{"class":51285},[105,62560,53471],{"class":1954},[105,62562,161],{"class":115},[105,62564,62565],{"class":220},"\"total\"",[105,62567,62568],{"class":115},">0\u002F200字\u003C\u002F",[105,62570,105],{"class":51285},[105,62572,51292],{"class":115},[105,62574,62575,62577,62579],{"class":107,"line":32708},[105,62576,52402],{"class":115},[105,62578,51596],{"class":51285},[105,62580,51292],{"class":115},[105,62582,62583,62585,62587,62589,62591,62594],{"class":107,"line":32714},[105,62584,52129],{"class":115},[105,62586,51596],{"class":51285},[105,62588,53471],{"class":1954},[105,62590,161],{"class":115},[105,62592,62593],{"class":220},"\"list\"",[105,62595,51292],{"class":115},[105,62597,62598,62600,62602,62604,62606,62609,62612,62614,62617],{"class":107,"line":32720},[105,62599,51326],{"class":115},[105,62601,51596],{"class":51285},[105,62603,53471],{"class":1954},[105,62605,161],{"class":115},[105,62607,62608],{"class":220},"\"item\"",[105,62610,62611],{"class":1954}," style",[105,62613,161],{"class":115},[105,62615,62616],{"class":220},"\"display: none;\"",[105,62618,51292],{"class":115},[105,62620,62621,62623,62625,62627,62629,62631,62633,62635],{"class":107,"line":32726},[105,62622,55219],{"class":115},[105,62624,557],{"class":51285},[105,62626,53471],{"class":1954},[105,62628,161],{"class":115},[105,62630,62471],{"class":220},[105,62632,55299],{"class":115},[105,62634,557],{"class":51285},[105,62636,51292],{"class":115},[105,62638,62639,62641,62643,62645,62647,62650],{"class":107,"line":32732},[105,62640,55219],{"class":115},[105,62642,51596],{"class":51285},[105,62644,53471],{"class":1954},[105,62646,161],{"class":115},[105,62648,62649],{"class":220},"\"info\"",[105,62651,51292],{"class":115},[105,62653,62654,62656,62658,62660,62662,62665,62668,62670],{"class":107,"line":32738},[105,62655,55287],{"class":115},[105,62657,14],{"class":51285},[105,62659,53471],{"class":1954},[105,62661,161],{"class":115},[105,62663,62664],{"class":220},"\"name\"",[105,62666,62667],{"class":115},">清风徐来\u003C\u002F",[105,62669,14],{"class":51285},[105,62671,51292],{"class":115},[105,62673,62674,62676,62678,62680,62682,62685,62688,62690],{"class":107,"line":32758},[105,62675,55287],{"class":115},[105,62677,14],{"class":51285},[105,62679,53471],{"class":1954},[105,62681,161],{"class":115},[105,62683,62684],{"class":220},"\"text\"",[105,62686,62687],{"class":115},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[105,62689,14],{"class":51285},[105,62691,51292],{"class":115},[105,62693,62694,62696,62698,62700,62702,62705,62708,62710],{"class":107,"line":32764},[105,62695,55287],{"class":115},[105,62697,14],{"class":51285},[105,62699,53471],{"class":1954},[105,62701,161],{"class":115},[105,62703,62704],{"class":220},"\"time\"",[105,62706,62707],{"class":115},">2022-10-10 20:29:21\u003C\u002F",[105,62709,14],{"class":51285},[105,62711,51292],{"class":115},[105,62713,62714,62716,62718],{"class":107,"line":32780},[105,62715,55392],{"class":115},[105,62717,51596],{"class":51285},[105,62719,51292],{"class":115},[105,62721,62722,62724,62726],{"class":107,"line":32786},[105,62723,51761],{"class":115},[105,62725,51596],{"class":51285},[105,62727,51292],{"class":115},[105,62729,62730,62732,62734],{"class":107,"line":32800},[105,62731,52402],{"class":115},[105,62733,51596],{"class":51285},[105,62735,51292],{"class":115},[105,62737,62738,62740,62742],{"class":107,"line":32806},[105,62739,52129],{"class":115},[105,62741,51798],{"class":51285},[105,62743,51292],{"class":115},[105,62745,62746,62748,62751,62753,62755,62757,62759,62762],{"class":107,"line":32821},[105,62747,11213],{"class":111},[105,62749,62750],{"class":164}," tx",[105,62752,13556],{"class":111},[105,62754,54381],{"class":115},[105,62756,54384],{"class":1954},[105,62758,116],{"class":115},[105,62760,62761],{"class":220},"'#tx'",[105,62763,122],{"class":115},[105,62765,62766,62768,62771,62773,62775,62777,62779,62782],{"class":107,"line":32827},[105,62767,11213],{"class":111},[105,62769,62770],{"class":164}," total",[105,62772,13556],{"class":111},[105,62774,54381],{"class":115},[105,62776,54384],{"class":1954},[105,62778,116],{"class":115},[105,62780,62781],{"class":220},"'.total'",[105,62783,122],{"class":115},[105,62785,62786],{"class":107,"line":32836},[105,62787,62788],{"class":174},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[105,62790,62791,62794,62796,62798,62800,62802,62804],{"class":107,"line":32842},[105,62792,62793],{"class":115},"    tx.",[105,62795,57798],{"class":1954},[105,62797,116],{"class":115},[105,62799,61312],{"class":220},[105,62801,12427],{"class":115},[105,62803,54434],{"class":111},[105,62805,54437],{"class":115},[105,62807,62808,62811,62813],{"class":107,"line":32851},[105,62809,62810],{"class":115},"      total.style.opacity ",[105,62812,161],{"class":111},[105,62814,55684],{"class":164},[105,62816,62817],{"class":107,"line":32857},[105,62818,33446],{"class":115},[105,62820,62821],{"class":107,"line":32863},[105,62822,62823],{"class":174},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[105,62825,62826,62828,62830,62832,62834,62836,62838],{"class":107,"line":32872},[105,62827,62793],{"class":115},[105,62829,57798],{"class":1954},[105,62831,116],{"class":115},[105,62833,61373],{"class":220},[105,62835,12427],{"class":115},[105,62837,54434],{"class":111},[105,62839,54437],{"class":115},[105,62841,62842,62844,62846],{"class":107,"line":32878},[105,62843,62810],{"class":115},[105,62845,161],{"class":111},[105,62847,47318],{"class":164},[105,62849,62850],{"class":107,"line":32889},[105,62851,33446],{"class":115},[105,62853,62854],{"class":107,"line":32895},[105,62855,62856],{"class":174},"    \u002F\u002F 3. 检测用户输入\n",[105,62858,62859,62861,62863,62865,62868,62870,62872],{"class":107,"line":32914},[105,62860,62793],{"class":115},[105,62862,57798],{"class":1954},[105,62864,116],{"class":115},[105,62866,62867],{"class":220},"'input'",[105,62869,12427],{"class":115},[105,62871,54434],{"class":111},[105,62873,54437],{"class":115},[105,62875,62876],{"class":107,"line":32920},[105,62877,62878],{"class":174},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[105,62880,62881,62884,62886,62889,62892,62894,62897,62899,62901],{"class":107,"line":32931},[105,62882,62883],{"class":115},"      total.innerHTML ",[105,62885,161],{"class":111},[105,62887,62888],{"class":220}," `${",[105,62890,62891],{"class":115},"tx",[105,62893,674],{"class":220},[105,62895,62896],{"class":115},"value",[105,62898,674],{"class":220},[105,62900,51953],{"class":164},[105,62902,62903],{"class":220},"}\u002F200字`\n",[105,62905,62906],{"class":107,"line":32937},[105,62907,33446],{"class":115},[105,62909,62910],{"class":107,"line":32957},[105,62911,2391],{"emptyLinePlaceholder":32},[105,62913,62914],{"class":107,"line":32973},[105,62915,62916],{"class":174},"    \u002F\u002F const str = 'andy'\n",[105,62918,62919],{"class":107,"line":32979},[105,62920,62921],{"class":174},"    \u002F\u002F console.log(str.length)\n",[105,62923,62924,62926,62928],{"class":107,"line":32993},[105,62925,52402],{"class":115},[105,62927,51798],{"class":51285},[105,62929,51292],{"class":115},[105,62931,62932,62934,62936],{"class":107,"line":32999},[105,62933,51770],{"class":115},[105,62935,51785],{"class":51285},[105,62937,51292],{"class":115},[105,62939,62940],{"class":107,"line":33005},[105,62941,2391],{"emptyLinePlaceholder":32},[105,62943,62944,62946,62948],{"class":107,"line":33016},[105,62945,51770],{"class":115},[105,62947,50620],{"class":51285},[105,62949,51292],{"class":115},[21990,62951,62953],{"id":62952},"_3254-change事件","3.2.5.4 change事件",[14,62955,62956],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,62958,62959],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,62961,62962],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[96,62964,62966],{"className":50618,"code":62965,"language":50620,"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",[102,62967,62968,62978,62992,62996,63004,63018,63038,63050,63058,63062,63070,63084,63092,63110,63128,63140,63144,63152,63160,63164],{"__ignoreMap":22},[105,62969,62970,62972,62974,62976],{"class":107,"line":108},[105,62971,51282],{"class":115},[105,62973,51286],{"class":51285},[105,62975,51289],{"class":1954},[105,62977,51292],{"class":115},[105,62979,62980,62982,62984,62986,62988,62990],{"class":107,"line":28},[105,62981,1026],{"class":115},[105,62983,50620],{"class":51285},[105,62985,51301],{"class":1954},[105,62987,161],{"class":115},[105,62989,51306],{"class":220},[105,62991,51292],{"class":115},[105,62993,62994],{"class":107,"line":1171},[105,62995,2391],{"emptyLinePlaceholder":32},[105,62997,62998,63000,63002],{"class":107,"line":1186},[105,62999,1026],{"class":115},[105,63001,51319],{"class":51285},[105,63003,51292],{"class":115},[105,63005,63006,63008,63010,63012,63014,63016],{"class":107,"line":1192},[105,63007,52129],{"class":115},[105,63009,51329],{"class":51285},[105,63011,51332],{"class":1954},[105,63013,161],{"class":115},[105,63015,51337],{"class":220},[105,63017,51292],{"class":115},[105,63019,63020,63022,63024,63026,63028,63030,63032,63034,63036],{"class":107,"line":1206},[105,63021,52129],{"class":115},[105,63023,51329],{"class":51285},[105,63025,14912],{"class":1954},[105,63027,161],{"class":115},[105,63029,51376],{"class":220},[105,63031,51356],{"class":1954},[105,63033,161],{"class":115},[105,63035,51383],{"class":220},[105,63037,51292],{"class":115},[105,63039,63040,63042,63044,63046,63048],{"class":107,"line":1212},[105,63041,52129],{"class":115},[105,63043,51392],{"class":51285},[105,63045,51395],{"class":115},[105,63047,51392],{"class":51285},[105,63049,51292],{"class":115},[105,63051,63052,63054,63056],{"class":107,"line":1303},[105,63053,51770],{"class":115},[105,63055,51319],{"class":51285},[105,63057,51292],{"class":115},[105,63059,63060],{"class":107,"line":1309},[105,63061,2391],{"emptyLinePlaceholder":32},[105,63063,63064,63066,63068],{"class":107,"line":1321},[105,63065,1026],{"class":115},[105,63067,51785],{"class":51285},[105,63069,51292],{"class":115},[105,63071,63072,63074,63076,63078,63080,63082],{"class":107,"line":1603},[105,63073,52129],{"class":115},[105,63075,53806],{"class":51285},[105,63077,53809],{"class":1954},[105,63079,161],{"class":115},[105,63081,62684],{"class":220},[105,63083,51292],{"class":115},[105,63085,63086,63088,63090],{"class":107,"line":1608},[105,63087,52129],{"class":115},[105,63089,51798],{"class":51285},[105,63091,51292],{"class":115},[105,63093,63094,63096,63098,63100,63102,63104,63106,63108],{"class":107,"line":1614},[105,63095,11213],{"class":111},[105,63097,60590],{"class":164},[105,63099,13556],{"class":111},[105,63101,54381],{"class":115},[105,63103,54384],{"class":1954},[105,63105,116],{"class":115},[105,63107,62867],{"class":220},[105,63109,122],{"class":115},[105,63111,63112,63115,63117,63119,63122,63124,63126],{"class":107,"line":1619},[105,63113,63114],{"class":115},"    input.",[105,63116,57798],{"class":1954},[105,63118,116],{"class":115},[105,63120,63121],{"class":220},"'change'",[105,63123,12427],{"class":115},[105,63125,54434],{"class":111},[105,63127,54437],{"class":115},[105,63129,63130,63132,63134,63136,63138],{"class":107,"line":1633},[105,63131,58229],{"class":115},[105,63133,58232],{"class":1954},[105,63135,116],{"class":115},[105,63137,709],{"class":164},[105,63139,122],{"class":115},[105,63141,63142],{"class":107,"line":1638},[105,63143,33446],{"class":115},[105,63145,63146,63148,63150],{"class":107,"line":1644},[105,63147,52402],{"class":115},[105,63149,51798],{"class":51285},[105,63151,51292],{"class":115},[105,63153,63154,63156,63158],{"class":107,"line":1665},[105,63155,51770],{"class":115},[105,63157,51785],{"class":51285},[105,63159,51292],{"class":115},[105,63161,63162],{"class":107,"line":1670},[105,63163,2391],{"emptyLinePlaceholder":32},[105,63165,63166,63168,63170],{"class":107,"line":1684},[105,63167,51770],{"class":115},[105,63169,50620],{"class":51285},[105,63171,51292],{"class":115},[14,63173,63174],{},"总结：内容发生改变才回去触发",[76,63176,63178],{"id":63177},"_326-事件对象","3.2.6 事件对象",[21990,63180,63182],{"id":63181},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63184,63185],{},[20,63186],{"alt":22,"src":63187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63189,63190],{},[20,63191],{"alt":22,"src":63192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63194,63195],{},"点击一次，就输出了事件对象，它是个对象",[14,63197,63198],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63200,63201],{},[20,63202],{"alt":22,"src":63203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21990,63205,63207],{"id":63206},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63209,63210],{},[20,63211],{"alt":22,"src":63212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63214,63215],{},"实现按特殊字符才是实现打印输出效果：",[96,63217,63219],{"className":53052,"code":63218,"language":53054,"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",[102,63220,63221,63229,63234,63248,63256,63261,63266,63271,63276,63281,63286,63291,63296,63301,63305,63309,63317],{"__ignoreMap":22},[105,63222,63223,63225,63227],{"class":107,"line":108},[105,63224,1026],{"class":115},[105,63226,51785],{"class":51285},[105,63228,51292],{"class":115},[105,63230,63231],{"class":107,"line":28},[105,63232,63233],{"class":174},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[105,63235,63236,63238,63240,63242,63244,63246],{"class":107,"line":1171},[105,63237,52129],{"class":115},[105,63239,53806],{"class":51285},[105,63241,53809],{"class":1954},[105,63243,161],{"class":115},[105,63245,62684],{"class":220},[105,63247,51292],{"class":115},[105,63249,63250,63252,63254],{"class":107,"line":1186},[105,63251,52129],{"class":115},[105,63253,51798],{"class":51285},[105,63255,51292],{"class":115},[105,63257,63258],{"class":107,"line":1192},[105,63259,63260],{"class":115},"    \u002F\u002F const btn = document.querySelector('button')\n",[105,63262,63263],{"class":107,"line":1206},[105,63264,63265],{"class":115},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[105,63267,63268],{"class":107,"line":1212},[105,63269,63270],{"class":115},"    \u002F\u002F   console.log(e);\n",[105,63272,63273],{"class":107,"line":1303},[105,63274,63275],{"class":115},"    \u002F\u002F })\n",[105,63277,63278],{"class":107,"line":1309},[105,63279,63280],{"class":115},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[105,63282,63283],{"class":107,"line":1321},[105,63284,63285],{"class":115},"    const input = document.querySelector('input')\n",[105,63287,63288],{"class":107,"line":1603},[105,63289,63290],{"class":115},"    input.addEventListener('keyup', function (e) {\n",[105,63292,63293],{"class":107,"line":1608},[105,63294,63295],{"class":115},"      if (e.key === 'Enter') {\n",[105,63297,63298],{"class":107,"line":1614},[105,63299,63300],{"class":115},"        console.log('我按下了回车键')\n",[105,63302,63303],{"class":107,"line":1619},[105,63304,52383],{"class":115},[105,63306,63307],{"class":107,"line":1633},[105,63308,33446],{"class":115},[105,63310,63311,63313,63315],{"class":107,"line":1638},[105,63312,52402],{"class":115},[105,63314,51798],{"class":51285},[105,63316,51292],{"class":115},[105,63318,63319,63321,63323],{"class":107,"line":1644},[105,63320,51770],{"class":115},[105,63322,51785],{"class":51285},[105,63324,51292],{"class":115},[21990,63326,63328],{"id":63327},"_3263-trim方法","3.2.6.3 trim方法",[14,63330,63331],{},[20,63332],{"alt":22,"src":63333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63335,63336],{},[20,63337],{"alt":22,"src":63338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63340,63341],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63343,63344],{},"str.trim()",[76,63346,63348],{"id":63347},"_327-环境对象","3.2.7 环境对象",[14,63350,63351],{},[20,63352],{"alt":22,"src":63353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63355,63356],{},[20,63357],{"alt":22,"src":63358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63360,63361],{},[20,63362],{"alt":22,"src":63363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63365,63366],{},"实际函数调用是window.fn()",[14,63368,63369],{},"普通函数里面this指向的是window",[1123,63371,63372,63375,63378],{},[62,63373,63374],{},"在普通函数下，this指向的是window",[62,63376,63377],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[62,63379,63380],{},"箭头函数没有this",[14,63382,63383],{},"粗略记法就是：谁调用，this就指向谁",[14,63385,63386],{},[20,63387],{"alt":22,"src":63388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63390,63391],{},[20,63392],{"alt":22,"src":63393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63395,63396],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63398,63399],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[96,63401,63403],{"className":53052,"code":63402,"language":53054,"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",[102,63404,63405,63413,63425,63433,63438,63443,63448,63453,63457,63465],{"__ignoreMap":22},[105,63406,63407,63409,63411],{"class":107,"line":108},[105,63408,1026],{"class":115},[105,63410,51785],{"class":51285},[105,63412,51292],{"class":115},[105,63414,63415,63417,63419,63421,63423],{"class":107,"line":28},[105,63416,52129],{"class":115},[105,63418,53872],{"class":51285},[105,63420,53878],{"class":115},[105,63422,53872],{"class":51285},[105,63424,51292],{"class":115},[105,63426,63427,63429,63431],{"class":107,"line":1171},[105,63428,52129],{"class":115},[105,63430,51798],{"class":51285},[105,63432,51292],{"class":115},[105,63434,63435],{"class":107,"line":1186},[105,63436,63437],{"class":115},"    const button = document.querySelector('button')\n",[105,63439,63440],{"class":107,"line":1192},[105,63441,63442],{"class":115},"    button.addEventListener('click', function () {\n",[105,63444,63445],{"class":107,"line":1206},[105,63446,63447],{"class":115},"      \u002F\u002F console.log(this);\n",[105,63449,63450],{"class":107,"line":1212},[105,63451,63452],{"class":115},"      this.style.color = 'pink'\n",[105,63454,63455],{"class":107,"line":1303},[105,63456,33446],{"class":115},[105,63458,63459,63461,63463],{"class":107,"line":1309},[105,63460,52402],{"class":115},[105,63462,51798],{"class":51285},[105,63464,51292],{"class":115},[105,63466,63467,63469,63471],{"class":107,"line":1321},[105,63468,51770],{"class":115},[105,63470,51785],{"class":51285},[105,63472,51292],{"class":115},[76,63474,63476],{"id":63475},"_328-回调函数","3.2.8 回调函数",[14,63478,63479],{},[20,63480],{"alt":22,"src":63481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63483,63484],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63486,11324],{},[1123,63488,63489,63492,63495],{},[62,63490,63491],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[62,63493,63494],{},"回调函数本质还是函数，只不过把它当成参数使用",[62,63496,63497],{},"使用匿名函数做为回调函数比较常见",[76,63499,63501],{"id":63500},"_329-tab栏切换","3.2.9 tab栏切换",[14,63503,63504],{},[20,63505],{"alt":22,"src":63506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[96,63508,63510],{"className":50618,"code":63509,"language":50620,"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",[102,63511,63512,63522,63536,63540,63548,63562,63582,63602,63615,63623,63629,63639,63649,63653,63657,63664,63677,63690,63702,63718,63722,63726,63733,63745,63757,63769,63779,63789,63793,63797,63806,63818,63829,63841,63845,63849,63857,63867,63877,63887,63891,63895,63905,63919,63931,63935,63939,63951,63962,63979,63989,63993,63997,64012,64023,64033,64037,64041,64048,64063,64067,64071,64079,64089,64093,64097,64106,64116,64120,64128,64136,64140,64148,64163,64178,64191,64199,64233,64260,64287,64314,64341,64349,64357,64372,64409,64444,64479,64514,64549,64557,64565,64573,64578,64583,64603,64608,64637,64642,64647,64665,64670,64675,64680,64702,64707,64723,64727,64732,64737,64758,64763,64792,64796,64801,64805,64813,64821,64825],{"__ignoreMap":22},[105,63513,63514,63516,63518,63520],{"class":107,"line":108},[105,63515,51282],{"class":115},[105,63517,51286],{"class":51285},[105,63519,51289],{"class":1954},[105,63521,51292],{"class":115},[105,63523,63524,63526,63528,63530,63532,63534],{"class":107,"line":28},[105,63525,1026],{"class":115},[105,63527,50620],{"class":51285},[105,63529,51301],{"class":1954},[105,63531,161],{"class":115},[105,63533,51306],{"class":220},[105,63535,51292],{"class":115},[105,63537,63538],{"class":107,"line":1171},[105,63539,2391],{"emptyLinePlaceholder":32},[105,63541,63542,63544,63546],{"class":107,"line":1186},[105,63543,1026],{"class":115},[105,63545,51319],{"class":51285},[105,63547,51292],{"class":115},[105,63549,63550,63552,63554,63556,63558,63560],{"class":107,"line":1192},[105,63551,52129],{"class":115},[105,63553,51329],{"class":51285},[105,63555,51332],{"class":1954},[105,63557,161],{"class":115},[105,63559,51337],{"class":220},[105,63561,59112],{"class":115},[105,63563,63564,63566,63568,63570,63572,63574,63576,63578,63580],{"class":107,"line":1206},[105,63565,52129],{"class":115},[105,63567,51329],{"class":51285},[105,63569,51348],{"class":1954},[105,63571,161],{"class":115},[105,63573,51353],{"class":220},[105,63575,51356],{"class":1954},[105,63577,161],{"class":115},[105,63579,51361],{"class":220},[105,63581,59112],{"class":115},[105,63583,63584,63586,63588,63590,63592,63594,63596,63598,63600],{"class":107,"line":1212},[105,63585,52129],{"class":115},[105,63587,51329],{"class":51285},[105,63589,14912],{"class":1954},[105,63591,161],{"class":115},[105,63593,51376],{"class":220},[105,63595,51356],{"class":1954},[105,63597,161],{"class":115},[105,63599,51383],{"class":220},[105,63601,59112],{"class":115},[105,63603,63604,63606,63608,63611,63613],{"class":107,"line":1303},[105,63605,52129],{"class":115},[105,63607,51392],{"class":51285},[105,63609,63610],{"class":115},">tab栏切换\u003C\u002F",[105,63612,51392],{"class":51285},[105,63614,51292],{"class":115},[105,63616,63617,63619,63621],{"class":107,"line":1309},[105,63618,52129],{"class":115},[105,63620,5118],{"class":51285},[105,63622,51292],{"class":115},[105,63624,63625,63627],{"class":107,"line":1321},[105,63626,6395],{"class":51285},[105,63628,15564],{"class":115},[105,63630,63631,63633,63635,63637],{"class":107,"line":1603},[105,63632,54691],{"class":164},[105,63634,51422],{"class":115},[105,63636,307],{"class":164},[105,63638,1282],{"class":115},[105,63640,63641,63643,63645,63647],{"class":107,"line":1608},[105,63642,54680],{"class":164},[105,63644,51422],{"class":115},[105,63646,307],{"class":164},[105,63648,1282],{"class":115},[105,63650,63651],{"class":107,"line":1614},[105,63652,2178],{"class":115},[105,63654,63655],{"class":107,"line":1619},[105,63656,2391],{"emptyLinePlaceholder":32},[105,63658,63659,63662],{"class":107,"line":1633},[105,63660,63661],{"class":1954},"    .tab",[105,63663,15564],{"class":115},[105,63665,63666,63668,63670,63673,63675],{"class":107,"line":1638},[105,63667,54756],{"class":164},[105,63669,51422],{"class":115},[105,63671,63672],{"class":164},"590",[105,63674,51477],{"class":111},[105,63676,1282],{"class":115},[105,63678,63679,63681,63683,63686,63688],{"class":107,"line":1644},[105,63680,54770],{"class":164},[105,63682,51422],{"class":115},[105,63684,63685],{"class":164},"340",[105,63687,51477],{"class":111},[105,63689,1282],{"class":115},[105,63691,63692,63694,63696,63698,63700],{"class":107,"line":1665},[105,63693,54691],{"class":164},[105,63695,51422],{"class":115},[105,63697,816],{"class":164},[105,63699,51477],{"class":111},[105,63701,1282],{"class":115},[105,63703,63704,63706,63708,63710,63712,63714,63716],{"class":107,"line":1670},[105,63705,61962],{"class":164},[105,63707,51422],{"class":115},[105,63709,333],{"class":164},[105,63711,51477],{"class":111},[105,63713,51506],{"class":164},[105,63715,62229],{"class":164},[105,63717,1282],{"class":115},[105,63719,63720],{"class":107,"line":1684},[105,63721,2178],{"class":115},[105,63723,63724],{"class":107,"line":1689},[105,63725,2391],{"emptyLinePlaceholder":32},[105,63727,63728,63731],{"class":107,"line":1718},[105,63729,63730],{"class":1954},"    .tab-nav",[105,63732,15564],{"class":115},[105,63734,63735,63737,63739,63741,63743],{"class":107,"line":1723},[105,63736,54756],{"class":164},[105,63738,51422],{"class":115},[105,63740,427],{"class":164},[105,63742,444],{"class":111},[105,63744,1282],{"class":115},[105,63746,63747,63749,63751,63753,63755],{"class":107,"line":1740},[105,63748,54770],{"class":164},[105,63750,51422],{"class":115},[105,63752,1023],{"class":164},[105,63754,51477],{"class":111},[105,63756,1282],{"class":115},[105,63758,63759,63761,63763,63765,63767],{"class":107,"line":1745},[105,63760,57344],{"class":164},[105,63762,51422],{"class":115},[105,63764,1023],{"class":164},[105,63766,51477],{"class":111},[105,63768,1282],{"class":115},[105,63770,63771,63773,63775,63777],{"class":107,"line":1750},[105,63772,54994],{"class":164},[105,63774,51422],{"class":115},[105,63776,51462],{"class":164},[105,63778,1282],{"class":115},[105,63780,63781,63783,63785,63787],{"class":107,"line":1755},[105,63782,55005],{"class":164},[105,63784,51422],{"class":115},[105,63786,51653],{"class":164},[105,63788,1282],{"class":115},[105,63790,63791],{"class":107,"line":1769},[105,63792,2178],{"class":115},[105,63794,63795],{"class":107,"line":1774},[105,63796,2391],{"emptyLinePlaceholder":32},[105,63798,63799,63801,63804],{"class":107,"line":2568},[105,63800,63730],{"class":1954},[105,63802,63803],{"class":51285}," h3",[105,63805,15564],{"class":115},[105,63807,63808,63810,63812,63814,63816],{"class":107,"line":2582},[105,63809,54907],{"class":164},[105,63811,51422],{"class":115},[105,63813,916],{"class":164},[105,63815,51477],{"class":111},[105,63817,1282],{"class":115},[105,63819,63820,63822,63824,63827],{"class":107,"line":2590},[105,63821,62319],{"class":164},[105,63823,51422],{"class":115},[105,63825,63826],{"class":164},"normal",[105,63828,1282],{"class":115},[105,63830,63831,63833,63835,63837,63839],{"class":107,"line":2595},[105,63832,61985],{"class":164},[105,63834,51422],{"class":115},[105,63836,816],{"class":164},[105,63838,51477],{"class":111},[105,63840,1282],{"class":115},[105,63842,63843],{"class":107,"line":2601},[105,63844,2178],{"class":115},[105,63846,63847],{"class":107,"line":2607},[105,63848,2391],{"emptyLinePlaceholder":32},[105,63850,63851,63853,63855],{"class":107,"line":2612},[105,63852,63730],{"class":1954},[105,63854,61277],{"class":51285},[105,63856,15564],{"class":115},[105,63858,63859,63861,63863,63865],{"class":107,"line":7940},[105,63860,54717],{"class":164},[105,63862,51422],{"class":115},[105,63864,54722],{"class":164},[105,63866,1282],{"class":115},[105,63868,63869,63871,63873,63875],{"class":107,"line":7964},[105,63870,54994],{"class":164},[105,63872,51422],{"class":115},[105,63874,51462],{"class":164},[105,63876,1282],{"class":115},[105,63878,63879,63881,63883,63885],{"class":107,"line":7969},[105,63880,55005],{"class":164},[105,63882,51422],{"class":115},[105,63884,51565],{"class":164},[105,63886,1282],{"class":115},[105,63888,63889],{"class":107,"line":7975},[105,63890,2178],{"class":115},[105,63892,63893],{"class":107,"line":8002},[105,63894,2391],{"emptyLinePlaceholder":32},[105,63896,63897,63899,63901,63903],{"class":107,"line":8007},[105,63898,63730],{"class":1954},[105,63900,61277],{"class":51285},[105,63902,55060],{"class":51285},[105,63904,15564],{"class":115},[105,63906,63907,63909,63911,63913,63915,63917],{"class":107,"line":8013},[105,63908,54691],{"class":164},[105,63910,51422],{"class":115},[105,63912,307],{"class":164},[105,63914,8942],{"class":164},[105,63916,51477],{"class":111},[105,63918,1282],{"class":115},[105,63920,63921,63923,63925,63927,63929],{"class":107,"line":8025},[105,63922,54907],{"class":164},[105,63924,51422],{"class":115},[105,63926,665],{"class":164},[105,63928,51477],{"class":111},[105,63930,1282],{"class":115},[105,63932,63933],{"class":107,"line":8037},[105,63934,2178],{"class":115},[105,63936,63937],{"class":107,"line":8049},[105,63938,2391],{"emptyLinePlaceholder":32},[105,63940,63941,63943,63945,63947,63949],{"class":107,"line":9708},[105,63942,63730],{"class":1954},[105,63944,61277],{"class":51285},[105,63946,55060],{"class":51285},[105,63948,1390],{"class":51285},[105,63950,15564],{"class":115},[105,63952,63953,63956,63958,63960],{"class":107,"line":9733},[105,63954,63955],{"class":164},"      text-decoration",[105,63957,51422],{"class":115},[105,63959,54722],{"class":164},[105,63961,1282],{"class":115},[105,63963,63964,63966,63968,63970,63972,63974,63977],{"class":107,"line":9756},[105,63965,62217],{"class":164},[105,63967,51422],{"class":115},[105,63969,193],{"class":164},[105,63971,51477],{"class":111},[105,63973,51506],{"class":164},[105,63975,63976],{"class":164}," transparent",[105,63978,1282],{"class":115},[105,63980,63981,63983,63985,63987],{"class":107,"line":9780},[105,63982,57401],{"class":164},[105,63984,51422],{"class":115},[105,63986,62354],{"class":164},[105,63988,1282],{"class":115},[105,63990,63991],{"class":107,"line":9785},[105,63992,2178],{"class":115},[105,63994,63995],{"class":107,"line":9790},[105,63996,2391],{"emptyLinePlaceholder":32},[105,63998,63999,64001,64003,64005,64007,64010],{"class":107,"line":9795},[105,64000,63730],{"class":1954},[105,64002,61277],{"class":51285},[105,64004,55060],{"class":51285},[105,64006,1390],{"class":51285},[105,64008,64009],{"class":1954},".active",[105,64011,15564],{"class":115},[105,64013,64014,64016,64018,64021],{"class":107,"line":9804},[105,64015,61776],{"class":164},[105,64017,51422],{"class":115},[105,64019,64020],{"class":164},"#e1251b",[105,64022,1282],{"class":115},[105,64024,64025,64027,64029,64031],{"class":107,"line":9809},[105,64026,57401],{"class":164},[105,64028,51422],{"class":115},[105,64030,64020],{"class":164},[105,64032,1282],{"class":115},[105,64034,64035],{"class":107,"line":9815},[105,64036,2178],{"class":115},[105,64038,64039],{"class":107,"line":9836},[105,64040,2391],{"emptyLinePlaceholder":32},[105,64042,64043,64046],{"class":107,"line":9842},[105,64044,64045],{"class":1954},"    .tab-content",[105,64047,15564],{"class":115},[105,64049,64050,64052,64054,64056,64059,64061],{"class":107,"line":9856},[105,64051,54680],{"class":164},[105,64053,51422],{"class":115},[105,64055,307],{"class":164},[105,64057,64058],{"class":164}," 16",[105,64060,51477],{"class":111},[105,64062,1282],{"class":115},[105,64064,64065],{"class":107,"line":9862},[105,64066,2178],{"class":115},[105,64068,64069],{"class":107,"line":9889},[105,64070,2391],{"emptyLinePlaceholder":32},[105,64072,64073,64075,64077],{"class":107,"line":9898},[105,64074,64045],{"class":1954},[105,64076,62159],{"class":1954},[105,64078,15564],{"class":115},[105,64080,64081,64083,64085,64087],{"class":107,"line":9904},[105,64082,54994],{"class":164},[105,64084,51422],{"class":115},[105,64086,54722],{"class":164},[105,64088,1282],{"class":115},[105,64090,64091],{"class":107,"line":9912},[105,64092,2178],{"class":115},[105,64094,64095],{"class":107,"line":9917},[105,64096,2391],{"emptyLinePlaceholder":32},[105,64098,64099,64101,64104],{"class":107,"line":16596},[105,64100,64045],{"class":1954},[105,64102,64103],{"class":1954}," .item.active",[105,64105,15564],{"class":115},[105,64107,64108,64110,64112,64114],{"class":107,"line":16602},[105,64109,54994],{"class":164},[105,64111,51422],{"class":115},[105,64113,60854],{"class":164},[105,64115,1282],{"class":115},[105,64117,64118],{"class":107,"line":16625},[105,64119,2178],{"class":115},[105,64121,64122,64124,64126],{"class":107,"line":16631},[105,64123,52402],{"class":115},[105,64125,5118],{"class":51285},[105,64127,51292],{"class":115},[105,64129,64130,64132,64134],{"class":107,"line":16654},[105,64131,51770],{"class":115},[105,64133,51319],{"class":51285},[105,64135,51292],{"class":115},[105,64137,64138],{"class":107,"line":16668},[105,64139,2391],{"emptyLinePlaceholder":32},[105,64141,64142,64144,64146],{"class":107,"line":16688},[105,64143,1026],{"class":115},[105,64145,51785],{"class":51285},[105,64147,51292],{"class":115},[105,64149,64150,64152,64154,64156,64158,64161],{"class":107,"line":16694},[105,64151,52129],{"class":115},[105,64153,51596],{"class":51285},[105,64155,53471],{"class":1954},[105,64157,161],{"class":115},[105,64159,64160],{"class":220},"\"tab\"",[105,64162,51292],{"class":115},[105,64164,64165,64167,64169,64171,64173,64176],{"class":107,"line":16705},[105,64166,51326],{"class":115},[105,64168,51596],{"class":51285},[105,64170,53471],{"class":1954},[105,64172,161],{"class":115},[105,64174,64175],{"class":220},"\"tab-nav\"",[105,64177,51292],{"class":115},[105,64179,64180,64182,64184,64187,64189],{"class":107,"line":16728},[105,64181,55219],{"class":115},[105,64183,76],{"class":51285},[105,64185,64186],{"class":115},">每日特价\u003C\u002F",[105,64188,76],{"class":51285},[105,64190,51292],{"class":115},[105,64192,64193,64195,64197],{"class":107,"line":16750},[105,64194,55219],{"class":115},[105,64196,1123],{"class":51285},[105,64198,51292],{"class":115},[105,64200,64201,64203,64205,64207,64209,64211,64213,64215,64217,64219,64222,64225,64227,64229,64231],{"class":107,"line":16755},[105,64202,55287],{"class":115},[105,64204,62],{"class":51285},[105,64206,61037],{"class":115},[105,64208,354],{"class":51285},[105,64210,53471],{"class":1954},[105,64212,161],{"class":115},[105,64214,59691],{"class":220},[105,64216,61042],{"class":1954},[105,64218,161],{"class":115},[105,64220,64221],{"class":220},"\"javascript:;\"",[105,64223,64224],{"class":115},">精选\u003C\u002F",[105,64226,354],{"class":51285},[105,64228,55299],{"class":115},[105,64230,62],{"class":51285},[105,64232,51292],{"class":115},[105,64234,64235,64237,64239,64241,64243,64245,64247,64249,64252,64254,64256,64258],{"class":107,"line":16761},[105,64236,55287],{"class":115},[105,64238,62],{"class":51285},[105,64240,61037],{"class":115},[105,64242,354],{"class":51285},[105,64244,61042],{"class":1954},[105,64246,161],{"class":115},[105,64248,64221],{"class":220},[105,64250,64251],{"class":115},">美食\u003C\u002F",[105,64253,354],{"class":51285},[105,64255,55299],{"class":115},[105,64257,62],{"class":51285},[105,64259,51292],{"class":115},[105,64261,64262,64264,64266,64268,64270,64272,64274,64276,64279,64281,64283,64285],{"class":107,"line":16775},[105,64263,55287],{"class":115},[105,64265,62],{"class":51285},[105,64267,61037],{"class":115},[105,64269,354],{"class":51285},[105,64271,61042],{"class":1954},[105,64273,161],{"class":115},[105,64275,64221],{"class":220},[105,64277,64278],{"class":115},">百货\u003C\u002F",[105,64280,354],{"class":51285},[105,64282,55299],{"class":115},[105,64284,62],{"class":51285},[105,64286,51292],{"class":115},[105,64288,64289,64291,64293,64295,64297,64299,64301,64303,64306,64308,64310,64312],{"class":107,"line":16788},[105,64290,55287],{"class":115},[105,64292,62],{"class":51285},[105,64294,61037],{"class":115},[105,64296,354],{"class":51285},[105,64298,61042],{"class":1954},[105,64300,161],{"class":115},[105,64302,64221],{"class":220},[105,64304,64305],{"class":115},">个护\u003C\u002F",[105,64307,354],{"class":51285},[105,64309,55299],{"class":115},[105,64311,62],{"class":51285},[105,64313,51292],{"class":115},[105,64315,64316,64318,64320,64322,64324,64326,64328,64330,64333,64335,64337,64339],{"class":107,"line":16793},[105,64317,55287],{"class":115},[105,64319,62],{"class":51285},[105,64321,61037],{"class":115},[105,64323,354],{"class":51285},[105,64325,61042],{"class":1954},[105,64327,161],{"class":115},[105,64329,64221],{"class":220},[105,64331,64332],{"class":115},">预告\u003C\u002F",[105,64334,354],{"class":51285},[105,64336,55299],{"class":115},[105,64338,62],{"class":51285},[105,64340,51292],{"class":115},[105,64342,64343,64345,64347],{"class":107,"line":16807},[105,64344,55392],{"class":115},[105,64346,1123],{"class":51285},[105,64348,51292],{"class":115},[105,64350,64351,64353,64355],{"class":107,"line":16812},[105,64352,51761],{"class":115},[105,64354,51596],{"class":51285},[105,64356,51292],{"class":115},[105,64358,64359,64361,64363,64365,64367,64370],{"class":107,"line":16818},[105,64360,51326],{"class":115},[105,64362,51596],{"class":51285},[105,64364,53471],{"class":1954},[105,64366,161],{"class":115},[105,64368,64369],{"class":220},"\"tab-content\"",[105,64371,51292],{"class":115},[105,64373,64374,64376,64378,64380,64382,64385,64387,64389,64391,64393,64396,64398,64400,64402,64405,64407],{"class":107,"line":16823},[105,64375,55219],{"class":115},[105,64377,51596],{"class":51285},[105,64379,53471],{"class":1954},[105,64381,161],{"class":115},[105,64383,64384],{"class":220},"\"item active\"",[105,64386,61037],{"class":115},[105,64388,20],{"class":51285},[105,64390,55224],{"class":1954},[105,64392,161],{"class":115},[105,64394,64395],{"class":220},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[105,64397,55232],{"class":1954},[105,64399,161],{"class":115},[105,64401,7644],{"class":220},[105,64403,64404],{"class":115}," \u002F>\u003C\u002F",[105,64406,51596],{"class":51285},[105,64408,51292],{"class":115},[105,64410,64411,64413,64415,64417,64419,64421,64423,64425,64427,64429,64432,64434,64436,64438,64440,64442],{"class":107,"line":16837},[105,64412,55219],{"class":115},[105,64414,51596],{"class":51285},[105,64416,53471],{"class":1954},[105,64418,161],{"class":115},[105,64420,62608],{"class":220},[105,64422,61037],{"class":115},[105,64424,20],{"class":51285},[105,64426,55224],{"class":1954},[105,64428,161],{"class":115},[105,64430,64431],{"class":220},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[105,64433,55232],{"class":1954},[105,64435,161],{"class":115},[105,64437,7644],{"class":220},[105,64439,64404],{"class":115},[105,64441,51596],{"class":51285},[105,64443,51292],{"class":115},[105,64445,64446,64448,64450,64452,64454,64456,64458,64460,64462,64464,64467,64469,64471,64473,64475,64477],{"class":107,"line":16842},[105,64447,55219],{"class":115},[105,64449,51596],{"class":51285},[105,64451,53471],{"class":1954},[105,64453,161],{"class":115},[105,64455,62608],{"class":220},[105,64457,61037],{"class":115},[105,64459,20],{"class":51285},[105,64461,55224],{"class":1954},[105,64463,161],{"class":115},[105,64465,64466],{"class":220},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[105,64468,55232],{"class":1954},[105,64470,161],{"class":115},[105,64472,7644],{"class":220},[105,64474,64404],{"class":115},[105,64476,51596],{"class":51285},[105,64478,51292],{"class":115},[105,64480,64481,64483,64485,64487,64489,64491,64493,64495,64497,64499,64502,64504,64506,64508,64510,64512],{"class":107,"line":16847},[105,64482,55219],{"class":115},[105,64484,51596],{"class":51285},[105,64486,53471],{"class":1954},[105,64488,161],{"class":115},[105,64490,62608],{"class":220},[105,64492,61037],{"class":115},[105,64494,20],{"class":51285},[105,64496,55224],{"class":1954},[105,64498,161],{"class":115},[105,64500,64501],{"class":220},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[105,64503,55232],{"class":1954},[105,64505,161],{"class":115},[105,64507,7644],{"class":220},[105,64509,64404],{"class":115},[105,64511,51596],{"class":51285},[105,64513,51292],{"class":115},[105,64515,64516,64518,64520,64522,64524,64526,64528,64530,64532,64534,64537,64539,64541,64543,64545,64547],{"class":107,"line":16861},[105,64517,55219],{"class":115},[105,64519,51596],{"class":51285},[105,64521,53471],{"class":1954},[105,64523,161],{"class":115},[105,64525,62608],{"class":220},[105,64527,61037],{"class":115},[105,64529,20],{"class":51285},[105,64531,55224],{"class":1954},[105,64533,161],{"class":115},[105,64535,64536],{"class":220},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[105,64538,55232],{"class":1954},[105,64540,161],{"class":115},[105,64542,7644],{"class":220},[105,64544,64404],{"class":115},[105,64546,51596],{"class":51285},[105,64548,51292],{"class":115},[105,64550,64551,64553,64555],{"class":107,"line":16873},[105,64552,51761],{"class":115},[105,64554,51596],{"class":51285},[105,64556,51292],{"class":115},[105,64558,64559,64561,64563],{"class":107,"line":16878},[105,64560,52402],{"class":115},[105,64562,51596],{"class":51285},[105,64564,51292],{"class":115},[105,64566,64567,64569,64571],{"class":107,"line":16891},[105,64568,52129],{"class":115},[105,64570,51798],{"class":51285},[105,64572,51292],{"class":115},[105,64574,64575],{"class":107,"line":16896},[105,64576,64577],{"class":174},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[105,64579,64580],{"class":107,"line":16901},[105,64581,64582],{"class":174},"    \u002F\u002F 1.1 获取 a 元素 \n",[105,64584,64585,64587,64590,64592,64594,64596,64598,64601],{"class":107,"line":16906},[105,64586,11213],{"class":111},[105,64588,64589],{"class":164}," as",[105,64591,13556],{"class":111},[105,64593,54381],{"class":115},[105,64595,55666],{"class":1954},[105,64597,116],{"class":115},[105,64599,64600],{"class":220},"'.tab-nav a'",[105,64602,122],{"class":115},[105,64604,64605],{"class":107,"line":16919},[105,64606,64607],{"class":174},"    \u002F\u002F console.log(as) \n",[105,64609,64610,64612,64614,64616,64618,64620,64622,64624,64626,64629,64631,64633,64635],{"class":107,"line":16924},[105,64611,3192],{"class":111},[105,64613,1649],{"class":115},[105,64615,51832],{"class":111},[105,64617,9430],{"class":115},[105,64619,161],{"class":111},[105,64621,4084],{"class":164},[105,64623,9437],{"class":115},[105,64625,1026],{"class":111},[105,64627,64628],{"class":115}," as.",[105,64630,51953],{"class":164},[105,64632,3205],{"class":115},[105,64634,2283],{"class":111},[105,64636,12434],{"class":115},[105,64638,64639],{"class":107,"line":32618},[105,64640,64641],{"class":174},"      \u002F\u002F console.log(as[i])\n",[105,64643,64644],{"class":107,"line":32624},[105,64645,64646],{"class":174},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[105,64648,64649,64652,64654,64656,64659,64661,64663],{"class":107,"line":32630},[105,64650,64651],{"class":115},"      as[i].",[105,64653,57798],{"class":1954},[105,64655,116],{"class":115},[105,64657,64658],{"class":220},"'mouseenter'",[105,64660,12427],{"class":115},[105,64662,54434],{"class":111},[105,64664,54437],{"class":115},[105,64666,64667],{"class":107,"line":32636},[105,64668,64669],{"class":174},"        \u002F\u002F console.log('鼠标经过')\n",[105,64671,64672],{"class":107,"line":32642},[105,64673,64674],{"class":174},"        \u002F\u002F 排他思想  \n",[105,64676,64677],{"class":107,"line":32653},[105,64678,64679],{"class":174},"        \u002F\u002F 干掉别人 移除类active\n",[105,64681,64682,64684,64686,64688,64691,64693,64695,64697,64700],{"class":107,"line":32659},[105,64683,51910],{"class":115},[105,64685,54384],{"class":1954},[105,64687,116],{"class":115},[105,64689,64690],{"class":220},"'.tab-nav .active'",[105,64692,56988],{"class":115},[105,64694,56991],{"class":1954},[105,64696,116],{"class":115},[105,64698,64699],{"class":220},"'active'",[105,64701,122],{"class":115},[105,64703,64704],{"class":107,"line":32679},[105,64705,64706],{"class":174},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[105,64708,64709,64712,64715,64717,64719,64721],{"class":107,"line":32685},[105,64710,64711],{"class":164},"        this",[105,64713,64714],{"class":115},".classList.",[105,64716,5326],{"class":1954},[105,64718,116],{"class":115},[105,64720,64699],{"class":220},[105,64722,122],{"class":115},[105,64724,64725],{"class":107,"line":32696},[105,64726,2391],{"emptyLinePlaceholder":32},[105,64728,64729],{"class":107,"line":32702},[105,64730,64731],{"class":174},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[105,64733,64734],{"class":107,"line":32708},[105,64735,64736],{"class":174},"        \u002F\u002F 干掉别人\n",[105,64738,64739,64741,64743,64745,64748,64750,64752,64754,64756],{"class":107,"line":32714},[105,64740,51910],{"class":115},[105,64742,54384],{"class":1954},[105,64744,116],{"class":115},[105,64746,64747],{"class":220},"'.tab-content .active'",[105,64749,56988],{"class":115},[105,64751,56991],{"class":1954},[105,64753,116],{"class":115},[105,64755,64699],{"class":220},[105,64757,122],{"class":115},[105,64759,64760],{"class":107,"line":32720},[105,64761,64762],{"class":174},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[105,64764,64765,64767,64769,64771,64774,64776,64778,64780,64782,64784,64786,64788,64790],{"class":107,"line":32726},[105,64766,51910],{"class":115},[105,64768,54384],{"class":1954},[105,64770,116],{"class":115},[105,64772,64773],{"class":220},"`.tab-content .item:nth-child(${",[105,64775,557],{"class":115},[105,64777,45551],{"class":111},[105,64779,25103],{"class":164},[105,64781,57017],{"class":220},[105,64783,56988],{"class":115},[105,64785,5326],{"class":1954},[105,64787,116],{"class":115},[105,64789,64699],{"class":220},[105,64791,122],{"class":115},[105,64793,64794],{"class":107,"line":32732},[105,64795,2391],{"emptyLinePlaceholder":32},[105,64797,64798],{"class":107,"line":32738},[105,64799,64800],{"class":115},"      })\n",[105,64802,64803],{"class":107,"line":32758},[105,64804,2178],{"class":115},[105,64806,64807,64809,64811],{"class":107,"line":32764},[105,64808,52402],{"class":115},[105,64810,51798],{"class":51285},[105,64812,51292],{"class":115},[105,64814,64815,64817,64819],{"class":107,"line":32780},[105,64816,51770],{"class":115},[105,64818,51785],{"class":51285},[105,64820,51292],{"class":115},[105,64822,64823],{"class":107,"line":32786},[105,64824,2391],{"emptyLinePlaceholder":32},[105,64826,64827,64829,64831],{"class":107,"line":32800},[105,64828,51770],{"class":115},[105,64830,50620],{"class":51285},[105,64832,51292],{"class":115},[14,64834,64835],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64837,64838],{},"在监听事件中，this指向的就是他的调用者",[14,64840,64841],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64843,53705],{},[14,64845,64846],{},"(function () {",[14,64848,64849],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64851,64852],{},"list.addEventListener('click', function (e) {",[14,64854,64855],{},"if (e.target.tagName === 'A') {",[14,64857,64858],{},"\u002F\u002F 排他思想",[14,64860,64861],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64863,64864],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64866,64867],{},"\u002F\u002F console.log(old);",[14,64869,64870],{},"\u002F\u002F 判断",[14,64872,64873],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64875,64876],{},"if (old) old.classList.remove('active')",[14,64878,64879],{},"e.target.classList.add('active')",[14,64881,1062],{},[14,64883,52449],{},[14,64885,64886],{},"})();",[76,64888,64890],{"id":64889},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[96,64892,64894],{"className":50618,"code":64893,"language":50620,"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",[102,64895,64896,64906,64910,64918,64922,64936,64950,64962,64970,64976,64986,64996,65000,65004,65011,65023,65034,65051,65064,65078,65088,65092,65096,65103,65114,65132,65142,65154,65158,65162,65169,65186,65197,65209,65213,65217,65224,65236,65240,65248,65256,65260,65268,65276,65284,65299,65343,65351,65364,65377,65390,65398,65406,65414,65442,65450,65462,65475,65488,65496,65504,65512,65538,65546,65559,65571,65584,65592,65600,65608,65634,65642,65655,65667,65680,65688,65696,65704,65709,65729,65734,65754,65759,65776,65781,65789,65794,65823,65836,65840,65844,65849,65853,65881,65886,65903,65908,65913,65918,65923,65949,65953,65957,65965,65973,65977],{"__ignoreMap":22},[105,64897,64898,64900,64902,64904],{"class":107,"line":108},[105,64899,51282],{"class":115},[105,64901,51286],{"class":51285},[105,64903,51289],{"class":1954},[105,64905,51292],{"class":115},[105,64907,64908],{"class":107,"line":28},[105,64909,2391],{"emptyLinePlaceholder":32},[105,64911,64912,64914,64916],{"class":107,"line":1171},[105,64913,1026],{"class":115},[105,64915,50620],{"class":51285},[105,64917,51292],{"class":115},[105,64919,64920],{"class":107,"line":1186},[105,64921,2391],{"emptyLinePlaceholder":32},[105,64923,64924,64926,64928,64930,64932,64934],{"class":107,"line":1192},[105,64925,1026],{"class":115},[105,64927,51319],{"class":51285},[105,64929,51301],{"class":1954},[105,64931,161],{"class":115},[105,64933,51306],{"class":220},[105,64935,51292],{"class":115},[105,64937,64938,64940,64942,64944,64946,64948],{"class":107,"line":1206},[105,64939,52129],{"class":115},[105,64941,51329],{"class":51285},[105,64943,51332],{"class":1954},[105,64945,161],{"class":115},[105,64947,51337],{"class":220},[105,64949,51292],{"class":115},[105,64951,64952,64954,64956,64958,64960],{"class":107,"line":1212},[105,64953,52129],{"class":115},[105,64955,51392],{"class":51285},[105,64957,55299],{"class":115},[105,64959,51392],{"class":51285},[105,64961,51292],{"class":115},[105,64963,64964,64966,64968],{"class":107,"line":1303},[105,64965,52129],{"class":115},[105,64967,5118],{"class":51285},[105,64969,51292],{"class":115},[105,64971,64972,64974],{"class":107,"line":1309},[105,64973,6395],{"class":51285},[105,64975,15564],{"class":115},[105,64977,64978,64980,64982,64984],{"class":107,"line":1321},[105,64979,54691],{"class":164},[105,64981,51422],{"class":115},[105,64983,307],{"class":164},[105,64985,1282],{"class":115},[105,64987,64988,64990,64992,64994],{"class":107,"line":1603},[105,64989,54680],{"class":164},[105,64991,51422],{"class":115},[105,64993,307],{"class":164},[105,64995,1282],{"class":115},[105,64997,64998],{"class":107,"line":1608},[105,64999,2178],{"class":115},[105,65001,65002],{"class":107,"line":1614},[105,65003,2391],{"emptyLinePlaceholder":32},[105,65005,65006,65009],{"class":107,"line":1619},[105,65007,65008],{"class":51285},"    table",[105,65010,15564],{"class":115},[105,65012,65013,65016,65018,65021],{"class":107,"line":1633},[105,65014,65015],{"class":164},"      border-collapse",[105,65017,51422],{"class":115},[105,65019,65020],{"class":164},"collapse",[105,65022,1282],{"class":115},[105,65024,65025,65028,65030,65032],{"class":107,"line":1638},[105,65026,65027],{"class":164},"      border-spacing",[105,65029,51422],{"class":115},[105,65031,307],{"class":164},[105,65033,1282],{"class":115},[105,65035,65036,65038,65040,65042,65044,65046,65049],{"class":107,"line":1644},[105,65037,61962],{"class":164},[105,65039,51422],{"class":115},[105,65041,333],{"class":164},[105,65043,51477],{"class":111},[105,65045,51506],{"class":164},[105,65047,65048],{"class":164}," #c0c0c0",[105,65050,1282],{"class":115},[105,65052,65053,65055,65057,65060,65062],{"class":107,"line":1665},[105,65054,54756],{"class":164},[105,65056,51422],{"class":115},[105,65058,65059],{"class":164},"500",[105,65061,51477],{"class":111},[105,65063,1282],{"class":115},[105,65065,65066,65068,65070,65072,65074,65076],{"class":107,"line":1670},[105,65067,54691],{"class":164},[105,65069,51422],{"class":115},[105,65071,427],{"class":164},[105,65073,51477],{"class":111},[105,65075,51541],{"class":164},[105,65077,1282],{"class":115},[105,65079,65080,65082,65084,65086],{"class":107,"line":1684},[105,65081,57271],{"class":164},[105,65083,51422],{"class":115},[105,65085,51577],{"class":164},[105,65087,1282],{"class":115},[105,65089,65090],{"class":107,"line":1689},[105,65091,2178],{"class":115},[105,65093,65094],{"class":107,"line":1718},[105,65095,2391],{"emptyLinePlaceholder":32},[105,65097,65098,65101],{"class":107,"line":1723},[105,65099,65100],{"class":51285},"    th",[105,65102,15564],{"class":115},[105,65104,65105,65107,65109,65112],{"class":107,"line":1740},[105,65106,54869],{"class":164},[105,65108,51422],{"class":115},[105,65110,65111],{"class":164},"#09c",[105,65113,1282],{"class":115},[105,65115,65116,65119,65121,65123,65125,65127,65130],{"class":107,"line":1745},[105,65117,65118],{"class":164},"      font",[105,65120,51422],{"class":115},[105,65122,62324],{"class":164},[105,65124,64058],{"class":164},[105,65126,51477],{"class":111},[105,65128,65129],{"class":220}," \"微软雅黑\"",[105,65131,1282],{"class":115},[105,65133,65134,65136,65138,65140],{"class":107,"line":1750},[105,65135,57401],{"class":164},[105,65137,51422],{"class":115},[105,65139,60827],{"class":164},[105,65141,1282],{"class":115},[105,65143,65144,65146,65148,65150,65152],{"class":107,"line":1755},[105,65145,54770],{"class":164},[105,65147,51422],{"class":115},[105,65149,916],{"class":164},[105,65151,51477],{"class":111},[105,65153,1282],{"class":115},[105,65155,65156],{"class":107,"line":1769},[105,65157,2178],{"class":115},[105,65159,65160],{"class":107,"line":1774},[105,65161,2391],{"emptyLinePlaceholder":32},[105,65163,65164,65167],{"class":107,"line":2568},[105,65165,65166],{"class":51285},"    td",[105,65168,15564],{"class":115},[105,65170,65171,65173,65175,65177,65179,65181,65184],{"class":107,"line":2582},[105,65172,61962],{"class":164},[105,65174,51422],{"class":115},[105,65176,333],{"class":164},[105,65178,51477],{"class":111},[105,65180,51506],{"class":164},[105,65182,65183],{"class":164}," #d0d0d0",[105,65185,1282],{"class":115},[105,65187,65188,65190,65192,65195],{"class":107,"line":2590},[105,65189,57401],{"class":164},[105,65191,51422],{"class":115},[105,65193,65194],{"class":164},"#404060",[105,65196,1282],{"class":115},[105,65198,65199,65201,65203,65205,65207],{"class":107,"line":2595},[105,65200,54680],{"class":164},[105,65202,51422],{"class":115},[105,65204,562],{"class":164},[105,65206,51477],{"class":111},[105,65208,1282],{"class":115},[105,65210,65211],{"class":107,"line":2601},[105,65212,2178],{"class":115},[105,65214,65215],{"class":107,"line":2607},[105,65216,2391],{"emptyLinePlaceholder":32},[105,65218,65219,65222],{"class":107,"line":2612},[105,65220,65221],{"class":1954},"    .allCheck",[105,65223,15564],{"class":115},[105,65225,65226,65228,65230,65232,65234],{"class":107,"line":7940},[105,65227,54756],{"class":164},[105,65229,51422],{"class":115},[105,65231,728],{"class":164},[105,65233,51477],{"class":111},[105,65235,1282],{"class":115},[105,65237,65238],{"class":107,"line":7964},[105,65239,2178],{"class":115},[105,65241,65242,65244,65246],{"class":107,"line":7969},[105,65243,52402],{"class":115},[105,65245,5118],{"class":51285},[105,65247,51292],{"class":115},[105,65249,65250,65252,65254],{"class":107,"line":7975},[105,65251,51770],{"class":115},[105,65253,51319],{"class":51285},[105,65255,51292],{"class":115},[105,65257,65258],{"class":107,"line":8002},[105,65259,2391],{"emptyLinePlaceholder":32},[105,65261,65262,65264,65266],{"class":107,"line":8007},[105,65263,1026],{"class":115},[105,65265,51785],{"class":51285},[105,65267,51292],{"class":115},[105,65269,65270,65272,65274],{"class":107,"line":8013},[105,65271,52129],{"class":115},[105,65273,253],{"class":51285},[105,65275,51292],{"class":115},[105,65277,65278,65280,65282],{"class":107,"line":8025},[105,65279,51326],{"class":115},[105,65281,259],{"class":51285},[105,65283,51292],{"class":115},[105,65285,65286,65288,65290,65292,65294,65297],{"class":107,"line":8037},[105,65287,55219],{"class":115},[105,65289,262],{"class":51285},[105,65291,53471],{"class":1954},[105,65293,161],{"class":115},[105,65295,65296],{"class":220},"\"allCheck\"",[105,65298,51292],{"class":115},[105,65300,65301,65303,65305,65307,65309,65311,65313,65315,65317,65319,65321,65324,65327,65329,65331,65333,65336,65339,65341],{"class":107,"line":8049},[105,65302,55287],{"class":115},[105,65304,53806],{"class":51285},[105,65306,53809],{"class":1954},[105,65308,161],{"class":115},[105,65310,53814],{"class":220},[105,65312,14912],{"class":1954},[105,65314,161],{"class":115},[105,65316,7644],{"class":220},[105,65318,14951],{"class":1954},[105,65320,161],{"class":115},[105,65322,65323],{"class":220},"\"checkAll\"",[105,65325,65326],{"class":115},"> \u003C",[105,65328,105],{"class":51285},[105,65330,53471],{"class":1954},[105,65332,161],{"class":115},[105,65334,65335],{"class":220},"\"all\"",[105,65337,65338],{"class":115},">全选\u003C\u002F",[105,65340,105],{"class":51285},[105,65342,51292],{"class":115},[105,65344,65345,65347,65349],{"class":107,"line":9708},[105,65346,55392],{"class":115},[105,65348,262],{"class":51285},[105,65350,51292],{"class":115},[105,65352,65353,65355,65357,65360,65362],{"class":107,"line":9733},[105,65354,55219],{"class":115},[105,65356,262],{"class":51285},[105,65358,65359],{"class":115},">商品\u003C\u002F",[105,65361,262],{"class":51285},[105,65363,51292],{"class":115},[105,65365,65366,65368,65370,65373,65375],{"class":107,"line":9756},[105,65367,55219],{"class":115},[105,65369,262],{"class":51285},[105,65371,65372],{"class":115},">商家\u003C\u002F",[105,65374,262],{"class":51285},[105,65376,51292],{"class":115},[105,65378,65379,65381,65383,65386,65388],{"class":107,"line":9780},[105,65380,55219],{"class":115},[105,65382,262],{"class":51285},[105,65384,65385],{"class":115},">价格\u003C\u002F",[105,65387,262],{"class":51285},[105,65389,51292],{"class":115},[105,65391,65392,65394,65396],{"class":107,"line":9785},[105,65393,51761],{"class":115},[105,65395,259],{"class":51285},[105,65397,51292],{"class":115},[105,65399,65400,65402,65404],{"class":107,"line":9790},[105,65401,51326],{"class":115},[105,65403,259],{"class":51285},[105,65405,51292],{"class":115},[105,65407,65408,65410,65412],{"class":107,"line":9795},[105,65409,55219],{"class":115},[105,65411,305],{"class":51285},[105,65413,51292],{"class":115},[105,65415,65416,65418,65420,65422,65424,65426,65428,65430,65433,65435,65437,65440],{"class":107,"line":9804},[105,65417,55287],{"class":115},[105,65419,53806],{"class":51285},[105,65421,53809],{"class":1954},[105,65423,161],{"class":115},[105,65425,53814],{"class":220},[105,65427,14912],{"class":1954},[105,65429,161],{"class":115},[105,65431,65432],{"class":220},"\"check\"",[105,65434,53471],{"class":1954},[105,65436,161],{"class":115},[105,65438,65439],{"class":220},"\"ck\"",[105,65441,51292],{"class":115},[105,65443,65444,65446,65448],{"class":107,"line":9809},[105,65445,55392],{"class":115},[105,65447,305],{"class":51285},[105,65449,51292],{"class":115},[105,65451,65452,65454,65456,65458,65460],{"class":107,"line":9815},[105,65453,55219],{"class":115},[105,65455,305],{"class":51285},[105,65457,61158],{"class":115},[105,65459,305],{"class":51285},[105,65461,51292],{"class":115},[105,65463,65464,65466,65468,65471,65473],{"class":107,"line":9836},[105,65465,55219],{"class":115},[105,65467,305],{"class":51285},[105,65469,65470],{"class":115},">小米\u003C\u002F",[105,65472,305],{"class":51285},[105,65474,51292],{"class":115},[105,65476,65477,65479,65481,65484,65486],{"class":107,"line":9842},[105,65478,55219],{"class":115},[105,65480,305],{"class":51285},[105,65482,65483],{"class":115},">￥1999\u003C\u002F",[105,65485,305],{"class":51285},[105,65487,51292],{"class":115},[105,65489,65490,65492,65494],{"class":107,"line":9856},[105,65491,51761],{"class":115},[105,65493,259],{"class":51285},[105,65495,51292],{"class":115},[105,65497,65498,65500,65502],{"class":107,"line":9862},[105,65499,51326],{"class":115},[105,65501,259],{"class":51285},[105,65503,51292],{"class":115},[105,65505,65506,65508,65510],{"class":107,"line":9889},[105,65507,55219],{"class":115},[105,65509,305],{"class":51285},[105,65511,51292],{"class":115},[105,65513,65514,65516,65518,65520,65522,65524,65526,65528,65530,65532,65534,65536],{"class":107,"line":9898},[105,65515,55287],{"class":115},[105,65517,53806],{"class":51285},[105,65519,53809],{"class":1954},[105,65521,161],{"class":115},[105,65523,53814],{"class":220},[105,65525,14912],{"class":1954},[105,65527,161],{"class":115},[105,65529,65432],{"class":220},[105,65531,53471],{"class":1954},[105,65533,161],{"class":115},[105,65535,65439],{"class":220},[105,65537,51292],{"class":115},[105,65539,65540,65542,65544],{"class":107,"line":9904},[105,65541,55392],{"class":115},[105,65543,305],{"class":51285},[105,65545,51292],{"class":115},[105,65547,65548,65550,65552,65555,65557],{"class":107,"line":9912},[105,65549,55219],{"class":115},[105,65551,305],{"class":51285},[105,65553,65554],{"class":115},">小米净水器\u003C\u002F",[105,65556,305],{"class":51285},[105,65558,51292],{"class":115},[105,65560,65561,65563,65565,65567,65569],{"class":107,"line":9917},[105,65562,55219],{"class":115},[105,65564,305],{"class":51285},[105,65566,65470],{"class":115},[105,65568,305],{"class":51285},[105,65570,51292],{"class":115},[105,65572,65573,65575,65577,65580,65582],{"class":107,"line":16596},[105,65574,55219],{"class":115},[105,65576,305],{"class":51285},[105,65578,65579],{"class":115},">￥4999\u003C\u002F",[105,65581,305],{"class":51285},[105,65583,51292],{"class":115},[105,65585,65586,65588,65590],{"class":107,"line":16602},[105,65587,51761],{"class":115},[105,65589,259],{"class":51285},[105,65591,51292],{"class":115},[105,65593,65594,65596,65598],{"class":107,"line":16625},[105,65595,51326],{"class":115},[105,65597,259],{"class":51285},[105,65599,51292],{"class":115},[105,65601,65602,65604,65606],{"class":107,"line":16631},[105,65603,55219],{"class":115},[105,65605,305],{"class":51285},[105,65607,51292],{"class":115},[105,65609,65610,65612,65614,65616,65618,65620,65622,65624,65626,65628,65630,65632],{"class":107,"line":16654},[105,65611,55287],{"class":115},[105,65613,53806],{"class":51285},[105,65615,53809],{"class":1954},[105,65617,161],{"class":115},[105,65619,53814],{"class":220},[105,65621,14912],{"class":1954},[105,65623,161],{"class":115},[105,65625,65432],{"class":220},[105,65627,53471],{"class":1954},[105,65629,161],{"class":115},[105,65631,65439],{"class":220},[105,65633,51292],{"class":115},[105,65635,65636,65638,65640],{"class":107,"line":16668},[105,65637,55392],{"class":115},[105,65639,305],{"class":51285},[105,65641,51292],{"class":115},[105,65643,65644,65646,65648,65651,65653],{"class":107,"line":16688},[105,65645,55219],{"class":115},[105,65647,305],{"class":51285},[105,65649,65650],{"class":115},">小米电视\u003C\u002F",[105,65652,305],{"class":51285},[105,65654,51292],{"class":115},[105,65656,65657,65659,65661,65663,65665],{"class":107,"line":16694},[105,65658,55219],{"class":115},[105,65660,305],{"class":51285},[105,65662,65470],{"class":115},[105,65664,305],{"class":51285},[105,65666,51292],{"class":115},[105,65668,65669,65671,65673,65676,65678],{"class":107,"line":16705},[105,65670,55219],{"class":115},[105,65672,305],{"class":51285},[105,65674,65675],{"class":115},">￥5999\u003C\u002F",[105,65677,305],{"class":51285},[105,65679,51292],{"class":115},[105,65681,65682,65684,65686],{"class":107,"line":16728},[105,65683,51761],{"class":115},[105,65685,259],{"class":51285},[105,65687,51292],{"class":115},[105,65689,65690,65692,65694],{"class":107,"line":16750},[105,65691,52402],{"class":115},[105,65693,253],{"class":51285},[105,65695,51292],{"class":115},[105,65697,65698,65700,65702],{"class":107,"line":16755},[105,65699,52129],{"class":115},[105,65701,51798],{"class":51285},[105,65703,51292],{"class":115},[105,65705,65706],{"class":107,"line":16761},[105,65707,65708],{"class":174},"    \u002F\u002F 1. 获取大复选框\n",[105,65710,65711,65713,65716,65718,65720,65722,65724,65727],{"class":107,"line":16775},[105,65712,11213],{"class":111},[105,65714,65715],{"class":164}," checkAll",[105,65717,13556],{"class":111},[105,65719,54381],{"class":115},[105,65721,54384],{"class":1954},[105,65723,116],{"class":115},[105,65725,65726],{"class":220},"'#checkAll'",[105,65728,122],{"class":115},[105,65730,65731],{"class":107,"line":16788},[105,65732,65733],{"class":174},"    \u002F\u002F 2. 获取所有的小复选框\n",[105,65735,65736,65738,65741,65743,65745,65747,65749,65752],{"class":107,"line":16793},[105,65737,11213],{"class":111},[105,65739,65740],{"class":164}," cks",[105,65742,13556],{"class":111},[105,65744,54381],{"class":115},[105,65746,55666],{"class":1954},[105,65748,116],{"class":115},[105,65750,65751],{"class":220},"'.ck'",[105,65753,122],{"class":115},[105,65755,65756],{"class":107,"line":16807},[105,65757,65758],{"class":174},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[105,65760,65761,65764,65766,65768,65770,65772,65774],{"class":107,"line":16812},[105,65762,65763],{"class":115},"    checkAll.",[105,65765,57798],{"class":1954},[105,65767,116],{"class":115},[105,65769,57803],{"class":220},[105,65771,12427],{"class":115},[105,65773,54434],{"class":111},[105,65775,54437],{"class":115},[105,65777,65778],{"class":107,"line":16818},[105,65779,65780],{"class":174},"      \u002F\u002F 得到当前大复选框的选中状态\n",[105,65782,65783,65786],{"class":107,"line":16823},[105,65784,65785],{"class":174},"      \u002F\u002F console.log(checkAll.checked)",[105,65787,65788],{"class":174},"  \u002F\u002F 得到 是 true 或者是 false\n",[105,65790,65791],{"class":107,"line":16837},[105,65792,65793],{"class":174},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[105,65795,65796,65798,65800,65802,65804,65806,65808,65810,65812,65815,65817,65819,65821],{"class":107,"line":16842},[105,65797,52269],{"class":111},[105,65799,1649],{"class":115},[105,65801,51832],{"class":111},[105,65803,9430],{"class":115},[105,65805,161],{"class":111},[105,65807,4084],{"class":164},[105,65809,9437],{"class":115},[105,65811,1026],{"class":111},[105,65813,65814],{"class":115}," cks.",[105,65816,51953],{"class":164},[105,65818,3205],{"class":115},[105,65820,2283],{"class":111},[105,65822,12434],{"class":115},[105,65824,65825,65828,65830,65833],{"class":107,"line":16847},[105,65826,65827],{"class":115},"        cks[i].checked ",[105,65829,161],{"class":111},[105,65831,65832],{"class":164}," this",[105,65834,65835],{"class":115},".checked\n",[105,65837,65838],{"class":107,"line":16861},[105,65839,52383],{"class":115},[105,65841,65842],{"class":107,"line":16873},[105,65843,33446],{"class":115},[105,65845,65846],{"class":107,"line":16878},[105,65847,65848],{"class":174},"    \u002F\u002F 5. 小复选框控制大复选框\n",[105,65850,65851],{"class":107,"line":16891},[105,65852,2391],{"emptyLinePlaceholder":32},[105,65854,65855,65857,65859,65861,65863,65865,65867,65869,65871,65873,65875,65877,65879],{"class":107,"line":16896},[105,65856,3192],{"class":111},[105,65858,1649],{"class":115},[105,65860,51832],{"class":111},[105,65862,9430],{"class":115},[105,65864,161],{"class":111},[105,65866,4084],{"class":164},[105,65868,9437],{"class":115},[105,65870,1026],{"class":111},[105,65872,65814],{"class":115},[105,65874,51953],{"class":164},[105,65876,3205],{"class":115},[105,65878,2283],{"class":111},[105,65880,12434],{"class":115},[105,65882,65883],{"class":107,"line":16901},[105,65884,65885],{"class":174},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[105,65887,65888,65891,65893,65895,65897,65899,65901],{"class":107,"line":16906},[105,65889,65890],{"class":115},"      cks[i].",[105,65892,57798],{"class":1954},[105,65894,116],{"class":115},[105,65896,57803],{"class":220},[105,65898,12427],{"class":115},[105,65900,54434],{"class":111},[105,65902,54437],{"class":115},[105,65904,65905],{"class":107,"line":16919},[105,65906,65907],{"class":174},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[105,65909,65910],{"class":107,"line":16924},[105,65911,65912],{"class":174},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[105,65914,65915],{"class":107,"line":32618},[105,65916,65917],{"class":174},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[105,65919,65920],{"class":107,"line":32624},[105,65921,65922],{"class":174},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[105,65924,65925,65928,65930,65932,65934,65936,65939,65941,65943,65945,65947],{"class":107,"line":32630},[105,65926,65927],{"class":115},"        checkAll.checked ",[105,65929,161],{"class":111},[105,65931,54381],{"class":115},[105,65933,55666],{"class":1954},[105,65935,116],{"class":115},[105,65937,65938],{"class":220},"'.ck:checked'",[105,65940,30811],{"class":115},[105,65942,51953],{"class":164},[105,65944,57891],{"class":111},[105,65946,65814],{"class":115},[105,65948,55816],{"class":164},[105,65950,65951],{"class":107,"line":32636},[105,65952,64800],{"class":115},[105,65954,65955],{"class":107,"line":32642},[105,65956,2178],{"class":115},[105,65958,65959,65961,65963],{"class":107,"line":32653},[105,65960,52402],{"class":115},[105,65962,51798],{"class":51285},[105,65964,51292],{"class":115},[105,65966,65967,65969,65971],{"class":107,"line":32659},[105,65968,51770],{"class":115},[105,65970,51785],{"class":51285},[105,65972,51292],{"class":115},[105,65974,65975],{"class":107,"line":32679},[105,65976,2391],{"emptyLinePlaceholder":32},[105,65978,65979,65981,65983],{"class":107,"line":32685},[105,65980,51770],{"class":115},[105,65982,50620],{"class":51285},[105,65984,51292],{"class":115},[14,65986,65987],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,65989,65990],{},"用好之间比较得到的布尔值！！！",[14,65992,65993,65994,65997,65998,1649,66001,700,66003,66006],{},"在 JS 里访问的时候，",[102,65995,65996],{},"checkbox.checked"," 是一个 ",[265,65999,66000],{},"布尔值",[102,66002,1354],{},[102,66004,66005],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66008,66009,66010,66013,66014],{},"HTML 的 ",[102,66011,66012],{},"checked=\"checked\""," 只是 ",[265,66015,66016,66017,66020],{},"初始值；JS 的 ",[102,66018,66019],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66022,66023],{},"：checked是一个伪类选择器",[14,66025,66026],{},[20,66027],{"alt":22,"src":66028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66030,66031,66034],{},[66032,66033],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66036,66037],{},[20,66038],{"alt":22,"src":66039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[47,66041,66043],{"id":66042},"_33-dom事件进阶","3.3 DOM事件进阶",[76,66045,66047],{"id":66046},"_331-事件流","3.3.1 事件流",[14,66049,66050],{},[20,66051],{"alt":22,"src":66052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21990,66054,66056],{"id":66055},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66058,66059],{},[20,66060],{"alt":22,"src":66061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[96,66063,66065],{"className":50618,"code":66064,"language":50620,"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",[102,66066,66067,66077,66091,66095,66103,66117,66137,66149,66157,66164,66176,66188,66198,66202,66206,66213,66225,66237,66247,66251,66259,66267,66271,66279,66294,66313,66321,66329,66349,66369,66385,66396,66404,66421,66432,66440,66457,66468,66476,66484,66492,66496],{"__ignoreMap":22},[105,66068,66069,66071,66073,66075],{"class":107,"line":108},[105,66070,51282],{"class":115},[105,66072,51286],{"class":51285},[105,66074,51289],{"class":1954},[105,66076,51292],{"class":115},[105,66078,66079,66081,66083,66085,66087,66089],{"class":107,"line":28},[105,66080,1026],{"class":115},[105,66082,50620],{"class":51285},[105,66084,51301],{"class":1954},[105,66086,161],{"class":115},[105,66088,51306],{"class":220},[105,66090,51292],{"class":115},[105,66092,66093],{"class":107,"line":1171},[105,66094,2391],{"emptyLinePlaceholder":32},[105,66096,66097,66099,66101],{"class":107,"line":1186},[105,66098,1026],{"class":115},[105,66100,51319],{"class":51285},[105,66102,51292],{"class":115},[105,66104,66105,66107,66109,66111,66113,66115],{"class":107,"line":1192},[105,66106,52129],{"class":115},[105,66108,51329],{"class":51285},[105,66110,51332],{"class":1954},[105,66112,161],{"class":115},[105,66114,51337],{"class":220},[105,66116,51292],{"class":115},[105,66118,66119,66121,66123,66125,66127,66129,66131,66133,66135],{"class":107,"line":1206},[105,66120,52129],{"class":115},[105,66122,51329],{"class":51285},[105,66124,14912],{"class":1954},[105,66126,161],{"class":115},[105,66128,51376],{"class":220},[105,66130,51356],{"class":1954},[105,66132,161],{"class":115},[105,66134,51383],{"class":220},[105,66136,51292],{"class":115},[105,66138,66139,66141,66143,66145,66147],{"class":107,"line":1212},[105,66140,52129],{"class":115},[105,66142,51392],{"class":51285},[105,66144,51395],{"class":115},[105,66146,51392],{"class":51285},[105,66148,51292],{"class":115},[105,66150,66151,66153,66155],{"class":107,"line":1303},[105,66152,52129],{"class":115},[105,66154,5118],{"class":51285},[105,66156,51292],{"class":115},[105,66158,66159,66162],{"class":107,"line":1309},[105,66160,66161],{"class":1954},"    .father",[105,66163,15564],{"class":115},[105,66165,66166,66168,66170,66172,66174],{"class":107,"line":1321},[105,66167,54756],{"class":164},[105,66169,51422],{"class":115},[105,66171,65059],{"class":164},[105,66173,51477],{"class":111},[105,66175,1282],{"class":115},[105,66177,66178,66180,66182,66184,66186],{"class":107,"line":1603},[105,66179,54770],{"class":164},[105,66181,51422],{"class":115},[105,66183,65059],{"class":164},[105,66185,51477],{"class":111},[105,66187,1282],{"class":115},[105,66189,66190,66192,66194,66196],{"class":107,"line":1608},[105,66191,54869],{"class":164},[105,66193,51422],{"class":115},[105,66195,51630],{"class":164},[105,66197,1282],{"class":115},[105,66199,66200],{"class":107,"line":1614},[105,66201,2178],{"class":115},[105,66203,66204],{"class":107,"line":1619},[105,66205,2391],{"emptyLinePlaceholder":32},[105,66207,66208,66211],{"class":107,"line":1633},[105,66209,66210],{"class":1954},"    .son",[105,66212,15564],{"class":115},[105,66214,66215,66217,66219,66221,66223],{"class":107,"line":1638},[105,66216,54756],{"class":164},[105,66218,51422],{"class":115},[105,66220,1713],{"class":164},[105,66222,51477],{"class":111},[105,66224,1282],{"class":115},[105,66226,66227,66229,66231,66233,66235],{"class":107,"line":1644},[105,66228,54770],{"class":164},[105,66230,51422],{"class":115},[105,66232,1713],{"class":164},[105,66234,51477],{"class":111},[105,66236,1282],{"class":115},[105,66238,66239,66241,66243,66245],{"class":107,"line":1665},[105,66240,54869],{"class":164},[105,66242,51422],{"class":115},[105,66244,54874],{"class":164},[105,66246,1282],{"class":115},[105,66248,66249],{"class":107,"line":1670},[105,66250,2178],{"class":115},[105,66252,66253,66255,66257],{"class":107,"line":1684},[105,66254,52402],{"class":115},[105,66256,5118],{"class":51285},[105,66258,51292],{"class":115},[105,66260,66261,66263,66265],{"class":107,"line":1689},[105,66262,51770],{"class":115},[105,66264,51319],{"class":51285},[105,66266,51292],{"class":115},[105,66268,66269],{"class":107,"line":1718},[105,66270,2391],{"emptyLinePlaceholder":32},[105,66272,66273,66275,66277],{"class":107,"line":1723},[105,66274,1026],{"class":115},[105,66276,51785],{"class":51285},[105,66278,51292],{"class":115},[105,66280,66281,66283,66285,66287,66289,66292],{"class":107,"line":1740},[105,66282,52129],{"class":115},[105,66284,51596],{"class":51285},[105,66286,53471],{"class":1954},[105,66288,161],{"class":115},[105,66290,66291],{"class":220},"\"father\"",[105,66293,51292],{"class":115},[105,66295,66296,66298,66300,66302,66304,66307,66309,66311],{"class":107,"line":1745},[105,66297,51326],{"class":115},[105,66299,51596],{"class":51285},[105,66301,53471],{"class":1954},[105,66303,161],{"class":115},[105,66305,66306],{"class":220},"\"son\"",[105,66308,55299],{"class":115},[105,66310,51596],{"class":51285},[105,66312,51292],{"class":115},[105,66314,66315,66317,66319],{"class":107,"line":1750},[105,66316,52402],{"class":115},[105,66318,51596],{"class":51285},[105,66320,51292],{"class":115},[105,66322,66323,66325,66327],{"class":107,"line":1755},[105,66324,52129],{"class":115},[105,66326,51798],{"class":51285},[105,66328,51292],{"class":115},[105,66330,66331,66333,66336,66338,66340,66342,66344,66347],{"class":107,"line":1769},[105,66332,11213],{"class":111},[105,66334,66335],{"class":164}," fa",[105,66337,13556],{"class":111},[105,66339,54381],{"class":115},[105,66341,54384],{"class":1954},[105,66343,116],{"class":115},[105,66345,66346],{"class":220},"'.father'",[105,66348,122],{"class":115},[105,66350,66351,66353,66356,66358,66360,66362,66364,66367],{"class":107,"line":1774},[105,66352,11213],{"class":111},[105,66354,66355],{"class":164}," son",[105,66357,13556],{"class":111},[105,66359,54381],{"class":115},[105,66361,54384],{"class":1954},[105,66363,116],{"class":115},[105,66365,66366],{"class":220},"'.son'",[105,66368,122],{"class":115},[105,66370,66371,66373,66375,66377,66379,66381,66383],{"class":107,"line":2568},[105,66372,52392],{"class":115},[105,66374,57798],{"class":1954},[105,66376,116],{"class":115},[105,66378,57803],{"class":220},[105,66380,12427],{"class":115},[105,66382,54434],{"class":111},[105,66384,54437],{"class":115},[105,66386,66387,66389,66391,66394],{"class":107,"line":2582},[105,66388,58910],{"class":1954},[105,66390,116],{"class":115},[105,66392,66393],{"class":220},"'woshiu1'",[105,66395,122],{"class":115},[105,66397,66398,66400,66402],{"class":107,"line":2590},[105,66399,54520],{"class":115},[105,66401,1354],{"class":164},[105,66403,122],{"class":115},[105,66405,66406,66409,66411,66413,66415,66417,66419],{"class":107,"line":2595},[105,66407,66408],{"class":115},"    fa.",[105,66410,57798],{"class":1954},[105,66412,116],{"class":115},[105,66414,57803],{"class":220},[105,66416,12427],{"class":115},[105,66418,54434],{"class":111},[105,66420,54437],{"class":115},[105,66422,66423,66425,66427,66430],{"class":107,"line":2601},[105,66424,58910],{"class":1954},[105,66426,116],{"class":115},[105,66428,66429],{"class":220},"'1'",[105,66431,122],{"class":115},[105,66433,66434,66436,66438],{"class":107,"line":2607},[105,66435,54520],{"class":115},[105,66437,1354],{"class":164},[105,66439,122],{"class":115},[105,66441,66442,66445,66447,66449,66451,66453,66455],{"class":107,"line":2612},[105,66443,66444],{"class":115},"    son.",[105,66446,57798],{"class":1954},[105,66448,116],{"class":115},[105,66450,57803],{"class":220},[105,66452,12427],{"class":115},[105,66454,54434],{"class":111},[105,66456,54437],{"class":115},[105,66458,66459,66461,66463,66466],{"class":107,"line":7940},[105,66460,58910],{"class":1954},[105,66462,116],{"class":115},[105,66464,66465],{"class":220},"'2'",[105,66467,122],{"class":115},[105,66469,66470,66472,66474],{"class":107,"line":7964},[105,66471,54520],{"class":115},[105,66473,1354],{"class":164},[105,66475,122],{"class":115},[105,66477,66478,66480,66482],{"class":107,"line":7969},[105,66479,52402],{"class":115},[105,66481,51798],{"class":51285},[105,66483,51292],{"class":115},[105,66485,66486,66488,66490],{"class":107,"line":7975},[105,66487,51770],{"class":115},[105,66489,51785],{"class":51285},[105,66491,51292],{"class":115},[105,66493,66494],{"class":107,"line":8002},[105,66495,2391],{"emptyLinePlaceholder":32},[105,66497,66498,66500,66502],{"class":107,"line":8007},[105,66499,51770],{"class":115},[105,66501,50620],{"class":51285},[105,66503,51292],{"class":115},[14,66505,66506],{},[20,66507],{"alt":22,"src":66508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66510,66511],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21990,66513,66515],{"id":66514},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66517,66518],{},[20,66519],{"alt":22,"src":66520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66522,66523],{},"反着来",[14,66525,66526],{},"注意是同名事件，比如都是‘click’",[21990,66528,66530],{"id":66529},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66532,66533],{},[20,66534],{"alt":22,"src":66535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21990,66537,66539],{"id":66538},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66541,66542],{},[20,66543],{"alt":22,"src":66544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66546,66547],{},[20,66548],{"alt":22,"src":66549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21990,66551,66553],{"id":66552},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[59,66555,66556],{},[62,66557,66558],{},"事件类型的区别",[14,66560,66561],{},[20,66562],{"alt":22,"src":66563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66565,66566],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[59,66568,66569],{"start":28},[62,66570,66571],{},"注册事件的区别",[14,66573,66574],{},[20,66575],{"alt":22,"src":66576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21990,66578,66580],{"id":66579},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66582,66583],{},[20,66584],{"alt":22,"src":66585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66587,66588],{},[20,66589],{"alt":22,"src":66590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[96,66592,66594],{"className":53052,"code":66593,"language":53054,"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",[102,66595,66596,66604,66621,66644,66652,66657,66662,66667,66671,66679,66687],{"__ignoreMap":22},[105,66597,66598,66600,66602],{"class":107,"line":108},[105,66599,1026],{"class":115},[105,66601,51785],{"class":51285},[105,66603,51292],{"class":115},[105,66605,66606,66608,66611,66614,66616,66619],{"class":107,"line":28},[105,66607,52129],{"class":115},[105,66609,66610],{"class":51285},"form",[105,66612,66613],{"class":1954}," action",[105,66615,161],{"class":115},[105,66617,66618],{"class":220},"\"http:\u002F\u002Fwww.itcast.cn\"",[105,66620,51292],{"class":115},[105,66622,66623,66625,66627,66629,66631,66634,66637,66639,66642],{"class":107,"line":1171},[105,66624,51326],{"class":115},[105,66626,53806],{"class":51285},[105,66628,53809],{"class":1954},[105,66630,161],{"class":115},[105,66632,66633],{"class":220},"\"submit\"",[105,66635,66636],{"class":1954}," value",[105,66638,161],{"class":115},[105,66640,66641],{"class":220},"\"免费注册\"",[105,66643,51292],{"class":115},[105,66645,66646,66648,66650],{"class":107,"line":1186},[105,66647,51326],{"class":115},[105,66649,51798],{"class":51285},[105,66651,51292],{"class":115},[105,66653,66654],{"class":107,"line":1192},[105,66655,66656],{"class":115},"      const form = document.querySelector('form')\n",[105,66658,66659],{"class":107,"line":1206},[105,66660,66661],{"class":115},"      form.addEventListener('submit', function (e) {\n",[105,66663,66664],{"class":107,"line":1212},[105,66665,66666],{"class":115},"        e.preventDefault()\n",[105,66668,66669],{"class":107,"line":1303},[105,66670,64800],{"class":115},[105,66672,66673,66675,66677],{"class":107,"line":1309},[105,66674,51761],{"class":115},[105,66676,51798],{"class":51285},[105,66678,51292],{"class":115},[105,66680,66681,66683,66685],{"class":107,"line":1321},[105,66682,52402],{"class":115},[105,66684,66610],{"class":51285},[105,66686,51292],{"class":115},[105,66688,66689,66691,66693],{"class":107,"line":1603},[105,66690,51770],{"class":115},[105,66692,51785],{"class":51285},[105,66694,51292],{"class":115},[14,66696,66697],{},"点击不在跳转！！！",[76,66699,66701],{"id":66700},"_332-事件委托","3.3.2 事件委托",[14,66703,66704],{},[20,66705],{"alt":22,"src":66706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[96,66708,66710],{"className":50618,"code":66709,"language":50620,"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",[102,66711,66712,66722,66736,66740,66748,66762,66782,66794,66802,66806,66814,66822,66834,66846,66858,66870,66882,66895,66903,66911,66916,66935,66956,66961,66966,66971,66976,66985,66989,66999,67003,67008,67013,67027,67037,67041,67045,67053,67061,67065],{"__ignoreMap":22},[105,66713,66714,66716,66718,66720],{"class":107,"line":108},[105,66715,51282],{"class":115},[105,66717,51286],{"class":51285},[105,66719,51289],{"class":1954},[105,66721,51292],{"class":115},[105,66723,66724,66726,66728,66730,66732,66734],{"class":107,"line":28},[105,66725,1026],{"class":115},[105,66727,50620],{"class":51285},[105,66729,51301],{"class":1954},[105,66731,161],{"class":115},[105,66733,51306],{"class":220},[105,66735,51292],{"class":115},[105,66737,66738],{"class":107,"line":1171},[105,66739,2391],{"emptyLinePlaceholder":32},[105,66741,66742,66744,66746],{"class":107,"line":1186},[105,66743,1026],{"class":115},[105,66745,51319],{"class":51285},[105,66747,51292],{"class":115},[105,66749,66750,66752,66754,66756,66758,66760],{"class":107,"line":1192},[105,66751,52129],{"class":115},[105,66753,51329],{"class":51285},[105,66755,51332],{"class":1954},[105,66757,161],{"class":115},[105,66759,51337],{"class":220},[105,66761,51292],{"class":115},[105,66763,66764,66766,66768,66770,66772,66774,66776,66778,66780],{"class":107,"line":1206},[105,66765,52129],{"class":115},[105,66767,51329],{"class":51285},[105,66769,14912],{"class":1954},[105,66771,161],{"class":115},[105,66773,51376],{"class":220},[105,66775,51356],{"class":1954},[105,66777,161],{"class":115},[105,66779,51383],{"class":220},[105,66781,51292],{"class":115},[105,66783,66784,66786,66788,66790,66792],{"class":107,"line":1212},[105,66785,52129],{"class":115},[105,66787,51392],{"class":51285},[105,66789,51395],{"class":115},[105,66791,51392],{"class":51285},[105,66793,51292],{"class":115},[105,66795,66796,66798,66800],{"class":107,"line":1303},[105,66797,51770],{"class":115},[105,66799,51319],{"class":51285},[105,66801,51292],{"class":115},[105,66803,66804],{"class":107,"line":1309},[105,66805,2391],{"emptyLinePlaceholder":32},[105,66807,66808,66810,66812],{"class":107,"line":1321},[105,66809,1026],{"class":115},[105,66811,51785],{"class":51285},[105,66813,51292],{"class":115},[105,66815,66816,66818,66820],{"class":107,"line":1603},[105,66817,52129],{"class":115},[105,66819,1123],{"class":51285},[105,66821,51292],{"class":115},[105,66823,66824,66826,66828,66830,66832],{"class":107,"line":1608},[105,66825,51326],{"class":115},[105,66827,62],{"class":51285},[105,66829,53951],{"class":115},[105,66831,62],{"class":51285},[105,66833,51292],{"class":115},[105,66835,66836,66838,66840,66842,66844],{"class":107,"line":1614},[105,66837,51326],{"class":115},[105,66839,62],{"class":51285},[105,66841,53970],{"class":115},[105,66843,62],{"class":51285},[105,66845,51292],{"class":115},[105,66847,66848,66850,66852,66854,66856],{"class":107,"line":1619},[105,66849,51326],{"class":115},[105,66851,62],{"class":51285},[105,66853,53989],{"class":115},[105,66855,62],{"class":51285},[105,66857,51292],{"class":115},[105,66859,66860,66862,66864,66866,66868],{"class":107,"line":1633},[105,66861,51326],{"class":115},[105,66863,62],{"class":51285},[105,66865,54008],{"class":115},[105,66867,62],{"class":51285},[105,66869,51292],{"class":115},[105,66871,66872,66874,66876,66878,66880],{"class":107,"line":1638},[105,66873,51326],{"class":115},[105,66875,62],{"class":51285},[105,66877,54027],{"class":115},[105,66879,62],{"class":51285},[105,66881,51292],{"class":115},[105,66883,66884,66886,66888,66891,66893],{"class":107,"line":1644},[105,66885,51326],{"class":115},[105,66887,14],{"class":51285},[105,66889,66890],{"class":115},">我不需要变色\u003C\u002F",[105,66892,14],{"class":51285},[105,66894,51292],{"class":115},[105,66896,66897,66899,66901],{"class":107,"line":1665},[105,66898,52402],{"class":115},[105,66900,1123],{"class":51285},[105,66902,51292],{"class":115},[105,66904,66905,66907,66909],{"class":107,"line":1670},[105,66906,52129],{"class":115},[105,66908,51798],{"class":51285},[105,66910,51292],{"class":115},[105,66912,66913],{"class":107,"line":1684},[105,66914,66915],{"class":174},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[105,66917,66918,66920,66922,66924,66926,66928,66930,66933],{"class":107,"line":1689},[105,66919,11213],{"class":111},[105,66921,61277],{"class":164},[105,66923,13556],{"class":111},[105,66925,54381],{"class":115},[105,66927,54384],{"class":1954},[105,66929,116],{"class":115},[105,66931,66932],{"class":220},"'ul'",[105,66934,122],{"class":115},[105,66936,66937,66940,66942,66944,66946,66948,66950,66952,66954],{"class":107,"line":1718},[105,66938,66939],{"class":115},"    ul.",[105,66941,57798],{"class":1954},[105,66943,116],{"class":115},[105,66945,57803],{"class":220},[105,66947,12427],{"class":115},[105,66949,54434],{"class":111},[105,66951,1649],{"class":115},[105,66953,190],{"class":5208},[105,66955,12434],{"class":115},[105,66957,66958],{"class":107,"line":1723},[105,66959,66960],{"class":174},"      \u002F\u002F alert(1)\n",[105,66962,66963],{"class":107,"line":1740},[105,66964,66965],{"class":174},"      \u002F\u002F e.target就是我们点击的对象\n",[105,66967,66968],{"class":107,"line":1745},[105,66969,66970],{"class":174},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[105,66972,66973],{"class":107,"line":1750},[105,66974,66975],{"class":174},"      \u002F\u002F e.target.style.color = 'red'\n",[105,66977,66978,66980,66982],{"class":107,"line":1755},[105,66979,58229],{"class":115},[105,66981,58232],{"class":1954},[105,66983,66984],{"class":115},"(e)\n",[105,66986,66987],{"class":107,"line":1769},[105,66988,2391],{"emptyLinePlaceholder":32},[105,66990,66991,66993,66996],{"class":107,"line":1774},[105,66992,58229],{"class":115},[105,66994,66995],{"class":1954},"dir",[105,66997,66998],{"class":115},"(e.target)\n",[105,67000,67001],{"class":107,"line":2568},[105,67002,2391],{"emptyLinePlaceholder":32},[105,67004,67005],{"class":107,"line":2582},[105,67006,67007],{"class":174},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[105,67009,67010],{"class":107,"line":2590},[105,67011,67012],{"class":174},"      \u002F\u002F 通过tagName来进行判断\n",[105,67014,67015,67017,67020,67022,67025],{"class":107,"line":2595},[105,67016,54465],{"class":111},[105,67018,67019],{"class":115}," (e.target.tagName ",[105,67021,54471],{"class":111},[105,67023,67024],{"class":220}," 'LI'",[105,67026,12434],{"class":115},[105,67028,67029,67032,67034],{"class":107,"line":2601},[105,67030,67031],{"class":115},"        e.target.style.color ",[105,67033,161],{"class":111},[105,67035,67036],{"class":220}," 'red'\n",[105,67038,67039],{"class":107,"line":2607},[105,67040,52383],{"class":115},[105,67042,67043],{"class":107,"line":2612},[105,67044,33446],{"class":115},[105,67046,67047,67049,67051],{"class":107,"line":7940},[105,67048,52402],{"class":115},[105,67050,51798],{"class":51285},[105,67052,51292],{"class":115},[105,67054,67055,67057,67059],{"class":107,"line":7964},[105,67056,51770],{"class":115},[105,67058,51785],{"class":51285},[105,67060,51292],{"class":115},[105,67062,67063],{"class":107,"line":7969},[105,67064,2391],{"emptyLinePlaceholder":32},[105,67066,67067,67069,67071],{"class":107,"line":7975},[105,67068,51770],{"class":115},[105,67070,50620],{"class":51285},[105,67072,51292],{"class":115},[14,67074,67075],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67077,67078],{},"if(e.target.ragName==='P') {}",[14,67080,67081],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67083,67084],{},"通过事件委托的方式实现tab栏切换改造：",[14,67086,67087],{},"一定要记住自定义属性！！！！！！",[14,67089,67090],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67092,67093],{},"id是自定义的属性名",[14,67095,67096],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[96,67098,67100],{"className":50618,"code":67099,"language":50620,"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",[102,67101,67102,67112,67126,67130,67138,67152,67172,67192,67204,67212,67218,67228,67238,67242,67246,67252,67264,67276,67288,67304,67308,67312,67318,67330,67342,67354,67364,67374,67378,67382,67390,67402,67412,67424,67428,67432,67440,67450,67460,67470,67474,67478,67488,67502,67514,67518,67522,67534,67544,67560,67570,67574,67578,67592,67602,67612,67616,67620,67626,67640,67644,67648,67656,67666,67670,67674,67683,67693,67697,67705,67713,67717,67725,67739,67753,67765,67773,67812,67844,67876,67908,67940,67948,67956,67970,68004,68038,68072,68106,68140,68148,68156,68164,68169,68174,68193,68198,68218,68226,68231,68244,68265,68278,68282,68287,68292,68305,68325,68353,68357,68361,68365,68373,68381,68385],{"__ignoreMap":22},[105,67103,67104,67106,67108,67110],{"class":107,"line":108},[105,67105,51282],{"class":115},[105,67107,51286],{"class":51285},[105,67109,51289],{"class":1954},[105,67111,51292],{"class":115},[105,67113,67114,67116,67118,67120,67122,67124],{"class":107,"line":28},[105,67115,1026],{"class":115},[105,67117,50620],{"class":51285},[105,67119,51301],{"class":1954},[105,67121,161],{"class":115},[105,67123,51306],{"class":220},[105,67125,51292],{"class":115},[105,67127,67128],{"class":107,"line":1171},[105,67129,2391],{"emptyLinePlaceholder":32},[105,67131,67132,67134,67136],{"class":107,"line":1186},[105,67133,1026],{"class":115},[105,67135,51319],{"class":51285},[105,67137,51292],{"class":115},[105,67139,67140,67142,67144,67146,67148,67150],{"class":107,"line":1192},[105,67141,52129],{"class":115},[105,67143,51329],{"class":51285},[105,67145,51332],{"class":1954},[105,67147,161],{"class":115},[105,67149,51337],{"class":220},[105,67151,59112],{"class":115},[105,67153,67154,67156,67158,67160,67162,67164,67166,67168,67170],{"class":107,"line":1206},[105,67155,52129],{"class":115},[105,67157,51329],{"class":51285},[105,67159,51348],{"class":1954},[105,67161,161],{"class":115},[105,67163,51353],{"class":220},[105,67165,51356],{"class":1954},[105,67167,161],{"class":115},[105,67169,51361],{"class":220},[105,67171,59112],{"class":115},[105,67173,67174,67176,67178,67180,67182,67184,67186,67188,67190],{"class":107,"line":1212},[105,67175,52129],{"class":115},[105,67177,51329],{"class":51285},[105,67179,14912],{"class":1954},[105,67181,161],{"class":115},[105,67183,51376],{"class":220},[105,67185,51356],{"class":1954},[105,67187,161],{"class":115},[105,67189,51383],{"class":220},[105,67191,59112],{"class":115},[105,67193,67194,67196,67198,67200,67202],{"class":107,"line":1303},[105,67195,52129],{"class":115},[105,67197,51392],{"class":51285},[105,67199,63610],{"class":115},[105,67201,51392],{"class":51285},[105,67203,51292],{"class":115},[105,67205,67206,67208,67210],{"class":107,"line":1309},[105,67207,52129],{"class":115},[105,67209,5118],{"class":51285},[105,67211,51292],{"class":115},[105,67213,67214,67216],{"class":107,"line":1321},[105,67215,6395],{"class":51285},[105,67217,15564],{"class":115},[105,67219,67220,67222,67224,67226],{"class":107,"line":1603},[105,67221,54691],{"class":164},[105,67223,51422],{"class":115},[105,67225,307],{"class":164},[105,67227,1282],{"class":115},[105,67229,67230,67232,67234,67236],{"class":107,"line":1608},[105,67231,54680],{"class":164},[105,67233,51422],{"class":115},[105,67235,307],{"class":164},[105,67237,1282],{"class":115},[105,67239,67240],{"class":107,"line":1614},[105,67241,2178],{"class":115},[105,67243,67244],{"class":107,"line":1619},[105,67245,2391],{"emptyLinePlaceholder":32},[105,67247,67248,67250],{"class":107,"line":1633},[105,67249,63661],{"class":1954},[105,67251,15564],{"class":115},[105,67253,67254,67256,67258,67260,67262],{"class":107,"line":1638},[105,67255,54756],{"class":164},[105,67257,51422],{"class":115},[105,67259,63672],{"class":164},[105,67261,51477],{"class":111},[105,67263,1282],{"class":115},[105,67265,67266,67268,67270,67272,67274],{"class":107,"line":1644},[105,67267,54770],{"class":164},[105,67269,51422],{"class":115},[105,67271,63685],{"class":164},[105,67273,51477],{"class":111},[105,67275,1282],{"class":115},[105,67277,67278,67280,67282,67284,67286],{"class":107,"line":1665},[105,67279,54691],{"class":164},[105,67281,51422],{"class":115},[105,67283,816],{"class":164},[105,67285,51477],{"class":111},[105,67287,1282],{"class":115},[105,67289,67290,67292,67294,67296,67298,67300,67302],{"class":107,"line":1670},[105,67291,61962],{"class":164},[105,67293,51422],{"class":115},[105,67295,333],{"class":164},[105,67297,51477],{"class":111},[105,67299,51506],{"class":164},[105,67301,62229],{"class":164},[105,67303,1282],{"class":115},[105,67305,67306],{"class":107,"line":1684},[105,67307,2178],{"class":115},[105,67309,67310],{"class":107,"line":1689},[105,67311,2391],{"emptyLinePlaceholder":32},[105,67313,67314,67316],{"class":107,"line":1718},[105,67315,63730],{"class":1954},[105,67317,15564],{"class":115},[105,67319,67320,67322,67324,67326,67328],{"class":107,"line":1723},[105,67321,54756],{"class":164},[105,67323,51422],{"class":115},[105,67325,427],{"class":164},[105,67327,444],{"class":111},[105,67329,1282],{"class":115},[105,67331,67332,67334,67336,67338,67340],{"class":107,"line":1740},[105,67333,54770],{"class":164},[105,67335,51422],{"class":115},[105,67337,1023],{"class":164},[105,67339,51477],{"class":111},[105,67341,1282],{"class":115},[105,67343,67344,67346,67348,67350,67352],{"class":107,"line":1745},[105,67345,57344],{"class":164},[105,67347,51422],{"class":115},[105,67349,1023],{"class":164},[105,67351,51477],{"class":111},[105,67353,1282],{"class":115},[105,67355,67356,67358,67360,67362],{"class":107,"line":1750},[105,67357,54994],{"class":164},[105,67359,51422],{"class":115},[105,67361,51462],{"class":164},[105,67363,1282],{"class":115},[105,67365,67366,67368,67370,67372],{"class":107,"line":1755},[105,67367,55005],{"class":164},[105,67369,51422],{"class":115},[105,67371,51653],{"class":164},[105,67373,1282],{"class":115},[105,67375,67376],{"class":107,"line":1769},[105,67377,2178],{"class":115},[105,67379,67380],{"class":107,"line":1774},[105,67381,2391],{"emptyLinePlaceholder":32},[105,67383,67384,67386,67388],{"class":107,"line":2568},[105,67385,63730],{"class":1954},[105,67387,63803],{"class":51285},[105,67389,15564],{"class":115},[105,67391,67392,67394,67396,67398,67400],{"class":107,"line":2582},[105,67393,54907],{"class":164},[105,67395,51422],{"class":115},[105,67397,916],{"class":164},[105,67399,51477],{"class":111},[105,67401,1282],{"class":115},[105,67403,67404,67406,67408,67410],{"class":107,"line":2590},[105,67405,62319],{"class":164},[105,67407,51422],{"class":115},[105,67409,63826],{"class":164},[105,67411,1282],{"class":115},[105,67413,67414,67416,67418,67420,67422],{"class":107,"line":2595},[105,67415,61985],{"class":164},[105,67417,51422],{"class":115},[105,67419,816],{"class":164},[105,67421,51477],{"class":111},[105,67423,1282],{"class":115},[105,67425,67426],{"class":107,"line":2601},[105,67427,2178],{"class":115},[105,67429,67430],{"class":107,"line":2607},[105,67431,2391],{"emptyLinePlaceholder":32},[105,67433,67434,67436,67438],{"class":107,"line":2612},[105,67435,63730],{"class":1954},[105,67437,61277],{"class":51285},[105,67439,15564],{"class":115},[105,67441,67442,67444,67446,67448],{"class":107,"line":7940},[105,67443,54717],{"class":164},[105,67445,51422],{"class":115},[105,67447,54722],{"class":164},[105,67449,1282],{"class":115},[105,67451,67452,67454,67456,67458],{"class":107,"line":7964},[105,67453,54994],{"class":164},[105,67455,51422],{"class":115},[105,67457,51462],{"class":164},[105,67459,1282],{"class":115},[105,67461,67462,67464,67466,67468],{"class":107,"line":7969},[105,67463,55005],{"class":164},[105,67465,51422],{"class":115},[105,67467,51565],{"class":164},[105,67469,1282],{"class":115},[105,67471,67472],{"class":107,"line":7975},[105,67473,2178],{"class":115},[105,67475,67476],{"class":107,"line":8002},[105,67477,2391],{"emptyLinePlaceholder":32},[105,67479,67480,67482,67484,67486],{"class":107,"line":8007},[105,67481,63730],{"class":1954},[105,67483,61277],{"class":51285},[105,67485,55060],{"class":51285},[105,67487,15564],{"class":115},[105,67489,67490,67492,67494,67496,67498,67500],{"class":107,"line":8013},[105,67491,54691],{"class":164},[105,67493,51422],{"class":115},[105,67495,307],{"class":164},[105,67497,8942],{"class":164},[105,67499,51477],{"class":111},[105,67501,1282],{"class":115},[105,67503,67504,67506,67508,67510,67512],{"class":107,"line":8025},[105,67505,54907],{"class":164},[105,67507,51422],{"class":115},[105,67509,665],{"class":164},[105,67511,51477],{"class":111},[105,67513,1282],{"class":115},[105,67515,67516],{"class":107,"line":8037},[105,67517,2178],{"class":115},[105,67519,67520],{"class":107,"line":8049},[105,67521,2391],{"emptyLinePlaceholder":32},[105,67523,67524,67526,67528,67530,67532],{"class":107,"line":9708},[105,67525,63730],{"class":1954},[105,67527,61277],{"class":51285},[105,67529,55060],{"class":51285},[105,67531,1390],{"class":51285},[105,67533,15564],{"class":115},[105,67535,67536,67538,67540,67542],{"class":107,"line":9733},[105,67537,63955],{"class":164},[105,67539,51422],{"class":115},[105,67541,54722],{"class":164},[105,67543,1282],{"class":115},[105,67545,67546,67548,67550,67552,67554,67556,67558],{"class":107,"line":9756},[105,67547,62217],{"class":164},[105,67549,51422],{"class":115},[105,67551,193],{"class":164},[105,67553,51477],{"class":111},[105,67555,51506],{"class":164},[105,67557,63976],{"class":164},[105,67559,1282],{"class":115},[105,67561,67562,67564,67566,67568],{"class":107,"line":9780},[105,67563,57401],{"class":164},[105,67565,51422],{"class":115},[105,67567,62354],{"class":164},[105,67569,1282],{"class":115},[105,67571,67572],{"class":107,"line":9785},[105,67573,2178],{"class":115},[105,67575,67576],{"class":107,"line":9790},[105,67577,2391],{"emptyLinePlaceholder":32},[105,67579,67580,67582,67584,67586,67588,67590],{"class":107,"line":9795},[105,67581,63730],{"class":1954},[105,67583,61277],{"class":51285},[105,67585,55060],{"class":51285},[105,67587,1390],{"class":51285},[105,67589,64009],{"class":1954},[105,67591,15564],{"class":115},[105,67593,67594,67596,67598,67600],{"class":107,"line":9804},[105,67595,61776],{"class":164},[105,67597,51422],{"class":115},[105,67599,64020],{"class":164},[105,67601,1282],{"class":115},[105,67603,67604,67606,67608,67610],{"class":107,"line":9809},[105,67605,57401],{"class":164},[105,67607,51422],{"class":115},[105,67609,64020],{"class":164},[105,67611,1282],{"class":115},[105,67613,67614],{"class":107,"line":9815},[105,67615,2178],{"class":115},[105,67617,67618],{"class":107,"line":9836},[105,67619,2391],{"emptyLinePlaceholder":32},[105,67621,67622,67624],{"class":107,"line":9842},[105,67623,64045],{"class":1954},[105,67625,15564],{"class":115},[105,67627,67628,67630,67632,67634,67636,67638],{"class":107,"line":9856},[105,67629,54680],{"class":164},[105,67631,51422],{"class":115},[105,67633,307],{"class":164},[105,67635,64058],{"class":164},[105,67637,51477],{"class":111},[105,67639,1282],{"class":115},[105,67641,67642],{"class":107,"line":9862},[105,67643,2178],{"class":115},[105,67645,67646],{"class":107,"line":9889},[105,67647,2391],{"emptyLinePlaceholder":32},[105,67649,67650,67652,67654],{"class":107,"line":9898},[105,67651,64045],{"class":1954},[105,67653,62159],{"class":1954},[105,67655,15564],{"class":115},[105,67657,67658,67660,67662,67664],{"class":107,"line":9904},[105,67659,54994],{"class":164},[105,67661,51422],{"class":115},[105,67663,54722],{"class":164},[105,67665,1282],{"class":115},[105,67667,67668],{"class":107,"line":9912},[105,67669,2178],{"class":115},[105,67671,67672],{"class":107,"line":9917},[105,67673,2391],{"emptyLinePlaceholder":32},[105,67675,67676,67678,67681],{"class":107,"line":16596},[105,67677,64045],{"class":1954},[105,67679,67680],{"class":1954}," .active",[105,67682,15564],{"class":115},[105,67684,67685,67687,67689,67691],{"class":107,"line":16602},[105,67686,54994],{"class":164},[105,67688,51422],{"class":115},[105,67690,60854],{"class":164},[105,67692,1282],{"class":115},[105,67694,67695],{"class":107,"line":16625},[105,67696,2178],{"class":115},[105,67698,67699,67701,67703],{"class":107,"line":16631},[105,67700,52402],{"class":115},[105,67702,5118],{"class":51285},[105,67704,51292],{"class":115},[105,67706,67707,67709,67711],{"class":107,"line":16654},[105,67708,51770],{"class":115},[105,67710,51319],{"class":51285},[105,67712,51292],{"class":115},[105,67714,67715],{"class":107,"line":16668},[105,67716,2391],{"emptyLinePlaceholder":32},[105,67718,67719,67721,67723],{"class":107,"line":16688},[105,67720,1026],{"class":115},[105,67722,51785],{"class":51285},[105,67724,51292],{"class":115},[105,67726,67727,67729,67731,67733,67735,67737],{"class":107,"line":16694},[105,67728,52129],{"class":115},[105,67730,51596],{"class":51285},[105,67732,53471],{"class":1954},[105,67734,161],{"class":115},[105,67736,64160],{"class":220},[105,67738,51292],{"class":115},[105,67740,67741,67743,67745,67747,67749,67751],{"class":107,"line":16705},[105,67742,51326],{"class":115},[105,67744,51596],{"class":51285},[105,67746,53471],{"class":1954},[105,67748,161],{"class":115},[105,67750,64175],{"class":220},[105,67752,51292],{"class":115},[105,67754,67755,67757,67759,67761,67763],{"class":107,"line":16728},[105,67756,55219],{"class":115},[105,67758,76],{"class":51285},[105,67760,64186],{"class":115},[105,67762,76],{"class":51285},[105,67764,51292],{"class":115},[105,67766,67767,67769,67771],{"class":107,"line":16750},[105,67768,55219],{"class":115},[105,67770,1123],{"class":51285},[105,67772,51292],{"class":115},[105,67774,67775,67777,67779,67781,67783,67785,67787,67789,67791,67793,67795,67797,67799,67802,67804,67806,67808,67810],{"class":107,"line":16755},[105,67776,55287],{"class":115},[105,67778,62],{"class":51285},[105,67780,61037],{"class":115},[105,67782,354],{"class":51285},[105,67784,53471],{"class":1954},[105,67786,161],{"class":115},[105,67788,59691],{"class":220},[105,67790,61042],{"class":1954},[105,67792,161],{"class":115},[105,67794,64221],{"class":220},[105,67796,53936],{"class":1954},[105,67798,161],{"class":115},[105,67800,67801],{"class":220},"\"0\"",[105,67803,64224],{"class":115},[105,67805,354],{"class":51285},[105,67807,55299],{"class":115},[105,67809,62],{"class":51285},[105,67811,51292],{"class":115},[105,67813,67814,67816,67818,67820,67822,67824,67826,67828,67830,67832,67834,67836,67838,67840,67842],{"class":107,"line":16761},[105,67815,55287],{"class":115},[105,67817,62],{"class":51285},[105,67819,61037],{"class":115},[105,67821,354],{"class":51285},[105,67823,61042],{"class":1954},[105,67825,161],{"class":115},[105,67827,64221],{"class":220},[105,67829,53936],{"class":1954},[105,67831,161],{"class":115},[105,67833,3669],{"class":220},[105,67835,64251],{"class":115},[105,67837,354],{"class":51285},[105,67839,55299],{"class":115},[105,67841,62],{"class":51285},[105,67843,51292],{"class":115},[105,67845,67846,67848,67850,67852,67854,67856,67858,67860,67862,67864,67866,67868,67870,67872,67874],{"class":107,"line":16775},[105,67847,55287],{"class":115},[105,67849,62],{"class":51285},[105,67851,61037],{"class":115},[105,67853,354],{"class":51285},[105,67855,61042],{"class":1954},[105,67857,161],{"class":115},[105,67859,64221],{"class":220},[105,67861,53936],{"class":1954},[105,67863,161],{"class":115},[105,67865,3692],{"class":220},[105,67867,64278],{"class":115},[105,67869,354],{"class":51285},[105,67871,55299],{"class":115},[105,67873,62],{"class":51285},[105,67875,51292],{"class":115},[105,67877,67878,67880,67882,67884,67886,67888,67890,67892,67894,67896,67898,67900,67902,67904,67906],{"class":107,"line":16788},[105,67879,55287],{"class":115},[105,67881,62],{"class":51285},[105,67883,61037],{"class":115},[105,67885,354],{"class":51285},[105,67887,61042],{"class":1954},[105,67889,161],{"class":115},[105,67891,64221],{"class":220},[105,67893,53936],{"class":1954},[105,67895,161],{"class":115},[105,67897,3705],{"class":220},[105,67899,64305],{"class":115},[105,67901,354],{"class":51285},[105,67903,55299],{"class":115},[105,67905,62],{"class":51285},[105,67907,51292],{"class":115},[105,67909,67910,67912,67914,67916,67918,67920,67922,67924,67926,67928,67930,67932,67934,67936,67938],{"class":107,"line":16793},[105,67911,55287],{"class":115},[105,67913,62],{"class":51285},[105,67915,61037],{"class":115},[105,67917,354],{"class":51285},[105,67919,61042],{"class":1954},[105,67921,161],{"class":115},[105,67923,64221],{"class":220},[105,67925,53936],{"class":1954},[105,67927,161],{"class":115},[105,67929,3718],{"class":220},[105,67931,64332],{"class":115},[105,67933,354],{"class":51285},[105,67935,55299],{"class":115},[105,67937,62],{"class":51285},[105,67939,51292],{"class":115},[105,67941,67942,67944,67946],{"class":107,"line":16807},[105,67943,55392],{"class":115},[105,67945,1123],{"class":51285},[105,67947,51292],{"class":115},[105,67949,67950,67952,67954],{"class":107,"line":16812},[105,67951,51761],{"class":115},[105,67953,51596],{"class":51285},[105,67955,51292],{"class":115},[105,67957,67958,67960,67962,67964,67966,67968],{"class":107,"line":16818},[105,67959,51326],{"class":115},[105,67961,51596],{"class":51285},[105,67963,53471],{"class":1954},[105,67965,161],{"class":115},[105,67967,64369],{"class":220},[105,67969,51292],{"class":115},[105,67971,67972,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996,67998,68000,68002],{"class":107,"line":16823},[105,67973,55219],{"class":115},[105,67975,51596],{"class":51285},[105,67977,53471],{"class":1954},[105,67979,161],{"class":115},[105,67981,64384],{"class":220},[105,67983,61037],{"class":115},[105,67985,20],{"class":51285},[105,67987,55224],{"class":1954},[105,67989,161],{"class":115},[105,67991,64395],{"class":220},[105,67993,55232],{"class":1954},[105,67995,161],{"class":115},[105,67997,7644],{"class":220},[105,67999,64404],{"class":115},[105,68001,51596],{"class":51285},[105,68003,51292],{"class":115},[105,68005,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028,68030,68032,68034,68036],{"class":107,"line":16837},[105,68007,55219],{"class":115},[105,68009,51596],{"class":51285},[105,68011,53471],{"class":1954},[105,68013,161],{"class":115},[105,68015,62608],{"class":220},[105,68017,61037],{"class":115},[105,68019,20],{"class":51285},[105,68021,55224],{"class":1954},[105,68023,161],{"class":115},[105,68025,64431],{"class":220},[105,68027,55232],{"class":1954},[105,68029,161],{"class":115},[105,68031,7644],{"class":220},[105,68033,64404],{"class":115},[105,68035,51596],{"class":51285},[105,68037,51292],{"class":115},[105,68039,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062,68064,68066,68068,68070],{"class":107,"line":16842},[105,68041,55219],{"class":115},[105,68043,51596],{"class":51285},[105,68045,53471],{"class":1954},[105,68047,161],{"class":115},[105,68049,62608],{"class":220},[105,68051,61037],{"class":115},[105,68053,20],{"class":51285},[105,68055,55224],{"class":1954},[105,68057,161],{"class":115},[105,68059,64466],{"class":220},[105,68061,55232],{"class":1954},[105,68063,161],{"class":115},[105,68065,7644],{"class":220},[105,68067,64404],{"class":115},[105,68069,51596],{"class":51285},[105,68071,51292],{"class":115},[105,68073,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096,68098,68100,68102,68104],{"class":107,"line":16847},[105,68075,55219],{"class":115},[105,68077,51596],{"class":51285},[105,68079,53471],{"class":1954},[105,68081,161],{"class":115},[105,68083,62608],{"class":220},[105,68085,61037],{"class":115},[105,68087,20],{"class":51285},[105,68089,55224],{"class":1954},[105,68091,161],{"class":115},[105,68093,64501],{"class":220},[105,68095,55232],{"class":1954},[105,68097,161],{"class":115},[105,68099,7644],{"class":220},[105,68101,64404],{"class":115},[105,68103,51596],{"class":51285},[105,68105,51292],{"class":115},[105,68107,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130,68132,68134,68136,68138],{"class":107,"line":16861},[105,68109,55219],{"class":115},[105,68111,51596],{"class":51285},[105,68113,53471],{"class":1954},[105,68115,161],{"class":115},[105,68117,62608],{"class":220},[105,68119,61037],{"class":115},[105,68121,20],{"class":51285},[105,68123,55224],{"class":1954},[105,68125,161],{"class":115},[105,68127,64536],{"class":220},[105,68129,55232],{"class":1954},[105,68131,161],{"class":115},[105,68133,7644],{"class":220},[105,68135,64404],{"class":115},[105,68137,51596],{"class":51285},[105,68139,51292],{"class":115},[105,68141,68142,68144,68146],{"class":107,"line":16873},[105,68143,51761],{"class":115},[105,68145,51596],{"class":51285},[105,68147,51292],{"class":115},[105,68149,68150,68152,68154],{"class":107,"line":16878},[105,68151,52402],{"class":115},[105,68153,51596],{"class":51285},[105,68155,51292],{"class":115},[105,68157,68158,68160,68162],{"class":107,"line":16891},[105,68159,52129],{"class":115},[105,68161,51798],{"class":51285},[105,68163,51292],{"class":115},[105,68165,68166],{"class":107,"line":16896},[105,68167,68168],{"class":174},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[105,68170,68171],{"class":107,"line":16901},[105,68172,68173],{"class":174},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[105,68175,68176,68178,68180,68182,68184,68186,68188,68191],{"class":107,"line":16906},[105,68177,11213],{"class":111},[105,68179,61277],{"class":164},[105,68181,13556],{"class":111},[105,68183,54381],{"class":115},[105,68185,54384],{"class":1954},[105,68187,116],{"class":115},[105,68189,68190],{"class":220},"'.tab-nav ul'",[105,68192,122],{"class":115},[105,68194,68195],{"class":107,"line":16919},[105,68196,68197],{"class":174},"    \u002F\u002F 2.添加事件\n",[105,68199,68200,68202,68204,68206,68208,68210,68212,68214,68216],{"class":107,"line":16924},[105,68201,66939],{"class":115},[105,68203,57798],{"class":1954},[105,68205,116],{"class":115},[105,68207,57803],{"class":220},[105,68209,12427],{"class":115},[105,68211,54434],{"class":111},[105,68213,1649],{"class":115},[105,68215,190],{"class":5208},[105,68217,12434],{"class":115},[105,68219,68220,68222,68224],{"class":107,"line":32618},[105,68221,58229],{"class":115},[105,68223,66995],{"class":1954},[105,68225,66998],{"class":115},[105,68227,68228],{"class":107,"line":32624},[105,68229,68230],{"class":174},"      \u002F\u002Fe.targer是我们点击的对象\n",[105,68232,68233,68235,68237,68239,68242],{"class":107,"line":32630},[105,68234,54465],{"class":111},[105,68236,67019],{"class":115},[105,68238,54471],{"class":111},[105,68240,68241],{"class":220}," 'A'",[105,68243,12434],{"class":115},[105,68245,68246,68248,68250,68252,68255,68257,68259,68261,68263],{"class":107,"line":32636},[105,68247,51910],{"class":115},[105,68249,54384],{"class":1954},[105,68251,116],{"class":115},[105,68253,68254],{"class":220},"'.active'",[105,68256,56988],{"class":115},[105,68258,56991],{"class":1954},[105,68260,116],{"class":115},[105,68262,64699],{"class":220},[105,68264,122],{"class":115},[105,68266,68267,68270,68272,68274,68276],{"class":107,"line":32642},[105,68268,68269],{"class":115},"        e.target.classList.",[105,68271,5326],{"class":1954},[105,68273,116],{"class":115},[105,68275,64699],{"class":220},[105,68277,122],{"class":115},[105,68279,68280],{"class":107,"line":32653},[105,68281,2391],{"emptyLinePlaceholder":32},[105,68283,68284],{"class":107,"line":32659},[105,68285,68286],{"class":174},"        \u002F\u002F 下面大盒子模块\n",[105,68288,68289],{"class":107,"line":32679},[105,68290,68291],{"class":174},"        \u002F\u002F console.log(e.target.dataset.id)\n",[105,68293,68294,68296,68298,68300,68302],{"class":107,"line":32685},[105,68295,61255],{"class":111},[105,68297,3023],{"class":164},[105,68299,13556],{"class":111},[105,68301,45551],{"class":111},[105,68303,68304],{"class":115},"e.target.dataset.id\n",[105,68306,68307,68309,68311,68313,68315,68317,68319,68321,68323],{"class":107,"line":32696},[105,68308,51910],{"class":115},[105,68310,54384],{"class":1954},[105,68312,116],{"class":115},[105,68314,64747],{"class":220},[105,68316,56988],{"class":115},[105,68318,56991],{"class":1954},[105,68320,116],{"class":115},[105,68322,64699],{"class":220},[105,68324,122],{"class":115},[105,68326,68327,68329,68331,68333,68335,68337,68339,68341,68343,68345,68347,68349,68351],{"class":107,"line":32702},[105,68328,51910],{"class":115},[105,68330,54384],{"class":1954},[105,68332,116],{"class":115},[105,68334,64773],{"class":220},[105,68336,557],{"class":115},[105,68338,45551],{"class":111},[105,68340,25103],{"class":164},[105,68342,57017],{"class":220},[105,68344,56988],{"class":115},[105,68346,5326],{"class":1954},[105,68348,116],{"class":115},[105,68350,64699],{"class":220},[105,68352,122],{"class":115},[105,68354,68355],{"class":107,"line":32708},[105,68356,2391],{"emptyLinePlaceholder":32},[105,68358,68359],{"class":107,"line":32714},[105,68360,52383],{"class":115},[105,68362,68363],{"class":107,"line":32720},[105,68364,33446],{"class":115},[105,68366,68367,68369,68371],{"class":107,"line":32726},[105,68368,52402],{"class":115},[105,68370,51798],{"class":51285},[105,68372,51292],{"class":115},[105,68374,68375,68377,68379],{"class":107,"line":32732},[105,68376,51770],{"class":115},[105,68378,51785],{"class":51285},[105,68380,51292],{"class":115},[105,68382,68383],{"class":107,"line":32738},[105,68384,2391],{"emptyLinePlaceholder":32},[105,68386,68387,68389,68391],{"class":107,"line":32758},[105,68388,51770],{"class":115},[105,68390,50620],{"class":51285},[105,68392,51292],{"class":115},[76,68394,68396],{"id":68395},"_333-页面加载事件","3.3.3 页面加载事件",[59,68398,68399],{},[62,68400,68401],{},"load",[14,68403,68404],{},[20,68405],{"alt":22,"src":68406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68408,68409],{},"window代表整个窗口，比document还要大",[14,68411,68412],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68414,68415],{},"img.addEventListener('load', function () {",[14,68417,68418],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68420,52449],{},[59,68422,68423],{"start":28},[62,68424,68425],{},"DOMContentLoaded",[14,68427,68428],{},[20,68429],{"alt":22,"src":68430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68432,68433],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[76,68435,68437],{"id":68436},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68439,68440],{},[20,68441],{"alt":22,"src":68442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68444,68445],{},[20,68446],{"alt":22,"src":68447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68449,68450],{},[20,68451],{"alt":22,"src":68452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68454,68455],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68457,68458],{},"获得的是数字型数据，不带单位",[14,68460,68461],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68463,68464],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68466,68467],{},"它是通过document.documentElement来获取",[14,68469,68470],{},[20,68471],{"alt":22,"src":68472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68474,68475],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[76,68477,68479],{"id":68478},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68481,68482],{},[20,68483],{"alt":22,"src":68484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68486,68487],{},[20,68488],{"alt":22,"src":68489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[76,68491,68493],{"id":68492},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68495,68496],{},[20,68497],{"alt":22,"src":68498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68500,68501],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68503,68504],{},[20,68505],{"alt":22,"src":68506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68508,68509],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68511,68512],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68514,68515],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68517,68518],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68520,68521],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68523,68524],{},[20,68525],{"alt":22,"src":68526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68528,68529],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68531,68532],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68534,68535],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68537,68538],{},"e.pageX-box.getBoundingClientRect()",[76,68540,68542],{"id":68541},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68544,68545],{},[20,68546],{"alt":22,"src":68547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68549,68550],{},"这个是相对于视口来说的，它是个方法，不是属性值",[76,68552,68554],{"id":68553},"_338-总结","3.3.8 总结",[14,68556,68557],{},[20,68558],{"alt":22,"src":68559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68561,68562],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68564,68565],{},"修改盒子的宽高只能通过width和height来实现",[76,68567,68569],{"id":68568},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[96,68571,68573],{"className":50618,"code":68572,"language":50620,"meta":22,"style":22},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[102,68574,68575,68580,68585,68590,68595],{"__ignoreMap":22},[105,68576,68577],{"class":107,"line":108},[105,68578,68579],{"class":115},"\u002F* 页面滑动 *\u002F\n",[105,68581,68582],{"class":107,"line":28},[105,68583,68584],{"class":115},"html {\n",[105,68586,68587],{"class":107,"line":1171},[105,68588,68589],{"class":115},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[105,68591,68592],{"class":107,"line":1186},[105,68593,68594],{"class":115},"  scroll-behavior: smooth;\n",[105,68596,68597],{"class":107,"line":1192},[105,68598,1556],{"class":115},[14,68600,68601],{},"默认是auto",[76,68603,68605],{"id":68604},"_3310-日期对象","3.3.10 日期对象",[21990,68607,68609],{"id":68608},"_33101-实例化","3.3.10.1 实例化",[14,68611,68612],{},[20,68613],{"alt":22,"src":68614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21990,68616,68618],{"id":68617},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68620,68621],{},[20,68622],{"alt":22,"src":68623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68625,68626],{},"月份+1",[14,68628,68629],{},"老外认为第一天为0，星期天",[14,68631,68632],{},"方法使用的时候必须要跟括号",[14,68634,68635],{},"快速获得日期",[14,68637,68638],{},"\u002F\u002F 得到年月日",[14,68640,68641],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68643,68644],{},"\u002F\u002F 得到当地日期",[14,68646,68647],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68649,68650],{},"\u002F\u002F 得到当地时间",[14,68652,68653],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68655,68656],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68658,68659],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51798,68661,68662],{},"\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,68664,68665],{},"学会去封装函数！",[21990,68667,68669],{"id":68668},"_33103-时间戳","3.3.10.3 时间戳",[14,68671,68672],{},[20,68673],{"alt":22,"src":68674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68676,68677],{},[20,68678],{"alt":22,"src":68679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68681,68682],{},"三种方法记住一个就可以",[76,68684,68686],{"id":68685},"_3311-节点操作","3.3.11 节点操作",[21990,68688,68690],{"id":68689},"_33111-dom节点","3.3.11.1 DOM节点",[14,68692,68693],{},[20,68694],{"alt":22,"src":68695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68697,68698],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21990,68700,68702],{"id":68701},"_33112-查找节点","3.3.11.2 查找节点",[14,68704,68705],{},"前边的document.querySelector()是获取的元素",[14,68707,68708],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68710,68711],{},[20,68712],{"alt":22,"src":68713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[59,68715,68716],{},[62,68717,68718],{},"父节点",[14,68720,68721],{},[20,68722],{"alt":22,"src":68723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[59,68725,68726],{"start":28},[62,68727,68728],{},"子节点",[14,68730,68731],{},[20,68732],{"alt":22,"src":68733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68735,68736],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68738,68739],{},"children获得的是伪数组，是亲儿子",[59,68741,68742],{"start":1171},[62,68743,68744],{},"兄弟节点",[14,68746,68747],{},[20,68748],{"alt":22,"src":68749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21990,68751,68753],{"id":68752},"_33113-增加节点","3.3.11.3 增加节点",[14,68755,68756],{},[20,68757],{"alt":22,"src":68758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68760,68761],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68763,68764],{},[20,68765],{"alt":22,"src":68766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68768,68769],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68771,68772],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68774,68775],{},"例：",[51798,68777,68778],{},"\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,68780,68781],{},[20,68782],{"alt":22,"src":68783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68785,68786],{},"false只克隆标签，里边的内容不会克隆过来",[96,68788,68790],{"className":50618,"code":68789,"language":50620,"meta":22,"style":22},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[102,68791,68792],{"__ignoreMap":22},[105,68793,68794],{"class":107,"line":108},[105,68795,68789],{"class":115},[21990,68797,68799],{"id":68798},"_33114-删除节点","3.3.11.4 删除节点",[14,68801,68802],{},[20,68803],{"alt":22,"src":68804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68806,68807],{},"父亲删儿子",[14,68809,68810],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[76,68812,68814],{"id":68813},"_3312-m端事件","3.3.12 M端事件",[14,68816,68817],{},"M端就是移动端",[14,68819,68820],{},[20,68821],{"alt":22,"src":68822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[76,68824,68826],{"id":68825},"_3313-插件","3.3.13 插件",[14,68828,68829],{},"要熟悉官网！！！",[14,68831,68832],{},[354,68833,68834],{"href":68834,"rel":68835},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23858],[14,68837,68838],{},[354,68839,68840],{"href":68840,"rel":68841},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23858],[76,68843,68845],{"id":68844},"_3314-学生信息表","3.3.14 学生信息表",[59,68847,68848,68851,68854,68857,68860,68863,68866,68869],{},[62,68849,68850],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[62,68852,68853],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[62,68855,68856],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[62,68858,68859],{},"用好表单元素自带的属性，value,name等",[62,68861,68862],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[62,68864,68865],{},"不要忘记事件对象",[62,68867,68868],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[62,68870,68871],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68873,68874],{},"结构：",[96,68876,68878],{"className":50618,"code":68877,"language":50620,"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",[102,68879,68880,68890,68904,68908,68916,68930,68950,68971,68984,69008,69016,69020,69028,69041,69062,69090,69118,69123,69145,69165,69184,69192,69220,69242,69262,69282,69302,69322,69342,69350,69370,69378,69382,69395,69403,69411,69419,69432,69445,69458,69471,69484,69497,69510,69518,69526,69534,69539,69544,69549,69554,69559,69564,69569,69574,69579,69584,69589,69594,69599,69607,69615,69623,69627,69647,69666,69686,69706,69726,69746,69750,69755,69775,69780,69790,69795,69800,69820,69842,69847,69857,69861,69865,69870,69875,69904,69918,69933,69937,69941,69945,69950,69961,69974,69979,69984,69989,69994,69999,70003,70008,70013,70022,70027,70032,70044,70049,70056,70060,70065,70075,70080,70090,70095,70123,70144,70154,70174,70192,70209,70226,70243,70260,70264,70274,70279,70284,70289,70300,70304,70308,70312,70317,70322,70343,70355,70360,70365,70370,70384,70389,70396,70400,70404,70412,70416,70424,70428],{"__ignoreMap":22},[105,68881,68882,68884,68886,68888],{"class":107,"line":108},[105,68883,51282],{"class":115},[105,68885,51286],{"class":51285},[105,68887,51289],{"class":1954},[105,68889,51292],{"class":115},[105,68891,68892,68894,68896,68898,68900,68902],{"class":107,"line":28},[105,68893,1026],{"class":115},[105,68895,50620],{"class":51285},[105,68897,51301],{"class":1954},[105,68899,161],{"class":115},[105,68901,51306],{"class":220},[105,68903,51292],{"class":115},[105,68905,68906],{"class":107,"line":1171},[105,68907,2391],{"emptyLinePlaceholder":32},[105,68909,68910,68912,68914],{"class":107,"line":1186},[105,68911,1026],{"class":115},[105,68913,51319],{"class":51285},[105,68915,51292],{"class":115},[105,68917,68918,68920,68922,68924,68926,68928],{"class":107,"line":1192},[105,68919,52129],{"class":115},[105,68921,51329],{"class":51285},[105,68923,51332],{"class":1954},[105,68925,161],{"class":115},[105,68927,51337],{"class":220},[105,68929,59112],{"class":115},[105,68931,68932,68934,68936,68938,68940,68942,68944,68946,68948],{"class":107,"line":1206},[105,68933,52129],{"class":115},[105,68935,51329],{"class":51285},[105,68937,14912],{"class":1954},[105,68939,161],{"class":115},[105,68941,51376],{"class":220},[105,68943,51356],{"class":1954},[105,68945,161],{"class":115},[105,68947,51383],{"class":220},[105,68949,59112],{"class":115},[105,68951,68952,68954,68956,68958,68960,68962,68964,68966,68969],{"class":107,"line":1212},[105,68953,52129],{"class":115},[105,68955,51329],{"class":51285},[105,68957,51348],{"class":1954},[105,68959,161],{"class":115},[105,68961,51353],{"class":220},[105,68963,51356],{"class":1954},[105,68965,161],{"class":115},[105,68967,68968],{"class":220},"\"ie=edge\"",[105,68970,59112],{"class":115},[105,68972,68973,68975,68977,68980,68982],{"class":107,"line":1303},[105,68974,52129],{"class":115},[105,68976,51392],{"class":51285},[105,68978,68979],{"class":115},">学生信息管理\u003C\u002F",[105,68981,51392],{"class":51285},[105,68983,51292],{"class":115},[105,68985,68986,68988,68991,68994,68996,68999,69001,69003,69006],{"class":107,"line":1309},[105,68987,52129],{"class":115},[105,68989,68990],{"class":51285},"link",[105,68992,68993],{"class":1954}," rel",[105,68995,161],{"class":115},[105,68997,68998],{"class":220},"\"stylesheet\"",[105,69000,61042],{"class":1954},[105,69002,161],{"class":115},[105,69004,69005],{"class":220},"\"css\u002Findex.css\"",[105,69007,59112],{"class":115},[105,69009,69010,69012,69014],{"class":107,"line":1321},[105,69011,51770],{"class":115},[105,69013,51319],{"class":51285},[105,69015,51292],{"class":115},[105,69017,69018],{"class":107,"line":1603},[105,69019,2391],{"emptyLinePlaceholder":32},[105,69021,69022,69024,69026],{"class":107,"line":1608},[105,69023,1026],{"class":115},[105,69025,51785],{"class":51285},[105,69027,51292],{"class":115},[105,69029,69030,69032,69034,69037,69039],{"class":107,"line":1614},[105,69031,52129],{"class":115},[105,69033,10],{"class":51285},[105,69035,69036],{"class":115},">新增学员\u003C\u002F",[105,69038,10],{"class":51285},[105,69040,51292],{"class":115},[105,69042,69043,69045,69047,69049,69051,69053,69056,69058,69060],{"class":107,"line":1619},[105,69044,52129],{"class":115},[105,69046,66610],{"class":51285},[105,69048,53471],{"class":1954},[105,69050,161],{"class":115},[105,69052,62649],{"class":220},[105,69054,69055],{"class":1954}," autocomplete",[105,69057,161],{"class":115},[105,69059,31761],{"class":220},[105,69061,51292],{"class":115},[105,69063,69064,69067,69069,69071,69073,69075,69077,69079,69082,69084,69086,69088],{"class":107,"line":1633},[105,69065,69066],{"class":115},"    姓名：\u003C",[105,69068,53806],{"class":51285},[105,69070,53809],{"class":1954},[105,69072,161],{"class":115},[105,69074,62684],{"class":220},[105,69076,53471],{"class":1954},[105,69078,161],{"class":115},[105,69080,69081],{"class":220},"\"uname\"",[105,69083,14912],{"class":1954},[105,69085,161],{"class":115},[105,69087,69081],{"class":220},[105,69089,59112],{"class":115},[105,69091,69092,69095,69097,69099,69101,69103,69105,69107,69110,69112,69114,69116],{"class":107,"line":1638},[105,69093,69094],{"class":115},"    年龄：\u003C",[105,69096,53806],{"class":51285},[105,69098,53809],{"class":1954},[105,69100,161],{"class":115},[105,69102,62684],{"class":220},[105,69104,53471],{"class":1954},[105,69106,161],{"class":115},[105,69108,69109],{"class":220},"\"age\"",[105,69111,14912],{"class":1954},[105,69113,161],{"class":115},[105,69115,69109],{"class":220},[105,69117,59112],{"class":115},[105,69119,69120],{"class":107,"line":1644},[105,69121,69122],{"class":115},"    性别:\n",[105,69124,69125,69127,69130,69132,69134,69137,69139,69141,69143],{"class":107,"line":1665},[105,69126,51326],{"class":115},[105,69128,69129],{"class":51285},"select",[105,69131,14912],{"class":1954},[105,69133,161],{"class":115},[105,69135,69136],{"class":220},"\"gender\"",[105,69138,53471],{"class":1954},[105,69140,161],{"class":115},[105,69142,69136],{"class":220},[105,69144,51292],{"class":115},[105,69146,69147,69149,69152,69154,69156,69158,69161,69163],{"class":107,"line":1670},[105,69148,55219],{"class":115},[105,69150,69151],{"class":51285},"option",[105,69153,66636],{"class":1954},[105,69155,161],{"class":115},[105,69157,9953],{"class":220},[105,69159,69160],{"class":115},">男\u003C\u002F",[105,69162,69151],{"class":51285},[105,69164,51292],{"class":115},[105,69166,69167,69169,69171,69173,69175,69177,69180,69182],{"class":107,"line":1684},[105,69168,55219],{"class":115},[105,69170,69151],{"class":51285},[105,69172,66636],{"class":1954},[105,69174,161],{"class":115},[105,69176,10022],{"class":220},[105,69178,69179],{"class":115},">女\u003C\u002F",[105,69181,69151],{"class":51285},[105,69183,51292],{"class":115},[105,69185,69186,69188,69190],{"class":107,"line":1689},[105,69187,51761],{"class":115},[105,69189,69129],{"class":51285},[105,69191,51292],{"class":115},[105,69193,69194,69197,69199,69201,69203,69205,69207,69209,69212,69214,69216,69218],{"class":107,"line":1718},[105,69195,69196],{"class":115},"    薪资：\u003C",[105,69198,53806],{"class":51285},[105,69200,53809],{"class":1954},[105,69202,161],{"class":115},[105,69204,62684],{"class":220},[105,69206,53471],{"class":1954},[105,69208,161],{"class":115},[105,69210,69211],{"class":220},"\"salary\"",[105,69213,14912],{"class":1954},[105,69215,161],{"class":115},[105,69217,69211],{"class":220},[105,69219,59112],{"class":115},[105,69221,69222,69225,69227,69229,69231,69234,69236,69238,69240],{"class":107,"line":1723},[105,69223,69224],{"class":115},"    就业城市：\u003C",[105,69226,69129],{"class":51285},[105,69228,14912],{"class":1954},[105,69230,161],{"class":115},[105,69232,69233],{"class":220},"\"city\"",[105,69235,53471],{"class":1954},[105,69237,161],{"class":115},[105,69239,69233],{"class":220},[105,69241,51292],{"class":115},[105,69243,69244,69246,69248,69250,69252,69255,69258,69260],{"class":107,"line":1740},[105,69245,55219],{"class":115},[105,69247,69151],{"class":51285},[105,69249,66636],{"class":1954},[105,69251,161],{"class":115},[105,69253,69254],{"class":220},"\"北京\"",[105,69256,69257],{"class":115},">北京\u003C\u002F",[105,69259,69151],{"class":51285},[105,69261,51292],{"class":115},[105,69263,69264,69266,69268,69270,69272,69275,69278,69280],{"class":107,"line":1745},[105,69265,55219],{"class":115},[105,69267,69151],{"class":51285},[105,69269,66636],{"class":1954},[105,69271,161],{"class":115},[105,69273,69274],{"class":220},"\"上海\"",[105,69276,69277],{"class":115},">上海\u003C\u002F",[105,69279,69151],{"class":51285},[105,69281,51292],{"class":115},[105,69283,69284,69286,69288,69290,69292,69295,69298,69300],{"class":107,"line":1750},[105,69285,55219],{"class":115},[105,69287,69151],{"class":51285},[105,69289,66636],{"class":1954},[105,69291,161],{"class":115},[105,69293,69294],{"class":220},"\"广州\"",[105,69296,69297],{"class":115},">广州\u003C\u002F",[105,69299,69151],{"class":51285},[105,69301,51292],{"class":115},[105,69303,69304,69306,69308,69310,69312,69315,69318,69320],{"class":107,"line":1755},[105,69305,55219],{"class":115},[105,69307,69151],{"class":51285},[105,69309,66636],{"class":1954},[105,69311,161],{"class":115},[105,69313,69314],{"class":220},"\"深圳\"",[105,69316,69317],{"class":115},">深圳\u003C\u002F",[105,69319,69151],{"class":51285},[105,69321,51292],{"class":115},[105,69323,69324,69326,69328,69330,69332,69335,69338,69340],{"class":107,"line":1769},[105,69325,55219],{"class":115},[105,69327,69151],{"class":51285},[105,69329,66636],{"class":1954},[105,69331,161],{"class":115},[105,69333,69334],{"class":220},"\"曹县\"",[105,69336,69337],{"class":115},">曹县\u003C\u002F",[105,69339,69151],{"class":51285},[105,69341,51292],{"class":115},[105,69343,69344,69346,69348],{"class":107,"line":1774},[105,69345,51761],{"class":115},[105,69347,69129],{"class":51285},[105,69349,51292],{"class":115},[105,69351,69352,69354,69356,69358,69360,69363,69366,69368],{"class":107,"line":2568},[105,69353,51326],{"class":115},[105,69355,53872],{"class":51285},[105,69357,53471],{"class":1954},[105,69359,161],{"class":115},[105,69361,69362],{"class":220},"\"add\"",[105,69364,69365],{"class":115},">录入\u003C\u002F",[105,69367,53872],{"class":51285},[105,69369,51292],{"class":115},[105,69371,69372,69374,69376],{"class":107,"line":2582},[105,69373,52402],{"class":115},[105,69375,66610],{"class":51285},[105,69377,51292],{"class":115},[105,69379,69380],{"class":107,"line":2590},[105,69381,2391],{"emptyLinePlaceholder":32},[105,69383,69384,69386,69388,69391,69393],{"class":107,"line":2595},[105,69385,52129],{"class":115},[105,69387,10],{"class":51285},[105,69389,69390],{"class":115},">就业榜\u003C\u002F",[105,69392,10],{"class":51285},[105,69394,51292],{"class":115},[105,69396,69397,69399,69401],{"class":107,"line":2601},[105,69398,52129],{"class":115},[105,69400,253],{"class":51285},[105,69402,51292],{"class":115},[105,69404,69405,69407,69409],{"class":107,"line":2607},[105,69406,51326],{"class":115},[105,69408,256],{"class":51285},[105,69410,51292],{"class":115},[105,69412,69413,69415,69417],{"class":107,"line":2612},[105,69414,55219],{"class":115},[105,69416,259],{"class":51285},[105,69418,51292],{"class":115},[105,69420,69421,69423,69425,69428,69430],{"class":107,"line":7940},[105,69422,55287],{"class":115},[105,69424,262],{"class":51285},[105,69426,69427],{"class":115},">序号\u003C\u002F",[105,69429,262],{"class":51285},[105,69431,51292],{"class":115},[105,69433,69434,69436,69438,69441,69443],{"class":107,"line":7964},[105,69435,55287],{"class":115},[105,69437,262],{"class":51285},[105,69439,69440],{"class":115},">姓名\u003C\u002F",[105,69442,262],{"class":51285},[105,69444,51292],{"class":115},[105,69446,69447,69449,69451,69454,69456],{"class":107,"line":7969},[105,69448,55287],{"class":115},[105,69450,262],{"class":51285},[105,69452,69453],{"class":115},">年龄\u003C\u002F",[105,69455,262],{"class":51285},[105,69457,51292],{"class":115},[105,69459,69460,69462,69464,69467,69469],{"class":107,"line":7975},[105,69461,55287],{"class":115},[105,69463,262],{"class":51285},[105,69465,69466],{"class":115},">性别\u003C\u002F",[105,69468,262],{"class":51285},[105,69470,51292],{"class":115},[105,69472,69473,69475,69477,69480,69482],{"class":107,"line":8002},[105,69474,55287],{"class":115},[105,69476,262],{"class":51285},[105,69478,69479],{"class":115},">薪资\u003C\u002F",[105,69481,262],{"class":51285},[105,69483,51292],{"class":115},[105,69485,69486,69488,69490,69493,69495],{"class":107,"line":8007},[105,69487,55287],{"class":115},[105,69489,262],{"class":51285},[105,69491,69492],{"class":115},">就业城市\u003C\u002F",[105,69494,262],{"class":51285},[105,69496,51292],{"class":115},[105,69498,69499,69501,69503,69506,69508],{"class":107,"line":8013},[105,69500,55287],{"class":115},[105,69502,262],{"class":51285},[105,69504,69505],{"class":115},">操作\u003C\u002F",[105,69507,262],{"class":51285},[105,69509,51292],{"class":115},[105,69511,69512,69514,69516],{"class":107,"line":8025},[105,69513,55392],{"class":115},[105,69515,259],{"class":51285},[105,69517,51292],{"class":115},[105,69519,69520,69522,69524],{"class":107,"line":8037},[105,69521,51761],{"class":115},[105,69523,256],{"class":51285},[105,69525,51292],{"class":115},[105,69527,69528,69530,69532],{"class":107,"line":8049},[105,69529,51326],{"class":115},[105,69531,300],{"class":51285},[105,69533,51292],{"class":115},[105,69535,69536],{"class":107,"line":9708},[105,69537,69538],{"class":174},"      \u003C!-- \n",[105,69540,69541],{"class":107,"line":9733},[105,69542,69543],{"class":174},"        \u003Ctr>\n",[105,69545,69546],{"class":107,"line":9756},[105,69547,69548],{"class":174},"          \u003Ctd>1001\u003C\u002Ftd>\n",[105,69550,69551],{"class":107,"line":9780},[105,69552,69553],{"class":174},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[105,69555,69556],{"class":107,"line":9785},[105,69557,69558],{"class":174},"          \u003Ctd>19\u003C\u002Ftd>\n",[105,69560,69561],{"class":107,"line":9790},[105,69562,69563],{"class":174},"          \u003Ctd>男\u003C\u002Ftd>\n",[105,69565,69566],{"class":107,"line":9795},[105,69567,69568],{"class":174},"          \u003Ctd>15000\u003C\u002Ftd>\n",[105,69570,69571],{"class":107,"line":9804},[105,69572,69573],{"class":174},"          \u003Ctd>上海\u003C\u002Ftd>\n",[105,69575,69576],{"class":107,"line":9809},[105,69577,69578],{"class":174},"          \u003Ctd>\n",[105,69580,69581],{"class":107,"line":9815},[105,69582,69583],{"class":174},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[105,69585,69586],{"class":107,"line":9836},[105,69587,69588],{"class":174},"          \u003C\u002Ftd>\n",[105,69590,69591],{"class":107,"line":9842},[105,69592,69593],{"class":174},"        \u003C\u002Ftr> \n",[105,69595,69596],{"class":107,"line":9856},[105,69597,69598],{"class":174},"        -->\n",[105,69600,69601,69603,69605],{"class":107,"line":9862},[105,69602,51761],{"class":115},[105,69604,300],{"class":51285},[105,69606,51292],{"class":115},[105,69608,69609,69611,69613],{"class":107,"line":9889},[105,69610,52402],{"class":115},[105,69612,253],{"class":51285},[105,69614,51292],{"class":115},[105,69616,69617,69619,69621],{"class":107,"line":9898},[105,69618,52129],{"class":115},[105,69620,51798],{"class":51285},[105,69622,51292],{"class":115},[105,69624,69625],{"class":107,"line":9904},[105,69626,59943],{"class":174},[105,69628,69629,69631,69634,69636,69638,69640,69642,69645],{"class":107,"line":9912},[105,69630,11213],{"class":111},[105,69632,69633],{"class":164}," uname",[105,69635,13556],{"class":111},[105,69637,54381],{"class":115},[105,69639,54384],{"class":1954},[105,69641,116],{"class":115},[105,69643,69644],{"class":220},"'.uname'",[105,69646,122],{"class":115},[105,69648,69649,69651,69653,69655,69657,69659,69661,69664],{"class":107,"line":9917},[105,69650,11213],{"class":111},[105,69652,15681],{"class":164},[105,69654,13556],{"class":111},[105,69656,54381],{"class":115},[105,69658,54384],{"class":1954},[105,69660,116],{"class":115},[105,69662,69663],{"class":220},"'.age'",[105,69665,122],{"class":115},[105,69667,69668,69670,69673,69675,69677,69679,69681,69684],{"class":107,"line":16596},[105,69669,11213],{"class":111},[105,69671,69672],{"class":164}," gender",[105,69674,13556],{"class":111},[105,69676,54381],{"class":115},[105,69678,54384],{"class":1954},[105,69680,116],{"class":115},[105,69682,69683],{"class":220},"'.gender'",[105,69685,122],{"class":115},[105,69687,69688,69690,69693,69695,69697,69699,69701,69704],{"class":107,"line":16602},[105,69689,11213],{"class":111},[105,69691,69692],{"class":164}," salary",[105,69694,13556],{"class":111},[105,69696,54381],{"class":115},[105,69698,54384],{"class":1954},[105,69700,116],{"class":115},[105,69702,69703],{"class":220},"'.salary'",[105,69705,122],{"class":115},[105,69707,69708,69710,69713,69715,69717,69719,69721,69724],{"class":107,"line":16625},[105,69709,11213],{"class":111},[105,69711,69712],{"class":164}," city",[105,69714,13556],{"class":111},[105,69716,54381],{"class":115},[105,69718,54384],{"class":1954},[105,69720,116],{"class":115},[105,69722,69723],{"class":220},"'.city'",[105,69725,122],{"class":115},[105,69727,69728,69730,69733,69735,69737,69739,69741,69744],{"class":107,"line":16631},[105,69729,11213],{"class":111},[105,69731,69732],{"class":164}," tbody",[105,69734,13556],{"class":111},[105,69736,54381],{"class":115},[105,69738,54384],{"class":1954},[105,69740,116],{"class":115},[105,69742,69743],{"class":220},"'tbody'",[105,69745,122],{"class":115},[105,69747,69748],{"class":107,"line":16654},[105,69749,2391],{"emptyLinePlaceholder":32},[105,69751,69752],{"class":107,"line":16668},[105,69753,69754],{"class":174},"    \u002F\u002F 获取所有带有name属性的元素\n",[105,69756,69757,69759,69762,69764,69766,69768,69770,69773],{"class":107,"line":16688},[105,69758,11213],{"class":111},[105,69760,69761],{"class":164}," items",[105,69763,13556],{"class":111},[105,69765,54381],{"class":115},[105,69767,55666],{"class":1954},[105,69769,116],{"class":115},[105,69771,69772],{"class":220},"'[name]'",[105,69774,122],{"class":115},[105,69776,69777],{"class":107,"line":16694},[105,69778,69779],{"class":174},"    \u002F\u002F 声明一个空的数组\n",[105,69781,69782,69784,69786,69788],{"class":107,"line":16705},[105,69783,11213],{"class":111},[105,69785,57680],{"class":164},[105,69787,13556],{"class":111},[105,69789,51823],{"class":115},[105,69791,69792],{"class":107,"line":16728},[105,69793,69794],{"class":174},"    \u002F\u002F 1.录入模块\n",[105,69796,69797],{"class":107,"line":16750},[105,69798,69799],{"class":174},"    \u002F\u002F 1.1这是一个表单提交事件\n",[105,69801,69802,69804,69807,69809,69811,69813,69815,69818],{"class":107,"line":16755},[105,69803,11213],{"class":111},[105,69805,69806],{"class":164}," info",[105,69808,13556],{"class":111},[105,69810,54381],{"class":115},[105,69812,54384],{"class":1954},[105,69814,116],{"class":115},[105,69816,69817],{"class":220},"'.info'",[105,69819,122],{"class":115},[105,69821,69822,69825,69827,69829,69832,69834,69836,69838,69840],{"class":107,"line":16761},[105,69823,69824],{"class":115},"    info.",[105,69826,57798],{"class":1954},[105,69828,116],{"class":115},[105,69830,69831],{"class":220},"'submit'",[105,69833,12427],{"class":115},[105,69835,54434],{"class":111},[105,69837,1649],{"class":115},[105,69839,190],{"class":5208},[105,69841,12434],{"class":115},[105,69843,69844],{"class":107,"line":16775},[105,69845,69846],{"class":174},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[105,69848,69849,69852,69855],{"class":107,"line":16788},[105,69850,69851],{"class":115},"      e.",[105,69853,69854],{"class":1954},"preventDefault",[105,69856,1967],{"class":115},[105,69858,69859],{"class":107,"line":16793},[105,69860,59997],{"class":174},[105,69862,69863],{"class":107,"line":16807},[105,69864,2391],{"emptyLinePlaceholder":32},[105,69866,69867],{"class":107,"line":16812},[105,69868,69869],{"class":174},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[105,69871,69872],{"class":107,"line":16818},[105,69873,69874],{"class":174},"      \u002F\u002F 先遍历循环\n",[105,69876,69877,69879,69881,69883,69885,69887,69889,69891,69893,69896,69898,69900,69902],{"class":107,"line":16823},[105,69878,52269],{"class":111},[105,69880,1649],{"class":115},[105,69882,51832],{"class":111},[105,69884,9430],{"class":115},[105,69886,161],{"class":111},[105,69888,4084],{"class":164},[105,69890,9437],{"class":115},[105,69892,1026],{"class":111},[105,69894,69895],{"class":115}," items.",[105,69897,51953],{"class":164},[105,69899,3205],{"class":115},[105,69901,2283],{"class":111},[105,69903,12434],{"class":115},[105,69905,69906,69908,69911,69913,69916],{"class":107,"line":16837},[105,69907,2488],{"class":111},[105,69909,69910],{"class":115}," (items[i].value ",[105,69912,54471],{"class":111},[105,69914,69915],{"class":220}," ''",[105,69917,12434],{"class":115},[105,69919,69920,69923,69926,69928,69931],{"class":107,"line":16842},[105,69921,69922],{"class":111},"          return",[105,69924,69925],{"class":1954}," alert",[105,69927,116],{"class":115},[105,69929,69930],{"class":220},"'输入内容不能为空'",[105,69932,122],{"class":115},[105,69934,69935],{"class":107,"line":16847},[105,69936,2520],{"class":115},[105,69938,69939],{"class":107,"line":16861},[105,69940,52383],{"class":115},[105,69942,69943],{"class":107,"line":16873},[105,69944,2391],{"emptyLinePlaceholder":32},[105,69946,69947],{"class":107,"line":16878},[105,69948,69949],{"class":174},"      \u002F\u002F 创建新的对象\n",[105,69951,69952,69954,69957,69959],{"class":107,"line":16891},[105,69953,58213],{"class":111},[105,69955,69956],{"class":164}," obj",[105,69958,13556],{"class":111},[105,69960,15564],{"class":115},[105,69962,69963,69966,69968,69970,69972],{"class":107,"line":16896},[105,69964,69965],{"class":115},"        stuID: arr.",[105,69967,51953],{"class":164},[105,69969,45551],{"class":111},[105,69971,25103],{"class":164},[105,69973,31451],{"class":115},[105,69975,69976],{"class":107,"line":16901},[105,69977,69978],{"class":115},"        uname: uname.value,\n",[105,69980,69981],{"class":107,"line":16906},[105,69982,69983],{"class":115},"        age: age.value,\n",[105,69985,69986],{"class":107,"line":16919},[105,69987,69988],{"class":115},"        gender: gender.value,\n",[105,69990,69991],{"class":107,"line":16924},[105,69992,69993],{"class":115},"        salary: salary.value,\n",[105,69995,69996],{"class":107,"line":32618},[105,69997,69998],{"class":115},"        city: city.value\n",[105,70000,70001],{"class":107,"line":32624},[105,70002,52383],{"class":115},[105,70004,70005],{"class":107,"line":32630},[105,70006,70007],{"class":174},"      \u002F\u002F console.log(obj);\n",[105,70009,70010],{"class":107,"line":32636},[105,70011,70012],{"class":174},"      \u002F\u002F 追加到数组里面\n",[105,70014,70015,70017,70019],{"class":107,"line":32642},[105,70016,57992],{"class":115},[105,70018,51869],{"class":1954},[105,70020,70021],{"class":115},"(obj)\n",[105,70023,70024],{"class":107,"line":32653},[105,70025,70026],{"class":174},"      \u002F\u002F console.log(arr);\n",[105,70028,70029],{"class":107,"line":32659},[105,70030,70031],{"class":174},"      \u002F\u002F 清空表单  reset重置表单\n",[105,70033,70034,70037,70039,70042],{"class":107,"line":32679},[105,70035,70036],{"class":164},"      this",[105,70038,674],{"class":115},[105,70040,70041],{"class":1954},"reset",[105,70043,1967],{"class":115},[105,70045,70046],{"class":107,"line":32685},[105,70047,70048],{"class":174},"      \u002F\u002F 调用渲染函数\n",[105,70050,70051,70054],{"class":107,"line":32696},[105,70052,70053],{"class":1954},"      render",[105,70055,1967],{"class":115},[105,70057,70058],{"class":107,"line":32702},[105,70059,33446],{"class":115},[105,70061,70062],{"class":107,"line":32708},[105,70063,70064],{"class":174},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[105,70066,70067,70070,70073],{"class":107,"line":32714},[105,70068,70069],{"class":111},"    function",[105,70071,70072],{"class":1954}," render",[105,70074,10845],{"class":115},[105,70076,70077],{"class":107,"line":32720},[105,70078,70079],{"class":174},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[105,70081,70082,70085,70087],{"class":107,"line":32726},[105,70083,70084],{"class":115},"      tbody.innerHTML ",[105,70086,161],{"class":111},[105,70088,70089],{"class":220}," ''\n",[105,70091,70092],{"class":107,"line":32732},[105,70093,70094],{"class":174},"      \u002F\u002F 遍历数组\n",[105,70096,70097,70099,70101,70103,70105,70107,70109,70111,70113,70115,70117,70119,70121],{"class":107,"line":32738},[105,70098,52269],{"class":111},[105,70100,1649],{"class":115},[105,70102,51832],{"class":111},[105,70104,9430],{"class":115},[105,70106,161],{"class":111},[105,70108,4084],{"class":164},[105,70110,9437],{"class":115},[105,70112,1026],{"class":111},[105,70114,51950],{"class":115},[105,70116,51953],{"class":164},[105,70118,3205],{"class":115},[105,70120,2283],{"class":111},[105,70122,12434],{"class":115},[105,70124,70125,70127,70130,70132,70134,70137,70139,70142],{"class":107,"line":32758},[105,70126,61255],{"class":111},[105,70128,70129],{"class":164}," tr",[105,70131,13556],{"class":111},[105,70133,54381],{"class":115},[105,70135,70136],{"class":1954},"createElement",[105,70138,116],{"class":115},[105,70140,70141],{"class":220},"'tr'",[105,70143,122],{"class":115},[105,70145,70146,70149,70151],{"class":107,"line":32764},[105,70147,70148],{"class":115},"        tr.innerHTML ",[105,70150,161],{"class":111},[105,70152,70153],{"class":220}," `\n",[105,70155,70156,70159,70161,70163,70165,70168,70171],{"class":107,"line":32780},[105,70157,70158],{"class":220},"        \u003Ctd>${",[105,70160,3871],{"class":115},[105,70162,1006],{"class":220},[105,70164,557],{"class":115},[105,70166,70167],{"class":220},"].",[105,70169,70170],{"class":115},"stuID",[105,70172,70173],{"class":220},"}\u003C\u002Ftd>\n",[105,70175,70176,70179,70181,70183,70185,70187,70190],{"class":107,"line":32786},[105,70177,70178],{"class":220},"          \u003Ctd>${",[105,70180,3871],{"class":115},[105,70182,1006],{"class":220},[105,70184,557],{"class":115},[105,70186,70167],{"class":220},[105,70188,70189],{"class":115},"uname",[105,70191,70173],{"class":220},[105,70193,70194,70196,70198,70200,70202,70204,70207],{"class":107,"line":32800},[105,70195,70178],{"class":220},[105,70197,3871],{"class":115},[105,70199,1006],{"class":220},[105,70201,557],{"class":115},[105,70203,70167],{"class":220},[105,70205,70206],{"class":115},"age",[105,70208,70173],{"class":220},[105,70210,70211,70213,70215,70217,70219,70221,70224],{"class":107,"line":32806},[105,70212,70178],{"class":220},[105,70214,3871],{"class":115},[105,70216,1006],{"class":220},[105,70218,557],{"class":115},[105,70220,70167],{"class":220},[105,70222,70223],{"class":115},"gender",[105,70225,70173],{"class":220},[105,70227,70228,70230,70232,70234,70236,70238,70241],{"class":107,"line":32821},[105,70229,70178],{"class":220},[105,70231,3871],{"class":115},[105,70233,1006],{"class":220},[105,70235,557],{"class":115},[105,70237,70167],{"class":220},[105,70239,70240],{"class":115},"salary",[105,70242,70173],{"class":220},[105,70244,70245,70247,70249,70251,70253,70255,70258],{"class":107,"line":32827},[105,70246,70178],{"class":220},[105,70248,3871],{"class":115},[105,70250,1006],{"class":220},[105,70252,557],{"class":115},[105,70254,70167],{"class":220},[105,70256,70257],{"class":115},"city",[105,70259,70173],{"class":220},[105,70261,70262],{"class":107,"line":32836},[105,70263,69578],{"class":220},[105,70265,70266,70269,70271],{"class":107,"line":32842},[105,70267,70268],{"class":220},"            \u003Ca href=\"javascript:\" data-id=${",[105,70270,557],{"class":115},[105,70272,70273],{"class":220},"}>删除\u003C\u002Fa>\n",[105,70275,70276],{"class":107,"line":32851},[105,70277,70278],{"class":220},"          \u003C\u002Ftd> \n",[105,70280,70281],{"class":107,"line":32857},[105,70282,70283],{"class":220},"          `\n",[105,70285,70286],{"class":107,"line":32863},[105,70287,70288],{"class":174},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[105,70290,70291,70294,70297],{"class":107,"line":32872},[105,70292,70293],{"class":115},"        tbody.",[105,70295,70296],{"class":1954},"appendChild",[105,70298,70299],{"class":115},"(tr)\n",[105,70301,70302],{"class":107,"line":32878},[105,70303,52383],{"class":115},[105,70305,70306],{"class":107,"line":32889},[105,70307,2178],{"class":115},[105,70309,70310],{"class":107,"line":32895},[105,70311,2391],{"emptyLinePlaceholder":32},[105,70313,70314],{"class":107,"line":32914},[105,70315,70316],{"class":174},"    \u002F\u002F 3.删除委托\n",[105,70318,70319],{"class":107,"line":32920},[105,70320,70321],{"class":174},"    \u002F\u002F 3.1 事件委托 tbody\n",[105,70323,70324,70327,70329,70331,70333,70335,70337,70339,70341],{"class":107,"line":32931},[105,70325,70326],{"class":115},"    tbody.",[105,70328,57798],{"class":1954},[105,70330,116],{"class":115},[105,70332,57803],{"class":220},[105,70334,12427],{"class":115},[105,70336,54434],{"class":111},[105,70338,1649],{"class":115},[105,70340,190],{"class":5208},[105,70342,12434],{"class":115},[105,70344,70345,70347,70349,70351,70353],{"class":107,"line":32937},[105,70346,54465],{"class":111},[105,70348,67019],{"class":115},[105,70350,54471],{"class":111},[105,70352,68241],{"class":220},[105,70354,12434],{"class":115},[105,70356,70357],{"class":107,"line":32957},[105,70358,70359],{"class":174},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[105,70361,70362],{"class":107,"line":32973},[105,70363,70364],{"class":174},"        \u002F\u002F console.log(e.target.dataset.id);\n",[105,70366,70367],{"class":107,"line":32979},[105,70368,70369],{"class":174},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[105,70371,70372,70375,70377,70380,70382],{"class":107,"line":32993},[105,70373,70374],{"class":115},"        arr.",[105,70376,57995],{"class":1954},[105,70378,70379],{"class":115},"(e.target.dataset.id, ",[105,70381,333],{"class":164},[105,70383,122],{"class":115},[105,70385,70386],{"class":107,"line":32999},[105,70387,70388],{"class":174},"        \u002F\u002F 重新渲染一次\n",[105,70390,70391,70394],{"class":107,"line":33005},[105,70392,70393],{"class":1954},"        render",[105,70395,1967],{"class":115},[105,70397,70398],{"class":107,"line":33016},[105,70399,52383],{"class":115},[105,70401,70402],{"class":107,"line":33022},[105,70403,33446],{"class":115},[105,70405,70406,70408,70410],{"class":107,"line":33028},[105,70407,52402],{"class":115},[105,70409,51798],{"class":51285},[105,70411,51292],{"class":115},[105,70413,70414],{"class":107,"line":33038},[105,70415,2391],{"emptyLinePlaceholder":32},[105,70417,70418,70420,70422],{"class":107,"line":33044},[105,70419,51770],{"class":115},[105,70421,51785],{"class":51285},[105,70423,51292],{"class":115},[105,70425,70426],{"class":107,"line":33055},[105,70427,2391],{"emptyLinePlaceholder":32},[105,70429,70430,70432,70434],{"class":107,"line":33061},[105,70431,51770],{"class":115},[105,70433,50620],{"class":51285},[105,70435,51292],{"class":115},[14,70437,70438],{},"样式：",[96,70440,70444],{"className":70441,"code":70442,"language":70443,"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",[102,70445,70446,70451,70461,70470,70474,70478,70483,70493,70498,70502,70507,70517,70522,70531,70535,70539,70544,70549,70559,70569,70574,70578,70583,70592,70602,70607,70617,70627,70631,70636,70644,70648,70653,70658,70663,70671,70680,70684,70689,70698,70702,70707,70716,70720,70725,70734,70743,70751,70755,70760,70769,70779,70788,70798,70804,70813,70823,70833,70837,70842,70851,70859,70869,70877,70886,70895,70905,70913,70917,70922,70931],{"__ignoreMap":22},[105,70447,70448],{"class":107,"line":108},[105,70449,70450],{"class":115},"* {\n",[105,70452,70453,70456,70458],{"class":107,"line":28},[105,70454,70455],{"class":51285},"  margin",[105,70457,51422],{"class":115},[105,70459,70460],{"class":220},"0;\n",[105,70462,70463,70466,70468],{"class":107,"line":1171},[105,70464,70465],{"class":220},"  padding",[105,70467,51422],{"class":115},[105,70469,70460],{"class":220},[105,70471,70472],{"class":107,"line":1186},[105,70473,1556],{"class":115},[105,70475,70476],{"class":107,"line":1192},[105,70477,2391],{"emptyLinePlaceholder":32},[105,70479,70480],{"class":107,"line":1206},[105,70481,70482],{"class":220},"a {\n",[105,70484,70485,70488,70490],{"class":107,"line":1212},[105,70486,70487],{"class":51285},"  text-decoration",[105,70489,51422],{"class":115},[105,70491,70492],{"class":220},"none;\n",[105,70494,70495],{"class":107,"line":1303},[105,70496,70497],{"class":220},"  color:#721c24;\n",[105,70499,70500],{"class":107,"line":1309},[105,70501,1556],{"class":115},[105,70503,70504],{"class":107,"line":1321},[105,70505,70506],{"class":220},"h1 {\n",[105,70508,70509,70512,70514],{"class":107,"line":1603},[105,70510,70511],{"class":51285},"  text-align",[105,70513,51422],{"class":115},[105,70515,70516],{"class":220},"center;\n",[105,70518,70519],{"class":107,"line":1608},[105,70520,70521],{"class":220},"  color:#333;\n",[105,70523,70524,70526,70528],{"class":107,"line":1614},[105,70525,70455],{"class":51285},[105,70527,51422],{"class":115},[105,70529,70530],{"class":220},"20px 0;\n",[105,70532,70533],{"class":107,"line":1619},[105,70534,2665],{"class":115},[105,70536,70537],{"class":107,"line":1633},[105,70538,1556],{"class":115},[105,70540,70541],{"class":107,"line":1638},[105,70542,70543],{"class":220},"table {\n",[105,70545,70546],{"class":107,"line":1644},[105,70547,70548],{"class":220},"  margin:0 auto;\n",[105,70550,70551,70554,70556],{"class":107,"line":1665},[105,70552,70553],{"class":51285},"  width",[105,70555,51422],{"class":115},[105,70557,70558],{"class":220},"800px;\n",[105,70560,70561,70564,70566],{"class":107,"line":1670},[105,70562,70563],{"class":51285},"  border-collapse",[105,70565,51422],{"class":115},[105,70567,70568],{"class":220},"collapse;\n",[105,70570,70571],{"class":107,"line":1684},[105,70572,70573],{"class":220},"  color:#004085;\n",[105,70575,70576],{"class":107,"line":1689},[105,70577,1556],{"class":115},[105,70579,70580],{"class":107,"line":1718},[105,70581,70582],{"class":220},"th {\n",[105,70584,70585,70587,70589],{"class":107,"line":1723},[105,70586,70465],{"class":51285},[105,70588,51422],{"class":115},[105,70590,70591],{"class":220},"10px;\n",[105,70593,70594,70597,70599],{"class":107,"line":1740},[105,70595,70596],{"class":51285},"  background",[105,70598,51422],{"class":115},[105,70600,70601],{"class":174},"#cfe5ff;\n",[105,70603,70604],{"class":107,"line":1745},[105,70605,70606],{"class":115},"  \n",[105,70608,70609,70612,70614],{"class":107,"line":1750},[105,70610,70611],{"class":51285},"  font-size",[105,70613,51422],{"class":115},[105,70615,70616],{"class":220},"20px;\n",[105,70618,70619,70622,70624],{"class":107,"line":1755},[105,70620,70621],{"class":51285},"  font-weight",[105,70623,51422],{"class":115},[105,70625,70626],{"class":220},"400;\n",[105,70628,70629],{"class":107,"line":1769},[105,70630,1556],{"class":115},[105,70632,70633],{"class":107,"line":1774},[105,70634,70635],{"class":220},"td,th {\n",[105,70637,70638,70641],{"class":107,"line":2568},[105,70639,70640],{"class":220},"  border:1px solid",[105,70642,70643],{"class":174}," #b8daff;\n",[105,70645,70646],{"class":107,"line":2582},[105,70647,1556],{"class":115},[105,70649,70650],{"class":107,"line":2590},[105,70651,70652],{"class":220},"td {\n",[105,70654,70655],{"class":107,"line":2595},[105,70656,70657],{"class":220},"  padding:10px;\n",[105,70659,70660],{"class":107,"line":2601},[105,70661,70662],{"class":220},"  color:#666;\n",[105,70664,70665,70667,70669],{"class":107,"line":2607},[105,70666,70511],{"class":51285},[105,70668,51422],{"class":115},[105,70670,70516],{"class":220},[105,70672,70673,70675,70677],{"class":107,"line":2612},[105,70674,70611],{"class":51285},[105,70676,51422],{"class":115},[105,70678,70679],{"class":220},"16px;\n",[105,70681,70682],{"class":107,"line":7940},[105,70683,1556],{"class":115},[105,70685,70686],{"class":107,"line":7964},[105,70687,70688],{"class":220},"tbody tr {\n",[105,70690,70691,70693,70695],{"class":107,"line":7969},[105,70692,70596],{"class":51285},[105,70694,51422],{"class":115},[105,70696,70697],{"class":174},"#fff;\n",[105,70699,70700],{"class":107,"line":7975},[105,70701,1556],{"class":115},[105,70703,70704],{"class":107,"line":8002},[105,70705,70706],{"class":220},"tbody tr:hover {\n",[105,70708,70709,70711,70713],{"class":107,"line":8007},[105,70710,70596],{"class":51285},[105,70712,51422],{"class":115},[105,70714,70715],{"class":174},"#e1ecf8;\n",[105,70717,70718],{"class":107,"line":8013},[105,70719,1556],{"class":115},[105,70721,70722],{"class":107,"line":8025},[105,70723,70724],{"class":220},".info {\n",[105,70726,70727,70729,70731],{"class":107,"line":8037},[105,70728,70553],{"class":51285},[105,70730,51422],{"class":115},[105,70732,70733],{"class":220},"900px;\n",[105,70735,70736,70738,70740],{"class":107,"line":8049},[105,70737,70455],{"class":51285},[105,70739,51422],{"class":115},[105,70741,70742],{"class":220},"50px auto;\n",[105,70744,70745,70747,70749],{"class":107,"line":9708},[105,70746,70511],{"class":51285},[105,70748,51422],{"class":115},[105,70750,70516],{"class":220},[105,70752,70753],{"class":107,"line":9733},[105,70754,1556],{"class":115},[105,70756,70757],{"class":107,"line":9756},[105,70758,70759],{"class":220},".info  input, .info select {\n",[105,70761,70762,70764,70766],{"class":107,"line":9780},[105,70763,70553],{"class":51285},[105,70765,51422],{"class":115},[105,70767,70768],{"class":220},"80px;\n",[105,70770,70771,70774,70776],{"class":107,"line":9785},[105,70772,70773],{"class":51285},"  height",[105,70775,51422],{"class":115},[105,70777,70778],{"class":220},"27px;\n",[105,70780,70781,70784,70786],{"class":107,"line":9790},[105,70782,70783],{"class":51285},"  outline",[105,70785,51422],{"class":115},[105,70787,70492],{"class":220},[105,70789,70790,70793,70795],{"class":107,"line":9795},[105,70791,70792],{"class":51285},"  border-radius",[105,70794,51422],{"class":115},[105,70796,70797],{"class":220},"5px;\n",[105,70799,70800,70802],{"class":107,"line":9804},[105,70801,70640],{"class":220},[105,70803,70643],{"class":174},[105,70805,70806,70809,70811],{"class":107,"line":9809},[105,70807,70808],{"class":51285},"  padding-left",[105,70810,51422],{"class":115},[105,70812,70797],{"class":220},[105,70814,70815,70818,70820],{"class":107,"line":9815},[105,70816,70817],{"class":51285},"  box-sizing",[105,70819,51422],{"class":115},[105,70821,70822],{"class":220},"border-box;\n",[105,70824,70825,70828,70830],{"class":107,"line":9836},[105,70826,70827],{"class":51285},"  margin-right",[105,70829,51422],{"class":115},[105,70831,70832],{"class":220},"15px;\n",[105,70834,70835],{"class":107,"line":9842},[105,70836,1556],{"class":115},[105,70838,70839],{"class":107,"line":9856},[105,70840,70841],{"class":220},".info button {\n",[105,70843,70844,70846,70848],{"class":107,"line":9862},[105,70845,70553],{"class":51285},[105,70847,51422],{"class":115},[105,70849,70850],{"class":220},"60px;\n",[105,70852,70853,70855,70857],{"class":107,"line":9889},[105,70854,70773],{"class":51285},[105,70856,51422],{"class":115},[105,70858,70778],{"class":220},[105,70860,70861,70864,70866],{"class":107,"line":9898},[105,70862,70863],{"class":51285},"  background-color",[105,70865,51422],{"class":115},[105,70867,70868],{"class":174},"#004085;\n",[105,70870,70871,70873,70875],{"class":107,"line":9904},[105,70872,70783],{"class":51285},[105,70874,51422],{"class":115},[105,70876,70492],{"class":220},[105,70878,70879,70882,70884],{"class":107,"line":9912},[105,70880,70881],{"class":51285},"  border",[105,70883,51422],{"class":115},[105,70885,70460],{"class":220},[105,70887,70888,70891,70893],{"class":107,"line":9917},[105,70889,70890],{"class":51285},"  color",[105,70892,51422],{"class":115},[105,70894,70697],{"class":174},[105,70896,70897,70900,70902],{"class":107,"line":16596},[105,70898,70899],{"class":51285},"  cursor",[105,70901,51422],{"class":115},[105,70903,70904],{"class":220},"pointer;\n",[105,70906,70907,70909,70911],{"class":107,"line":16602},[105,70908,70792],{"class":51285},[105,70910,51422],{"class":115},[105,70912,70797],{"class":220},[105,70914,70915],{"class":107,"line":16625},[105,70916,1556],{"class":115},[105,70918,70919],{"class":107,"line":16631},[105,70920,70921],{"class":220},".info .age {\n",[105,70923,70924,70926,70928],{"class":107,"line":16654},[105,70925,70553],{"class":51285},[105,70927,51422],{"class":115},[105,70929,70930],{"class":220},"50px;\n",[105,70932,70933],{"class":107,"line":16668},[105,70934,1556],{"class":115},[14,70936,70937],{},"思路：",[14,70939,70940],{},[20,70941],{"alt":22,"src":70942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,70944,70945],{},[20,70946],{"alt":22,"src":70947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,70949,70950],{},[20,70951],{"alt":22,"src":70952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[76,70954,70956],{"id":70955},"_3315-重绘回流","3.3.15 重绘回流",[14,70958,70959],{},[20,70960],{"alt":22,"src":70961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,70963,70964],{},[20,70965],{"alt":22,"src":70966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,70968,70969],{},[20,70970],{"alt":22,"src":70971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[47,70973,70975],{"id":70974},"_34-bom","3.4 BOM",[14,70977,70978],{},[20,70979],{"alt":22,"src":70980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,70982,70983],{},"平时写的document省略了window而已，实际上是window.document",[14,70985,70986],{},"函数也是这样，调用的时候实际为window.fn()",[14,70988,70989],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,70991,70992],{},"window大部分情况下可以省略",[76,70994,70996],{"id":70995},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,70998,70999],{},"只执行一次",[14,71001,71002],{},[20,71003],{"alt":22,"src":71004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71006,71007],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71009,71010],{},[20,71011],{"alt":22,"src":71012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[76,71014,71016],{"id":71015},"_342-js执行机制","3.4.2 JS执行机制",[14,71018,71019],{},[20,71020],{"alt":22,"src":71021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71023,71024],{},"两个的结果都是1111 3333 2222",[14,71026,71027],{},[20,71028],{"alt":22,"src":71029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71031,71032],{},[20,71033],{"alt":22,"src":71034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71036,71037],{},[20,71038],{"alt":22,"src":71039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71041,71042],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71044,71045],{},"工作流程：",[14,71047,71048],{},[20,71049],{"alt":22,"src":71050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71052,71053],{},[20,71054],{"alt":22,"src":71055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71057,71058],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71060,71061],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[76,71063,71065],{"id":71064},"_343-location对象","3.4.3 location对象",[14,71067,71068],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71070,71071],{},[20,71072],{"alt":22,"src":71073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71075,71076],{},"href可以跳转页面",[59,71078,71079],{},[62,71080,71081],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71083,71084],{},"search得到提交信息之后网站后边的地址",[14,71086,71087],{},[20,71088],{"alt":22,"src":71089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71091,71092],{},[20,71093],{"alt":22,"src":71094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[59,71096,71097],{"start":28},[62,71098,71099],{},"hash:这个获取单页面应用#后边的地址",[14,71101,71102],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71104,71105],{},[20,71106],{"alt":22,"src":71107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[96,71109,71111],{"className":53052,"code":71110,"language":53054,"meta":22,"style":22},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[102,71112,71113,71133,71153],{"__ignoreMap":22},[105,71114,71115,71117,71119,71121,71123,71126,71129,71131],{"class":107,"line":108},[105,71116,52129],{"class":115},[105,71118,354],{"class":51285},[105,71120,61042],{"class":1954},[105,71122,161],{"class":115},[105,71124,71125],{"class":220},"\"#\u002Fmy\"",[105,71127,71128],{"class":115},">我的\u003C\u002F",[105,71130,354],{"class":51285},[105,71132,51292],{"class":115},[105,71134,71135,71137,71139,71141,71143,71146,71149,71151],{"class":107,"line":28},[105,71136,52129],{"class":115},[105,71138,354],{"class":51285},[105,71140,61042],{"class":1954},[105,71142,161],{"class":115},[105,71144,71145],{"class":220},"\"#\u002Ffriend\"",[105,71147,71148],{"class":115},">关注\u003C\u002F",[105,71150,354],{"class":51285},[105,71152,51292],{"class":115},[105,71154,71155,71157,71159,71161,71163,71166,71169,71171],{"class":107,"line":1171},[105,71156,52129],{"class":115},[105,71158,354],{"class":51285},[105,71160,61042],{"class":1954},[105,71162,161],{"class":115},[105,71164,71165],{"class":220},"\"#\u002Fdownload\"",[105,71167,71168],{"class":115},">下载\u003C\u002F",[105,71170,354],{"class":51285},[105,71172,51292],{"class":115},[14,71174,71175],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[59,71177,71178],{"start":1171},[62,71179,71180,71181,71183,71184,71186],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53701,71182],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53701,71185],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[76,71188,71190],{"id":71189},"_345-navigator对象","3.4.5 navigator对象",[14,71192,71193],{},[20,71194],{"alt":22,"src":71195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[96,71197,71201],{"className":71198,"code":71199,"language":71200,"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",[102,71202,71203,71208,71219,71231,71236,71287,71328,71333,71346,71358,71363],{"__ignoreMap":22},[105,71204,71205],{"class":107,"line":108},[105,71206,71207],{"class":174},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[105,71209,71210,71212,71214,71216],{"class":107,"line":28},[105,71211,342],{"class":111},[105,71213,116],{"class":115},[105,71215,54434],{"class":111},[105,71217,71218],{"class":115}," () { \n",[105,71220,71221,71223,71226,71228],{"class":107,"line":1171},[105,71222,6784],{"class":111},[105,71224,71225],{"class":164}," userAgent",[105,71227,13556],{"class":111},[105,71229,71230],{"class":115}," navigator.userAgent \n",[105,71232,71233],{"class":107,"line":1186},[105,71234,71235],{"class":174},"\u002F\u002F 验证是否为Android或iPhone \n",[105,71237,71238,71240,71243,71245,71248,71251,71253,71255,71258,71260,71263,71267,71269,71271,71273,71276,71278,71280,71282,71284],{"class":107,"line":1192},[105,71239,6784],{"class":111},[105,71241,71242],{"class":164}," android",[105,71244,13556],{"class":111},[105,71246,71247],{"class":115}," userAgent.",[105,71249,71250],{"class":1954},"match",[105,71252,116],{"class":115},[105,71254,700],{"class":220},[105,71256,71257],{"class":47962},"(Android);",[105,71259,1102],{"class":111},[105,71261,71262],{"class":164},"[\\s",[105,71264,71266],{"class":71265},"snhLl","\\\u002F",[105,71268,1056],{"class":164},[105,71270,597],{"class":111},[105,71272,116],{"class":47962},[105,71274,71275],{"class":164},"[\\d.]",[105,71277,597],{"class":111},[105,71279,545],{"class":47962},[105,71281,1102],{"class":111},[105,71283,700],{"class":220},[105,71285,71286],{"class":115},") \n",[105,71288,71289,71291,71294,71296,71298,71300,71302,71304,71307,71310,71313,71315,71317,71320,71322,71324,71326],{"class":107,"line":1206},[105,71290,6784],{"class":111},[105,71292,71293],{"class":164}," iphone",[105,71295,13556],{"class":111},[105,71297,71247],{"class":115},[105,71299,71250],{"class":1954},[105,71301,116],{"class":115},[105,71303,700],{"class":220},[105,71305,71306],{"class":47962},"(iPhone",[105,71308,71309],{"class":164},"\\s",[105,71311,71312],{"class":47962},"OS)",[105,71314,71309],{"class":164},[105,71316,116],{"class":47962},[105,71318,71319],{"class":164},"[\\d_]",[105,71321,597],{"class":111},[105,71323,545],{"class":47962},[105,71325,700],{"class":220},[105,71327,71286],{"class":115},[105,71329,71330],{"class":107,"line":1212},[105,71331,71332],{"class":174},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[105,71334,71335,71337,71340,71343],{"class":107,"line":1303},[105,71336,1522],{"class":111},[105,71338,71339],{"class":115}," (android ",[105,71341,71342],{"class":111},"||",[105,71344,71345],{"class":115}," iphone) { \n",[105,71347,71348,71351,71353,71356],{"class":107,"line":1309},[105,71349,71350],{"class":115},"location.href ",[105,71352,161],{"class":111},[105,71354,71355],{"class":220}," 'http:\u002F\u002Fm.itcast.cn'",[105,71357,2665],{"class":115},[105,71359,71360],{"class":107,"line":1321},[105,71361,71362],{"class":115},"} \n",[105,71364,71365],{"class":107,"line":1603},[105,71366,71367],{"class":115},"})()\n",[76,71369,71371],{"id":71370},"_346-histroy对象","3.4.6 histroy对象",[14,71373,71374],{},[20,71375],{"alt":22,"src":71376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71378,71379],{},"浏览器地址的前进与后退!!!",[14,71381,71382],{},"history.back() 等效于 history.go(-1)",[14,71384,71385],{},"history.forward() 等效于 history.go(1)",[47,71387,71389],{"id":71388},"_35-本地存储","3.5 本地存储",[59,71391,71392,71395,71398],{},[62,71393,71394],{},"数据存储在用户浏览器中",[62,71396,71397],{},"设置、读取方便、甚至页面刷新不丢失数据",[62,71399,71400],{},"容量较大，sessionStorage和localStorage约 5M 左右",[76,71402,71404],{"id":71403},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71406,71407],{},"只能存储字符串",[14,71409,71410],{},[20,71411],{"alt":22,"src":71412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71414,71415],{},[20,71416],{"alt":22,"src":71417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71419,71420],{},"键值对要加引号,不然就会当变量来看了",[14,71422,71423],{},"localStorage.setItem('uname', 'pink')",[14,71425,71426],{},"刷新之后信息不再丢失",[14,71428,71429],{},"操作key,value会跟着变",[14,71431,71432],{},"删除只删除键就可以,即名字",[14,71434,71423],{},[14,71436,71437],{},"改:",[14,71439,71440],{},"localStorage.setItem('uname','red')",[14,71442,71443],{},"有这个键就是改,没有这个键就是改",[14,71445,71446],{},[20,71447],{"alt":22,"src":71448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71450,71451],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71453,71454],{},[20,71455],{"alt":22,"src":71456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71458,71459],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[76,71461,71463],{"id":71462},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71465,71466],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71468,71469],{},"特性:",[59,71471,71472,71475,71478,71481],{},[62,71473,71474],{},"生命周期为关闭浏览器窗口",[62,71476,71477],{},"在同一个窗口(页面)下数据可以共享",[62,71479,71480],{},"以键值对的形式存储使用",[62,71482,71483],{},"用法跟localStorage 基本相同",[76,71485,71487],{"id":71486},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71489,71490],{},"本地只能存储字符串,无法直接存储复杂数据类型",[96,71492,71494],{"className":53052,"code":71493,"language":53054,"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",[102,71495,71496,71504,71509,71514,71519,71524,71528,71533,71538],{"__ignoreMap":22},[105,71497,71498,71500,71502],{"class":107,"line":108},[105,71499,1026],{"class":115},[105,71501,51798],{"class":51285},[105,71503,51292],{"class":115},[105,71505,71506],{"class":107,"line":28},[105,71507,71508],{"class":115},"    const obj = {\n",[105,71510,71511],{"class":107,"line":1171},[105,71512,71513],{"class":115},"      uname: 'pink老师',\n",[105,71515,71516],{"class":107,"line":1186},[105,71517,71518],{"class":115},"      age: 18,\n",[105,71520,71521],{"class":107,"line":1192},[105,71522,71523],{"class":115},"      gender: '女'\n",[105,71525,71526],{"class":107,"line":1206},[105,71527,2178],{"class":115},[105,71529,71530],{"class":107,"line":1212},[105,71531,71532],{"class":115},"    \u002F\u002F 存储复杂数据类型\n",[105,71534,71535],{"class":107,"line":1303},[105,71536,71537],{"class":115},"    localStorage.setItem('obj', obj)\n",[105,71539,71540,71542,71544],{"class":107,"line":1309},[105,71541,52402],{"class":115},[105,71543,51798],{"class":51285},[105,71545,51292],{"class":115},[14,71547,71548],{},[20,71549],{"alt":22,"src":71550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71552,71553],{},"如果获取一下数据:",[14,71555,71556],{},"log(localStorage.getItem('obj'))",[14,71558,71559],{},[20,71560],{"alt":22,"src":71561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71563,71564],{},"发现直接存对象是使用不了的!!!",[21990,71566,71568],{"id":71567},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71570,71571],{},[20,71572],{"alt":22,"src":71573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[96,71575,71577],{"className":50618,"code":71576,"language":50620,"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",[102,71578,71579,71587,71597,71607,71616,71624,71628,71632,71658,71677,71685,71689,71694,71699],{"__ignoreMap":22},[105,71580,71581,71583,71585],{"class":107,"line":108},[105,71582,1026],{"class":115},[105,71584,51798],{"class":51285},[105,71586,51292],{"class":115},[105,71588,71589,71591,71593,71595],{"class":107,"line":28},[105,71590,11213],{"class":111},[105,71592,69956],{"class":164},[105,71594,13556],{"class":111},[105,71596,15564],{"class":115},[105,71598,71599,71602,71605],{"class":107,"line":1171},[105,71600,71601],{"class":115},"      uname: ",[105,71603,71604],{"class":220},"'pink老师'",[105,71606,31451],{"class":115},[105,71608,71609,71612,71614],{"class":107,"line":1186},[105,71610,71611],{"class":115},"      age: ",[105,71613,766],{"class":164},[105,71615,31451],{"class":115},[105,71617,71618,71621],{"class":107,"line":1192},[105,71619,71620],{"class":115},"      gender: ",[105,71622,71623],{"class":220},"'女'\n",[105,71625,71626],{"class":107,"line":1206},[105,71627,2178],{"class":115},[105,71629,71630],{"class":107,"line":1212},[105,71631,71532],{"class":174},[105,71633,71634,71637,71640,71642,71645,71647,71650,71652,71655],{"class":107,"line":1303},[105,71635,71636],{"class":115},"  localStorage.",[105,71638,71639],{"class":1954},"setItem",[105,71641,116],{"class":115},[105,71643,71644],{"class":220},"'obj'",[105,71646,12427],{"class":115},[105,71648,71649],{"class":164},"JSON",[105,71651,674],{"class":115},[105,71653,71654],{"class":1954},"stringify",[105,71656,71657],{"class":115},"(obj))\n",[105,71659,71660,71663,71665,71668,71671,71673,71675],{"class":107,"line":1309},[105,71661,71662],{"class":115},"  console.",[105,71664,58232],{"class":1954},[105,71666,71667],{"class":115},"(localStorage.",[105,71669,71670],{"class":1954},"getItem",[105,71672,116],{"class":115},[105,71674,71644],{"class":220},[105,71676,30482],{"class":115},[105,71678,71679,71681,71683],{"class":107,"line":1321},[105,71680,52402],{"class":115},[105,71682,51798],{"class":51285},[105,71684,51292],{"class":115},[105,71686,71687],{"class":107,"line":1603},[105,71688,70606],{"class":115},[105,71690,71691],{"class":107,"line":1608},[105,71692,71693],{"class":115},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[105,71695,71696],{"class":107,"line":1614},[105,71697,71698],{"class":115},"  类型是字符串的\n",[105,71700,71701],{"class":107,"line":1619},[105,71702,71703],{"class":115},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21990,71705,71707],{"id":71706},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71709,71710],{},[20,71711],{"alt":22,"src":71712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71714,71715],{},[20,71716],{"alt":22,"src":71717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[96,71719,71721],{"className":53052,"code":71720,"language":53054,"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",[102,71722,71723,71731,71735,71739,71743,71747,71751,71756,71761,71766,71771,71776,71781,71786,71791],{"__ignoreMap":22},[105,71724,71725,71727,71729],{"class":107,"line":108},[105,71726,52129],{"class":115},[105,71728,51798],{"class":51285},[105,71730,51292],{"class":115},[105,71732,71733],{"class":107,"line":28},[105,71734,71508],{"class":115},[105,71736,71737],{"class":107,"line":1171},[105,71738,71513],{"class":115},[105,71740,71741],{"class":107,"line":1186},[105,71742,71518],{"class":115},[105,71744,71745],{"class":107,"line":1192},[105,71746,71523],{"class":115},[105,71748,71749],{"class":107,"line":1206},[105,71750,2178],{"class":115},[105,71752,71753],{"class":107,"line":1212},[105,71754,71755],{"class":115},"    \u002F\u002F 1.存储复杂数据类型\n",[105,71757,71758],{"class":107,"line":1303},[105,71759,71760],{"class":115},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[105,71762,71763],{"class":107,"line":1309},[105,71764,71765],{"class":115},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[105,71767,71768],{"class":107,"line":1321},[105,71769,71770],{"class":115},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[105,71772,71773],{"class":107,"line":1603},[105,71774,71775],{"class":115},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[105,71777,71778],{"class":107,"line":1608},[105,71779,71780],{"class":115},"    \u002F\u002F 取\n",[105,71782,71783],{"class":107,"line":1614},[105,71784,71785],{"class":115},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[105,71787,71788],{"class":107,"line":1619},[105,71789,71790],{"class":115},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[105,71792,71793,71795,71797],{"class":107,"line":1633},[105,71794,52402],{"class":115},[105,71796,51798],{"class":51285},[105,71798,51292],{"class":115},[14,71800,71801],{},[20,71802],{"alt":22,"src":71803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[76,71805,71807],{"id":71806},"_356-数组map方法","3.5.6 数组map方法",[14,71809,71810],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71812,71813],{},[20,71814],{"alt":22,"src":71815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71817,71818],{},[20,71819],{"alt":22,"src":71820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71822,71823,71826],{},[265,71824,71825],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71828,71829],{},"map有返回值，但是forEach没有返回值",[14,71831,71832],{},"map是个方法。用的时候要加 ()",[14,71834,71835],{},"map返回的是一个数组",[76,71837,71839],{"id":71838},"_357-数组中join方法","3.5.7 数组中join方法",[14,71841,71842],{},[20,71843],{"alt":22,"src":71844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71846,71847],{},"类似于python中拼接字符串一样！",[59,71849,71850,71853,71856],{},[62,71851,71852],{},"小括号为空则逗号分开",[62,71854,71855],{},"小括号为空字符串 ''，则元素之间没有分隔符",[62,71857,71858],{},"小括号用啥符号就用进行分割",[76,71860,71862],{"id":71861},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[59,71864,71865,71868,71871,71874,71877],{},[62,71866,71867],{},"记住本地时间获取快速方式：new Date().toDateString()",[62,71869,71870],{},"尽量减少DOM操作，用好map+join的渲染方式",[62,71872,71873],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[62,71875,71876],{},"return可以实现函数的结束",[62,71878,71879],{},"禁止跳转是 preventDefault() 不要忘记",[96,71881,71883],{"className":50618,"code":71882,"language":50620,"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",[102,71884,71885,71895,71909,71913,71921,71935,71955,71967,71975,71981,71991,72001,72005,72009,72015,72025,72037,72041,72045,72052,72064,72078,72088,72092,72096,72103,72110,72117,72129,72141,72151,72163,72167,72171,72178,72185,72197,72209,72219,72231,72261,72265,72269,72276,72288,72300,72324,72334,72344,72348,72352,72360,72371,72383,72395,72407,72424,72436,72448,72452,72456,72463,72475,72487,72499,72510,72528,72541,72553,72577,72588,72592,72596,72604,72614,72618,72622,72628,72640,72651,72661,72665,72669,72675,72697,72701,72705,72711,72717,72729,72739,72751,72781,72794,72811,72815,72819,72830,72852,72862,72866,72870,72883,72893,72905,72917,72929,72941,72951,72961,72971,72982,72995,72999,73007,73015,73019,73027,73040,73060,73093,73126,73159,73185,73203,73221,73229,73255,73273,73291,73309,73327,73345,73353,73361,73379,73387,73416,73424,73432,73440,73453,73465,73477,73489,73501,73513,73526,73538,73546,73554,73562,73567,73572,73576,73580,73584,73588,73592,73596,73601,73606,73611,73616,73624,73632,73640,73645,73650,73655,73660,73665,73670,73675,73680,73685,73690,73695,73700,73705,73710,73714,73719,73724,73734,73743,73747,73752,73761,73777,73819,73859,73898,73963,73971,73975,73980,73998,74006,74011,74016,74046,74052,74057,74070,74082,74094,74106,74118,74130,74142,74146,74156,74160,74165,74170,74174,74183,74187,74192,74197,74216,74221,74241,74245,74250,74254,74259,74277,74295,74313,74332,74351,74370,74375,74381,74402,74408,74417,74423,74429,74435,74462,74475,74480,74490,74496,74502,74508,74514,74519,74525,74531,74537,74543,74576,74581,74586,74591,74596,74602,74608,74614,74625,74630,74636,74643,74657,74663,74687,74692,74697,74703,74709,74730,74736,74749,74755,74761,74767,74773,74778,74784,74790,74796,74814,74828,74834,74842,74848,74870,74875,74880,74885,74890,74895,74904,74913,74918],{"__ignoreMap":22},[105,71886,71887,71889,71891,71893],{"class":107,"line":108},[105,71888,51282],{"class":115},[105,71890,51286],{"class":51285},[105,71892,51289],{"class":1954},[105,71894,51292],{"class":115},[105,71896,71897,71899,71901,71903,71905,71907],{"class":107,"line":28},[105,71898,1026],{"class":115},[105,71900,50620],{"class":51285},[105,71902,51301],{"class":1954},[105,71904,161],{"class":115},[105,71906,51306],{"class":220},[105,71908,51292],{"class":115},[105,71910,71911],{"class":107,"line":1171},[105,71912,2391],{"emptyLinePlaceholder":32},[105,71914,71915,71917,71919],{"class":107,"line":1186},[105,71916,1026],{"class":115},[105,71918,51319],{"class":51285},[105,71920,51292],{"class":115},[105,71922,71923,71925,71927,71929,71931,71933],{"class":107,"line":1192},[105,71924,52129],{"class":115},[105,71926,51329],{"class":51285},[105,71928,51332],{"class":1954},[105,71930,161],{"class":115},[105,71932,51337],{"class":220},[105,71934,51292],{"class":115},[105,71936,71937,71939,71941,71943,71945,71947,71949,71951,71953],{"class":107,"line":1206},[105,71938,52129],{"class":115},[105,71940,51329],{"class":51285},[105,71942,14912],{"class":1954},[105,71944,161],{"class":115},[105,71946,51376],{"class":220},[105,71948,51356],{"class":1954},[105,71950,161],{"class":115},[105,71952,51383],{"class":220},[105,71954,51292],{"class":115},[105,71956,71957,71959,71961,71963,71965],{"class":107,"line":1212},[105,71958,52129],{"class":115},[105,71960,51392],{"class":51285},[105,71962,51395],{"class":115},[105,71964,51392],{"class":51285},[105,71966,51292],{"class":115},[105,71968,71969,71971,71973],{"class":107,"line":1303},[105,71970,52129],{"class":115},[105,71972,5118],{"class":51285},[105,71974,51292],{"class":115},[105,71976,71977,71979],{"class":107,"line":1309},[105,71978,6395],{"class":51285},[105,71980,15564],{"class":115},[105,71982,71983,71985,71987,71989],{"class":107,"line":1321},[105,71984,54680],{"class":164},[105,71986,51422],{"class":115},[105,71988,307],{"class":164},[105,71990,1282],{"class":115},[105,71992,71993,71995,71997,71999],{"class":107,"line":1603},[105,71994,54691],{"class":164},[105,71996,51422],{"class":115},[105,71998,307],{"class":164},[105,72000,1282],{"class":115},[105,72002,72003],{"class":107,"line":1608},[105,72004,2178],{"class":115},[105,72006,72007],{"class":107,"line":1614},[105,72008,2391],{"emptyLinePlaceholder":32},[105,72010,72011,72013],{"class":107,"line":1619},[105,72012,57264],{"class":51285},[105,72014,15564],{"class":115},[105,72016,72017,72019,72021,72023],{"class":107,"line":1633},[105,72018,57271],{"class":164},[105,72020,51422],{"class":115},[105,72022,51577],{"class":164},[105,72024,1282],{"class":115},[105,72026,72027,72029,72031,72033,72035],{"class":107,"line":1638},[105,72028,62062],{"class":164},[105,72030,51422],{"class":115},[105,72032,816],{"class":164},[105,72034,51477],{"class":111},[105,72036,1282],{"class":115},[105,72038,72039],{"class":107,"line":1644},[105,72040,2178],{"class":115},[105,72042,72043],{"class":107,"line":1665},[105,72044,2391],{"emptyLinePlaceholder":32},[105,72046,72047,72050],{"class":107,"line":1670},[105,72048,72049],{"class":1954},"    .info",[105,72051,15564],{"class":115},[105,72053,72054,72056,72058,72060,72062],{"class":107,"line":1684},[105,72055,54756],{"class":164},[105,72057,51422],{"class":115},[105,72059,51474],{"class":164},[105,72061,51477],{"class":111},[105,72063,1282],{"class":115},[105,72065,72066,72068,72070,72072,72074,72076],{"class":107,"line":1689},[105,72067,54691],{"class":164},[105,72069,51422],{"class":115},[105,72071,562],{"class":164},[105,72073,51477],{"class":111},[105,72075,51541],{"class":164},[105,72077,1282],{"class":115},[105,72079,72080,72082,72084,72086],{"class":107,"line":1718},[105,72081,57271],{"class":164},[105,72083,51422],{"class":115},[105,72085,51577],{"class":164},[105,72087,1282],{"class":115},[105,72089,72090],{"class":107,"line":1723},[105,72091,2178],{"class":115},[105,72093,72094],{"class":107,"line":1740},[105,72095,2391],{"emptyLinePlaceholder":32},[105,72097,72098,72101],{"class":107,"line":1745},[105,72099,72100],{"class":1954},"    .uname",[105,72102,31451],{"class":115},[105,72104,72105,72108],{"class":107,"line":1750},[105,72106,72107],{"class":1954},"    .age",[105,72109,31451],{"class":115},[105,72111,72112,72115],{"class":107,"line":1755},[105,72113,72114],{"class":1954},"    .salary",[105,72116,15564],{"class":115},[105,72118,72119,72121,72123,72125,72127],{"class":107,"line":1769},[105,72120,54756],{"class":164},[105,72122,51422],{"class":115},[105,72124,427],{"class":164},[105,72126,51477],{"class":111},[105,72128,1282],{"class":115},[105,72130,72131,72133,72135,72137,72139],{"class":107,"line":1774},[105,72132,54770],{"class":164},[105,72134,51422],{"class":115},[105,72136,816],{"class":164},[105,72138,51477],{"class":111},[105,72140,1282],{"class":115},[105,72142,72143,72145,72147,72149],{"class":107,"line":2568},[105,72144,61765],{"class":164},[105,72146,51422],{"class":115},[105,72148,54722],{"class":164},[105,72150,1282],{"class":115},[105,72152,72153,72155,72157,72159,72161],{"class":107,"line":2582},[105,72154,61735],{"class":164},[105,72156,51422],{"class":115},[105,72158,691],{"class":164},[105,72160,51477],{"class":111},[105,72162,1282],{"class":115},[105,72164,72165],{"class":107,"line":2590},[105,72166,2178],{"class":115},[105,72168,72169],{"class":107,"line":2595},[105,72170,2391],{"emptyLinePlaceholder":32},[105,72172,72173,72176],{"class":107,"line":2601},[105,72174,72175],{"class":1954},"    .gender",[105,72177,31451],{"class":115},[105,72179,72180,72183],{"class":107,"line":2607},[105,72181,72182],{"class":1954},"    .city",[105,72184,15564],{"class":115},[105,72186,72187,72189,72191,72193,72195],{"class":107,"line":2612},[105,72188,54756],{"class":164},[105,72190,51422],{"class":115},[105,72192,427],{"class":164},[105,72194,51477],{"class":111},[105,72196,1282],{"class":115},[105,72198,72199,72201,72203,72205,72207],{"class":107,"line":7940},[105,72200,54770],{"class":164},[105,72202,51422],{"class":115},[105,72204,941],{"class":164},[105,72206,51477],{"class":111},[105,72208,1282],{"class":115},[105,72210,72211,72213,72215,72217],{"class":107,"line":7964},[105,72212,61765],{"class":164},[105,72214,51422],{"class":115},[105,72216,54722],{"class":164},[105,72218,1282],{"class":115},[105,72220,72221,72223,72225,72227,72229],{"class":107,"line":7969},[105,72222,61735],{"class":164},[105,72224,51422],{"class":115},[105,72226,691],{"class":164},[105,72228,51477],{"class":111},[105,72230,1282],{"class":115},[105,72232,72233,72235,72237,72239,72241,72243,72246,72248,72250,72252,72255,72257,72259],{"class":107,"line":7975},[105,72234,61962],{"class":164},[105,72236,51422],{"class":115},[105,72238,333],{"class":164},[105,72240,51477],{"class":111},[105,72242,51506],{"class":164},[105,72244,72245],{"class":164}," rgb",[105,72247,116],{"class":115},[105,72249,1713],{"class":164},[105,72251,12427],{"class":115},[105,72253,72254],{"class":164},"197",[105,72256,12427],{"class":115},[105,72258,72254],{"class":164},[105,72260,2710],{"class":115},[105,72262,72263],{"class":107,"line":8002},[105,72264,2178],{"class":115},[105,72266,72267],{"class":107,"line":8007},[105,72268,2391],{"emptyLinePlaceholder":32},[105,72270,72271,72274],{"class":107,"line":8013},[105,72272,72273],{"class":51285},"    button",[105,72275,15564],{"class":115},[105,72277,72278,72280,72282,72284,72286],{"class":107,"line":8025},[105,72279,54770],{"class":164},[105,72281,51422],{"class":115},[105,72283,941],{"class":164},[105,72285,51477],{"class":111},[105,72287,1282],{"class":115},[105,72289,72290,72292,72294,72296,72298],{"class":107,"line":8037},[105,72291,54756],{"class":164},[105,72293,51422],{"class":115},[105,72295,600],{"class":164},[105,72297,51477],{"class":111},[105,72299,1282],{"class":115},[105,72301,72302,72304,72306,72309,72311,72313,72315,72318,72320,72322],{"class":107,"line":8049},[105,72303,54869],{"class":164},[105,72305,51422],{"class":115},[105,72307,72308],{"class":164},"rgb",[105,72310,116],{"class":115},[105,72312,1085],{"class":164},[105,72314,12427],{"class":115},[105,72316,72317],{"class":164},"187",[105,72319,12427],{"class":115},[105,72321,415],{"class":164},[105,72323,2710],{"class":115},[105,72325,72326,72328,72330,72332],{"class":107,"line":9708},[105,72327,57401],{"class":164},[105,72329,51422],{"class":115},[105,72331,60827],{"class":164},[105,72333,1282],{"class":115},[105,72335,72336,72338,72340,72342],{"class":107,"line":9733},[105,72337,61962],{"class":164},[105,72339,51422],{"class":115},[105,72341,307],{"class":164},[105,72343,1282],{"class":115},[105,72345,72346],{"class":107,"line":9756},[105,72347,2178],{"class":115},[105,72349,72350],{"class":107,"line":9780},[105,72351,2391],{"emptyLinePlaceholder":32},[105,72353,72354,72356,72358],{"class":107,"line":9785},[105,72355,72273],{"class":51285},[105,72357,51673],{"class":51285},[105,72359,15564],{"class":115},[105,72361,72362,72364,72366,72369],{"class":107,"line":9790},[105,72363,54994],{"class":164},[105,72365,51422],{"class":115},[105,72367,72368],{"class":164},"inline-block",[105,72370,1282],{"class":115},[105,72372,72373,72375,72377,72379,72381],{"class":107,"line":9795},[105,72374,54756],{"class":164},[105,72376,51422],{"class":115},[105,72378,562],{"class":164},[105,72380,51477],{"class":111},[105,72382,1282],{"class":115},[105,72384,72385,72387,72389,72391,72393],{"class":107,"line":9804},[105,72386,54770],{"class":164},[105,72388,51422],{"class":115},[105,72390,562],{"class":164},[105,72392,51477],{"class":111},[105,72394,1282],{"class":115},[105,72396,72397,72399,72401,72403,72405],{"class":107,"line":9809},[105,72398,57344],{"class":164},[105,72400,51422],{"class":115},[105,72402,588],{"class":164},[105,72404,51477],{"class":111},[105,72406,1282],{"class":115},[105,72408,72409,72411,72413,72415,72417,72419,72422],{"class":107,"line":9815},[105,72410,61962],{"class":164},[105,72412,51422],{"class":115},[105,72414,333],{"class":164},[105,72416,51477],{"class":111},[105,72418,51506],{"class":164},[105,72420,72421],{"class":164}," #fff",[105,72423,1282],{"class":115},[105,72425,72426,72428,72430,72432,72434],{"class":107,"line":9836},[105,72427,55119],{"class":164},[105,72429,51422],{"class":115},[105,72431,435],{"class":164},[105,72433,51477],{"class":111},[105,72435,1282],{"class":115},[105,72437,72438,72440,72442,72444,72446],{"class":107,"line":9842},[105,72439,61735],{"class":164},[105,72441,51422],{"class":115},[105,72443,333],{"class":164},[105,72445,51477],{"class":111},[105,72447,1282],{"class":115},[105,72449,72450],{"class":107,"line":9856},[105,72451,2178],{"class":115},[105,72453,72454],{"class":107,"line":9862},[105,72455,2391],{"emptyLinePlaceholder":32},[105,72457,72458,72461],{"class":107,"line":9889},[105,72459,72460],{"class":1954},"    .total",[105,72462,15564],{"class":115},[105,72464,72465,72467,72469,72471,72473],{"class":107,"line":9898},[105,72466,54756],{"class":164},[105,72468,51422],{"class":115},[105,72470,61614],{"class":164},[105,72472,51477],{"class":111},[105,72474,1282],{"class":115},[105,72476,72477,72479,72481,72483,72485],{"class":107,"line":9904},[105,72478,54770],{"class":164},[105,72480,51422],{"class":115},[105,72482,517],{"class":164},[105,72484,51477],{"class":111},[105,72486,1282],{"class":115},[105,72488,72489,72491,72493,72495,72497],{"class":107,"line":9912},[105,72490,57344],{"class":164},[105,72492,51422],{"class":115},[105,72494,517],{"class":164},[105,72496,51477],{"class":111},[105,72498,1282],{"class":115},[105,72500,72501,72503,72505,72508],{"class":107,"line":9917},[105,72502,57271],{"class":164},[105,72504,51422],{"class":115},[105,72506,72507],{"class":164},"right",[105,72509,1282],{"class":115},[105,72511,72512,72514,72516,72518,72520,72522,72524,72526],{"class":107,"line":16596},[105,72513,54691],{"class":164},[105,72515,51422],{"class":115},[105,72517,517],{"class":164},[105,72519,51477],{"class":111},[105,72521,51541],{"class":164},[105,72523,2029],{"class":164},[105,72525,51477],{"class":111},[105,72527,1282],{"class":115},[105,72529,72530,72533,72535,72537,72539],{"class":107,"line":16602},[105,72531,72532],{"class":164},"      padding-right",[105,72534,51422],{"class":115},[105,72536,562],{"class":164},[105,72538,51477],{"class":111},[105,72540,1282],{"class":115},[105,72542,72543,72545,72547,72549,72551],{"class":107,"line":16625},[105,72544,54907],{"class":164},[105,72546,51422],{"class":115},[105,72548,639],{"class":164},[105,72550,51477],{"class":111},[105,72552,1282],{"class":115},[105,72554,72555,72557,72559,72561,72563,72566,72568,72571,72573,72575],{"class":107,"line":16631},[105,72556,54869],{"class":164},[105,72558,51422],{"class":115},[105,72560,72308],{"class":164},[105,72562,116],{"class":115},[105,72564,72565],{"class":164},"237",[105,72567,12427],{"class":115},[105,72569,72570],{"class":164},"235",[105,72572,12427],{"class":115},[105,72574,72570],{"class":164},[105,72576,2710],{"class":115},[105,72578,72579,72582,72584,72586],{"class":107,"line":16654},[105,72580,72581],{"class":164},"      box-sizing",[105,72583,51422],{"class":115},[105,72585,60490],{"class":164},[105,72587,1282],{"class":115},[105,72589,72590],{"class":107,"line":16668},[105,72591,2178],{"class":115},[105,72593,72594],{"class":107,"line":16688},[105,72595,2391],{"emptyLinePlaceholder":32},[105,72597,72598,72600,72602],{"class":107,"line":16694},[105,72599,72460],{"class":1954},[105,72601,51673],{"class":51285},[105,72603,15564],{"class":115},[105,72605,72606,72608,72610,72612],{"class":107,"line":16705},[105,72607,57401],{"class":164},[105,72609,51422],{"class":115},[105,72611,57406],{"class":164},[105,72613,1282],{"class":115},[105,72615,72616],{"class":107,"line":16728},[105,72617,2178],{"class":115},[105,72619,72620],{"class":107,"line":16750},[105,72621,2391],{"emptyLinePlaceholder":32},[105,72623,72624,72626],{"class":107,"line":16755},[105,72625,65008],{"class":51285},[105,72627,15564],{"class":115},[105,72629,72630,72632,72634,72636,72638],{"class":107,"line":16761},[105,72631,54756],{"class":164},[105,72633,51422],{"class":115},[105,72635,61614],{"class":164},[105,72637,51477],{"class":111},[105,72639,1282],{"class":115},[105,72641,72642,72644,72646,72649],{"class":107,"line":16775},[105,72643,54691],{"class":164},[105,72645,51422],{"class":115},[105,72647,72648],{"class":164},"auto",[105,72650,1282],{"class":115},[105,72652,72653,72655,72657,72659],{"class":107,"line":16788},[105,72654,65015],{"class":164},[105,72656,51422],{"class":115},[105,72658,65020],{"class":164},[105,72660,1282],{"class":115},[105,72662,72663],{"class":107,"line":16793},[105,72664,2178],{"class":115},[105,72666,72667],{"class":107,"line":16807},[105,72668,2391],{"emptyLinePlaceholder":32},[105,72670,72671,72673],{"class":107,"line":16812},[105,72672,65100],{"class":51285},[105,72674,15564],{"class":115},[105,72676,72677,72679,72681,72683,72685,72687,72689,72691,72693,72695],{"class":107,"line":16818},[105,72678,54869],{"class":164},[105,72680,51422],{"class":115},[105,72682,72308],{"class":164},[105,72684,116],{"class":115},[105,72686,72565],{"class":164},[105,72688,12427],{"class":115},[105,72690,72570],{"class":164},[105,72692,12427],{"class":115},[105,72694,72570],{"class":164},[105,72696,2710],{"class":115},[105,72698,72699],{"class":107,"line":16823},[105,72700,2178],{"class":115},[105,72702,72703],{"class":107,"line":16837},[105,72704,2391],{"emptyLinePlaceholder":32},[105,72706,72707,72709],{"class":107,"line":16842},[105,72708,65100],{"class":51285},[105,72710,31451],{"class":115},[105,72712,72713,72715],{"class":107,"line":16847},[105,72714,65166],{"class":51285},[105,72716,15564],{"class":115},[105,72718,72719,72721,72723,72725,72727],{"class":107,"line":16861},[105,72720,54770],{"class":164},[105,72722,51422],{"class":115},[105,72724,389],{"class":164},[105,72726,51477],{"class":111},[105,72728,1282],{"class":115},[105,72730,72731,72733,72735,72737],{"class":107,"line":16873},[105,72732,57271],{"class":164},[105,72734,51422],{"class":115},[105,72736,23729],{"class":164},[105,72738,1282],{"class":115},[105,72740,72741,72743,72745,72747,72749],{"class":107,"line":16878},[105,72742,54907],{"class":164},[105,72744,51422],{"class":115},[105,72746,665],{"class":164},[105,72748,51477],{"class":111},[105,72750,1282],{"class":115},[105,72752,72753,72755,72757,72759,72761,72763,72765,72767,72770,72772,72775,72777,72779],{"class":107,"line":16891},[105,72754,61962],{"class":164},[105,72756,51422],{"class":115},[105,72758,333],{"class":164},[105,72760,51477],{"class":111},[105,72762,51506],{"class":164},[105,72764,72245],{"class":164},[105,72766,116],{"class":115},[105,72768,72769],{"class":164},"228",[105,72771,12427],{"class":115},[105,72773,72774],{"class":164},"225",[105,72776,12427],{"class":115},[105,72778,72774],{"class":164},[105,72780,2710],{"class":115},[105,72782,72783,72786,72788,72790,72792],{"class":107,"line":16896},[105,72784,72785],{"class":164},"      padding-left",[105,72787,51422],{"class":115},[105,72789,435],{"class":164},[105,72791,51477],{"class":111},[105,72793,1282],{"class":115},[105,72795,72796,72798,72800,72802,72805,72807,72809],{"class":107,"line":16901},[105,72797,61845],{"class":164},[105,72799,51422],{"class":115},[105,72801,28106],{"class":164},[105,72803,72804],{"class":164}," linear",[105,72806,61852],{"class":164},[105,72808,811],{"class":111},[105,72810,1282],{"class":115},[105,72812,72813],{"class":107,"line":16906},[105,72814,2178],{"class":115},[105,72816,72817],{"class":107,"line":16919},[105,72818,2391],{"emptyLinePlaceholder":32},[105,72820,72821,72824,72826,72828],{"class":107,"line":16924},[105,72822,72823],{"class":51285},"    tbody",[105,72825,70129],{"class":51285},[105,72827,60925],{"class":1954},[105,72829,15564],{"class":115},[105,72831,72832,72834,72836,72838,72840,72842,72844,72846,72848,72850],{"class":107,"line":32618},[105,72833,54869],{"class":164},[105,72835,51422],{"class":115},[105,72837,72308],{"class":164},[105,72839,116],{"class":115},[105,72841,72565],{"class":164},[105,72843,12427],{"class":115},[105,72845,72570],{"class":164},[105,72847,12427],{"class":115},[105,72849,72570],{"class":164},[105,72851,2710],{"class":115},[105,72853,72854,72856,72858,72860],{"class":107,"line":32624},[105,72855,62010],{"class":164},[105,72857,51422],{"class":115},[105,72859,62015],{"class":164},[105,72861,1282],{"class":115},[105,72863,72864],{"class":107,"line":32630},[105,72865,2178],{"class":115},[105,72867,72868],{"class":107,"line":32636},[105,72869,2391],{"emptyLinePlaceholder":32},[105,72871,72872,72874,72876,72879,72881],{"class":107,"line":32642},[105,72873,72823],{"class":51285},[105,72875,70129],{"class":51285},[105,72877,72878],{"class":51285}," td",[105,72880,1390],{"class":51285},[105,72882,15564],{"class":115},[105,72884,72885,72887,72889,72891],{"class":107,"line":32653},[105,72886,54994],{"class":164},[105,72888,51422],{"class":115},[105,72890,60854],{"class":164},[105,72892,1282],{"class":115},[105,72894,72895,72897,72899,72901,72903],{"class":107,"line":32659},[105,72896,54756],{"class":164},[105,72898,51422],{"class":115},[105,72900,1023],{"class":164},[105,72902,51477],{"class":111},[105,72904,1282],{"class":115},[105,72906,72907,72909,72911,72913,72915],{"class":107,"line":32679},[105,72908,54770],{"class":164},[105,72910,51422],{"class":115},[105,72912,941],{"class":164},[105,72914,51477],{"class":111},[105,72916,1282],{"class":115},[105,72918,72919,72921,72923,72925,72927],{"class":107,"line":32685},[105,72920,57344],{"class":164},[105,72922,51422],{"class":115},[105,72924,941],{"class":164},[105,72926,51477],{"class":111},[105,72928,1282],{"class":115},[105,72930,72931,72933,72935,72937,72939],{"class":107,"line":32696},[105,72932,62062],{"class":164},[105,72934,51422],{"class":115},[105,72936,193],{"class":164},[105,72938,51477],{"class":111},[105,72940,1282],{"class":115},[105,72942,72943,72945,72947,72949],{"class":107,"line":32702},[105,72944,57401],{"class":164},[105,72946,51422],{"class":115},[105,72948,60827],{"class":164},[105,72950,1282],{"class":115},[105,72952,72953,72955,72957,72959],{"class":107,"line":32708},[105,72954,57271],{"class":164},[105,72956,51422],{"class":115},[105,72958,51577],{"class":164},[105,72960,1282],{"class":115},[105,72962,72963,72965,72967,72969],{"class":107,"line":32714},[105,72964,63955],{"class":164},[105,72966,51422],{"class":115},[105,72968,54722],{"class":164},[105,72970,1282],{"class":115},[105,72972,72973,72975,72977,72980],{"class":107,"line":32720},[105,72974,54869],{"class":164},[105,72976,51422],{"class":115},[105,72978,72979],{"class":164},"orange",[105,72981,1282],{"class":115},[105,72983,72984,72986,72988,72991,72993],{"class":107,"line":32726},[105,72985,55119],{"class":164},[105,72987,51422],{"class":115},[105,72989,72990],{"class":164},"12.5",[105,72992,51477],{"class":111},[105,72994,1282],{"class":115},[105,72996,72997],{"class":107,"line":32732},[105,72998,2178],{"class":115},[105,73000,73001,73003,73005],{"class":107,"line":32738},[105,73002,52402],{"class":115},[105,73004,5118],{"class":51285},[105,73006,51292],{"class":115},[105,73008,73009,73011,73013],{"class":107,"line":32758},[105,73010,51770],{"class":115},[105,73012,51319],{"class":51285},[105,73014,51292],{"class":115},[105,73016,73017],{"class":107,"line":32764},[105,73018,2391],{"emptyLinePlaceholder":32},[105,73020,73021,73023,73025],{"class":107,"line":32780},[105,73022,1026],{"class":115},[105,73024,51785],{"class":51285},[105,73026,51292],{"class":115},[105,73028,73029,73031,73033,73036,73038],{"class":107,"line":32786},[105,73030,52129],{"class":115},[105,73032,47],{"class":51285},[105,73034,73035],{"class":115},">学生就业统计表\u003C\u002F",[105,73037,47],{"class":51285},[105,73039,51292],{"class":115},[105,73041,73042,73044,73046,73048,73050,73052,73054,73056,73058],{"class":107,"line":32800},[105,73043,52129],{"class":115},[105,73045,66610],{"class":51285},[105,73047,53471],{"class":1954},[105,73049,161],{"class":115},[105,73051,62649],{"class":220},[105,73053,69055],{"class":1954},[105,73055,161],{"class":115},[105,73057,31761],{"class":220},[105,73059,51292],{"class":115},[105,73061,73062,73064,73066,73068,73070,73072,73074,73076,73078,73080,73082,73085,73087,73089,73091],{"class":107,"line":32806},[105,73063,51326],{"class":115},[105,73065,53806],{"class":51285},[105,73067,53809],{"class":1954},[105,73069,161],{"class":115},[105,73071,62684],{"class":220},[105,73073,14912],{"class":1954},[105,73075,161],{"class":115},[105,73077,69081],{"class":220},[105,73079,61005],{"class":1954},[105,73081,161],{"class":115},[105,73083,73084],{"class":220},"\"姓名\"",[105,73086,53471],{"class":1954},[105,73088,161],{"class":115},[105,73090,69081],{"class":220},[105,73092,51292],{"class":115},[105,73094,73095,73097,73099,73101,73103,73105,73107,73109,73111,73113,73115,73118,73120,73122,73124],{"class":107,"line":32821},[105,73096,51326],{"class":115},[105,73098,53806],{"class":51285},[105,73100,53809],{"class":1954},[105,73102,161],{"class":115},[105,73104,62684],{"class":220},[105,73106,14912],{"class":1954},[105,73108,161],{"class":115},[105,73110,69109],{"class":220},[105,73112,61005],{"class":1954},[105,73114,161],{"class":115},[105,73116,73117],{"class":220},"\"年龄\"",[105,73119,53471],{"class":1954},[105,73121,161],{"class":115},[105,73123,69109],{"class":220},[105,73125,51292],{"class":115},[105,73127,73128,73130,73132,73134,73136,73138,73140,73142,73144,73146,73148,73151,73153,73155,73157],{"class":107,"line":32827},[105,73129,51326],{"class":115},[105,73131,53806],{"class":51285},[105,73133,53809],{"class":1954},[105,73135,161],{"class":115},[105,73137,62684],{"class":220},[105,73139,14912],{"class":1954},[105,73141,161],{"class":115},[105,73143,69211],{"class":220},[105,73145,61005],{"class":1954},[105,73147,161],{"class":115},[105,73149,73150],{"class":220},"\"薪资\"",[105,73152,53471],{"class":1954},[105,73154,161],{"class":115},[105,73156,69211],{"class":220},[105,73158,51292],{"class":115},[105,73160,73161,73163,73165,73167,73169,73171,73173,73175,73177,73179,73181,73183],{"class":107,"line":32836},[105,73162,51326],{"class":115},[105,73164,69129],{"class":51285},[105,73166,14912],{"class":1954},[105,73168,161],{"class":115},[105,73170,69136],{"class":220},[105,73172,14951],{"class":1954},[105,73174,161],{"class":115},[105,73176,7644],{"class":220},[105,73178,53471],{"class":1954},[105,73180,161],{"class":115},[105,73182,69136],{"class":220},[105,73184,51292],{"class":115},[105,73186,73187,73189,73191,73193,73195,73197,73199,73201],{"class":107,"line":32842},[105,73188,55219],{"class":115},[105,73190,69151],{"class":51285},[105,73192,66636],{"class":1954},[105,73194,161],{"class":115},[105,73196,9953],{"class":220},[105,73198,69160],{"class":115},[105,73200,69151],{"class":51285},[105,73202,51292],{"class":115},[105,73204,73205,73207,73209,73211,73213,73215,73217,73219],{"class":107,"line":32851},[105,73206,55219],{"class":115},[105,73208,69151],{"class":51285},[105,73210,66636],{"class":1954},[105,73212,161],{"class":115},[105,73214,10022],{"class":220},[105,73216,69179],{"class":115},[105,73218,69151],{"class":51285},[105,73220,51292],{"class":115},[105,73222,73223,73225,73227],{"class":107,"line":32857},[105,73224,51761],{"class":115},[105,73226,69129],{"class":51285},[105,73228,51292],{"class":115},[105,73230,73231,73233,73235,73237,73239,73241,73243,73245,73247,73249,73251,73253],{"class":107,"line":32863},[105,73232,51326],{"class":115},[105,73234,69129],{"class":51285},[105,73236,14912],{"class":1954},[105,73238,161],{"class":115},[105,73240,69233],{"class":220},[105,73242,14951],{"class":1954},[105,73244,161],{"class":115},[105,73246,7644],{"class":220},[105,73248,53471],{"class":1954},[105,73250,161],{"class":115},[105,73252,69233],{"class":220},[105,73254,51292],{"class":115},[105,73256,73257,73259,73261,73263,73265,73267,73269,73271],{"class":107,"line":32872},[105,73258,55219],{"class":115},[105,73260,69151],{"class":51285},[105,73262,66636],{"class":1954},[105,73264,161],{"class":115},[105,73266,69254],{"class":220},[105,73268,69257],{"class":115},[105,73270,69151],{"class":51285},[105,73272,51292],{"class":115},[105,73274,73275,73277,73279,73281,73283,73285,73287,73289],{"class":107,"line":32878},[105,73276,55219],{"class":115},[105,73278,69151],{"class":51285},[105,73280,66636],{"class":1954},[105,73282,161],{"class":115},[105,73284,69274],{"class":220},[105,73286,69277],{"class":115},[105,73288,69151],{"class":51285},[105,73290,51292],{"class":115},[105,73292,73293,73295,73297,73299,73301,73303,73305,73307],{"class":107,"line":32889},[105,73294,55219],{"class":115},[105,73296,69151],{"class":51285},[105,73298,66636],{"class":1954},[105,73300,161],{"class":115},[105,73302,69294],{"class":220},[105,73304,69297],{"class":115},[105,73306,69151],{"class":51285},[105,73308,51292],{"class":115},[105,73310,73311,73313,73315,73317,73319,73321,73323,73325],{"class":107,"line":32895},[105,73312,55219],{"class":115},[105,73314,69151],{"class":51285},[105,73316,66636],{"class":1954},[105,73318,161],{"class":115},[105,73320,69314],{"class":220},[105,73322,69317],{"class":115},[105,73324,69151],{"class":51285},[105,73326,51292],{"class":115},[105,73328,73329,73331,73333,73335,73337,73339,73341,73343],{"class":107,"line":32914},[105,73330,55219],{"class":115},[105,73332,69151],{"class":51285},[105,73334,66636],{"class":1954},[105,73336,161],{"class":115},[105,73338,69334],{"class":220},[105,73340,69337],{"class":115},[105,73342,69151],{"class":51285},[105,73344,51292],{"class":115},[105,73346,73347,73349,73351],{"class":107,"line":32920},[105,73348,51761],{"class":115},[105,73350,69129],{"class":51285},[105,73352,51292],{"class":115},[105,73354,73355,73357,73359],{"class":107,"line":32931},[105,73356,51326],{"class":115},[105,73358,53872],{"class":51285},[105,73360,51292],{"class":115},[105,73362,73363,73365,73367,73370,73372,73375,73377],{"class":107,"line":32937},[105,73364,55219],{"class":115},[105,73366,105],{"class":51285},[105,73368,73369],{"class":115},">+\u003C\u002F",[105,73371,105],{"class":51285},[105,73373,73374],{"class":115},">添加\u003C\u002F",[105,73376,53872],{"class":51285},[105,73378,51292],{"class":115},[105,73380,73381,73383,73385],{"class":107,"line":32957},[105,73382,52402],{"class":115},[105,73384,66610],{"class":51285},[105,73386,51292],{"class":115},[105,73388,73389,73391,73393,73395,73397,73399,73402,73404,73407,73409,73412,73414],{"class":107,"line":32973},[105,73390,52129],{"class":115},[105,73392,51596],{"class":51285},[105,73394,53471],{"class":1954},[105,73396,161],{"class":115},[105,73398,62565],{"class":220},[105,73400,73401],{"class":115},">共有数据 \u003C",[105,73403,105],{"class":51285},[105,73405,73406],{"class":115},">0\u003C\u002F",[105,73408,105],{"class":51285},[105,73410,73411],{"class":115},"> 条\u003C\u002F",[105,73413,51596],{"class":51285},[105,73415,51292],{"class":115},[105,73417,73418,73420,73422],{"class":107,"line":32979},[105,73419,52129],{"class":115},[105,73421,253],{"class":51285},[105,73423,51292],{"class":115},[105,73425,73426,73428,73430],{"class":107,"line":32993},[105,73427,51326],{"class":115},[105,73429,256],{"class":51285},[105,73431,51292],{"class":115},[105,73433,73434,73436,73438],{"class":107,"line":32999},[105,73435,55219],{"class":115},[105,73437,259],{"class":51285},[105,73439,51292],{"class":115},[105,73441,73442,73444,73446,73449,73451],{"class":107,"line":33005},[105,73443,55287],{"class":115},[105,73445,262],{"class":51285},[105,73447,73448],{"class":115},">ID\u003C\u002F",[105,73450,262],{"class":51285},[105,73452,51292],{"class":115},[105,73454,73455,73457,73459,73461,73463],{"class":107,"line":33016},[105,73456,55287],{"class":115},[105,73458,262],{"class":51285},[105,73460,69440],{"class":115},[105,73462,262],{"class":51285},[105,73464,51292],{"class":115},[105,73466,73467,73469,73471,73473,73475],{"class":107,"line":33022},[105,73468,55287],{"class":115},[105,73470,262],{"class":51285},[105,73472,69453],{"class":115},[105,73474,262],{"class":51285},[105,73476,51292],{"class":115},[105,73478,73479,73481,73483,73485,73487],{"class":107,"line":33028},[105,73480,55287],{"class":115},[105,73482,262],{"class":51285},[105,73484,69466],{"class":115},[105,73486,262],{"class":51285},[105,73488,51292],{"class":115},[105,73490,73491,73493,73495,73497,73499],{"class":107,"line":33038},[105,73492,55287],{"class":115},[105,73494,262],{"class":51285},[105,73496,69479],{"class":115},[105,73498,262],{"class":51285},[105,73500,51292],{"class":115},[105,73502,73503,73505,73507,73509,73511],{"class":107,"line":33044},[105,73504,55287],{"class":115},[105,73506,262],{"class":51285},[105,73508,69492],{"class":115},[105,73510,262],{"class":51285},[105,73512,51292],{"class":115},[105,73514,73515,73517,73519,73522,73524],{"class":107,"line":33055},[105,73516,55287],{"class":115},[105,73518,262],{"class":51285},[105,73520,73521],{"class":115},">录入时间\u003C\u002F",[105,73523,262],{"class":51285},[105,73525,51292],{"class":115},[105,73527,73528,73530,73532,73534,73536],{"class":107,"line":33061},[105,73529,55287],{"class":115},[105,73531,262],{"class":51285},[105,73533,69505],{"class":115},[105,73535,262],{"class":51285},[105,73537,51292],{"class":115},[105,73539,73540,73542,73544],{"class":107,"line":33071},[105,73541,55392],{"class":115},[105,73543,259],{"class":51285},[105,73545,51292],{"class":115},[105,73547,73548,73550,73552],{"class":107,"line":33076},[105,73549,51761],{"class":115},[105,73551,256],{"class":51285},[105,73553,51292],{"class":115},[105,73555,73556,73558,73560],{"class":107,"line":33082},[105,73557,51326],{"class":115},[105,73559,300],{"class":51285},[105,73561,51292],{"class":115},[105,73563,73564],{"class":107,"line":33131},[105,73565,73566],{"class":174},"      \u003C!-- \u003Ctr>\n",[105,73568,73569],{"class":107,"line":33178},[105,73570,73571],{"class":174},"        \u003Ctd>1\u003C\u002Ftd>\n",[105,73573,73574],{"class":107,"line":33183},[105,73575,73571],{"class":174},[105,73577,73578],{"class":107,"line":33189},[105,73579,73571],{"class":174},[105,73581,73582],{"class":107,"line":33208},[105,73583,73571],{"class":174},[105,73585,73586],{"class":107,"line":33214},[105,73587,73571],{"class":174},[105,73589,73590],{"class":107,"line":33234},[105,73591,73571],{"class":174},[105,73593,73594],{"class":107,"line":33240},[105,73595,73571],{"class":174},[105,73597,73598],{"class":107,"line":33246},[105,73599,73600],{"class":174},"        \u003Ctd>\n",[105,73602,73603],{"class":107,"line":33256},[105,73604,73605],{"class":174},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[105,73607,73608],{"class":107,"line":33261},[105,73609,73610],{"class":174},"        \u003C\u002Ftd>\n",[105,73612,73613],{"class":107,"line":33267},[105,73614,73615],{"class":174},"      \u003C\u002Ftr> -->\n",[105,73617,73618,73620,73622],{"class":107,"line":33283},[105,73619,51761],{"class":115},[105,73621,300],{"class":51285},[105,73623,51292],{"class":115},[105,73625,73626,73628,73630],{"class":107,"line":33328},[105,73627,52402],{"class":115},[105,73629,253],{"class":51285},[105,73631,51292],{"class":115},[105,73633,73634,73636,73638],{"class":107,"line":33334},[105,73635,52129],{"class":115},[105,73637,51798],{"class":51285},[105,73639,51292],{"class":115},[105,73641,73642],{"class":107,"line":33340},[105,73643,73644],{"class":174},"    \u002F\u002F const initData = [{\n",[105,73646,73647],{"class":107,"line":33346},[105,73648,73649],{"class":174},"    \u002F\u002F   unameId: 1,\n",[105,73651,73652],{"class":107,"line":33357},[105,73653,73654],{"class":174},"    \u002F\u002F   uname: '华晨宇',\n",[105,73656,73657],{"class":107,"line":33363},[105,73658,73659],{"class":174},"    \u002F\u002F   age: 22,\n",[105,73661,73662],{"class":107,"line":33369},[105,73663,73664],{"class":174},"    \u002F\u002F   salary: 12000,\n",[105,73666,73667],{"class":107,"line":33375},[105,73668,73669],{"class":174},"    \u002F\u002F   gender: '男',\n",[105,73671,73672],{"class":107,"line":33393},[105,73673,73674],{"class":174},"    \u002F\u002F   city: '北京',\n",[105,73676,73677],{"class":107,"line":33407},[105,73678,73679],{"class":174},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[105,73681,73682],{"class":107,"line":33416},[105,73683,73684],{"class":174},"    \u002F\u002F }]\n",[105,73686,73687],{"class":107,"line":33425},[105,73688,73689],{"class":174},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[105,73691,73692],{"class":107,"line":33434},[105,73693,73694],{"class":174},"    \u002F\u002F 1.渲染业务\n",[105,73696,73697],{"class":107,"line":33443},[105,73698,73699],{"class":174},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[105,73701,73702],{"class":107,"line":33449},[105,73703,73704],{"class":174},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[105,73706,73707],{"class":107,"line":33455},[105,73708,73709],{"class":174},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[105,73711,73712],{"class":107,"line":33463},[105,73713,2391],{"emptyLinePlaceholder":32},[105,73715,73716],{"class":107,"line":33468},[105,73717,73718],{"class":174},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[105,73720,73721],{"class":107,"line":33474},[105,73722,73723],{"class":174},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[105,73725,73726,73728,73730,73732],{"class":107,"line":33485},[105,73727,11213],{"class":111},[105,73729,57680],{"class":164},[105,73731,13556],{"class":111},[105,73733,51823],{"class":115},[105,73735,73736,73739,73741],{"class":107,"line":33491},[105,73737,73738],{"class":115},"    console.",[105,73740,58232],{"class":1954},[105,73742,52397],{"class":115},[105,73744,73745],{"class":107,"line":33511},[105,73746,2391],{"emptyLinePlaceholder":32},[105,73748,73749],{"class":107,"line":33517},[105,73750,73751],{"class":174},"    \u002F\u002F 时间函数\n",[105,73753,73754,73756,73759],{"class":107,"line":33523},[105,73755,70069],{"class":111},[105,73757,73758],{"class":1954}," getTime",[105,73760,10845],{"class":115},[105,73762,73763,73765,73768,73770,73772,73775],{"class":107,"line":33529},[105,73764,58213],{"class":111},[105,73766,73767],{"class":164}," date",[105,73769,13556],{"class":111},[105,73771,11570],{"class":111},[105,73773,73774],{"class":1954}," Date",[105,73776,1967],{"class":115},[105,73778,73779,73781,73783,73785,73788,73791,73793,73795,73797,73800,73803,73805,73807,73809,73811,73813,73815,73817],{"class":107,"line":33546},[105,73780,58213],{"class":111},[105,73782,16083],{"class":164},[105,73784,13556],{"class":111},[105,73786,73787],{"class":115}," date.",[105,73789,73790],{"class":1954},"getHours",[105,73792,13042],{"class":115},[105,73794,1026],{"class":111},[105,73796,2029],{"class":164},[105,73798,73799],{"class":111}," ?",[105,73801,73802],{"class":220}," '0'",[105,73804,45551],{"class":111},[105,73806,73787],{"class":115},[105,73808,73790],{"class":1954},[105,73810,13042],{"class":115},[105,73812,975],{"class":111},[105,73814,73787],{"class":115},[105,73816,73790],{"class":1954},[105,73818,1967],{"class":115},[105,73820,73821,73823,73826,73828,73830,73833,73835,73837,73839,73841,73843,73845,73847,73849,73851,73853,73855,73857],{"class":107,"line":33552},[105,73822,58213],{"class":111},[105,73824,73825],{"class":164}," m",[105,73827,13556],{"class":111},[105,73829,73787],{"class":115},[105,73831,73832],{"class":1954},"getMinutes",[105,73834,13042],{"class":115},[105,73836,1026],{"class":111},[105,73838,2029],{"class":164},[105,73840,73799],{"class":111},[105,73842,73802],{"class":220},[105,73844,45551],{"class":111},[105,73846,73787],{"class":115},[105,73848,73832],{"class":1954},[105,73850,13042],{"class":115},[105,73852,975],{"class":111},[105,73854,73787],{"class":115},[105,73856,73832],{"class":1954},[105,73858,1967],{"class":115},[105,73860,73861,73863,73865,73867,73869,73872,73874,73876,73878,73880,73882,73884,73886,73888,73890,73892,73894,73896],{"class":107,"line":33558},[105,73862,58213],{"class":111},[105,73864,8420],{"class":164},[105,73866,13556],{"class":111},[105,73868,73787],{"class":115},[105,73870,73871],{"class":1954},"getSeconds",[105,73873,13042],{"class":115},[105,73875,1026],{"class":111},[105,73877,2029],{"class":164},[105,73879,73799],{"class":111},[105,73881,73802],{"class":220},[105,73883,45551],{"class":111},[105,73885,73787],{"class":115},[105,73887,73871],{"class":1954},[105,73889,13042],{"class":115},[105,73891,975],{"class":111},[105,73893,73787],{"class":115},[105,73895,73871],{"class":1954},[105,73897,1967],{"class":115},[105,73899,73900,73902,73905,73907,73909,73912,73914,73917,73919,73922,73924,73926,73929,73931,73933,73935,73937,73939,73941,73944,73946,73949,73951,73954,73956,73958,73960],{"class":107,"line":33564},[105,73901,58213],{"class":111},[105,73903,73904],{"class":164}," str",[105,73906,13556],{"class":111},[105,73908,62888],{"class":220},[105,73910,73911],{"class":115},"date",[105,73913,674],{"class":220},[105,73915,73916],{"class":1954},"getFullYear",[105,73918,2418],{"class":220},[105,73920,73921],{"class":220},"}\u002F${",[105,73923,73911],{"class":115},[105,73925,674],{"class":220},[105,73927,73928],{"class":1954},"getMonth",[105,73930,13042],{"class":220},[105,73932,597],{"class":111},[105,73934,25103],{"class":164},[105,73936,73921],{"class":220},[105,73938,73911],{"class":115},[105,73940,674],{"class":220},[105,73942,73943],{"class":1954},"getDate",[105,73945,2418],{"class":220},[105,73947,73948],{"class":220},"} ${",[105,73950,531],{"class":115},[105,73952,73953],{"class":220},"}:${",[105,73955,660],{"class":115},[105,73957,73953],{"class":220},[105,73959,811],{"class":115},[105,73961,73962],{"class":220},"}`\n",[105,73964,73965,73968],{"class":107,"line":33570},[105,73966,73967],{"class":111},"      return",[105,73969,73970],{"class":115}," str\n",[105,73972,73973],{"class":107,"line":33576},[105,73974,2178],{"class":115},[105,73976,73977],{"class":107,"line":33603},[105,73978,73979],{"class":174},"    \u002F\u002F 渲染函数\n",[105,73981,73982,73984,73986,73988,73990,73992,73994,73996],{"class":107,"line":33627},[105,73983,11213],{"class":111},[105,73985,69732],{"class":164},[105,73987,13556],{"class":111},[105,73989,54381],{"class":115},[105,73991,54384],{"class":1954},[105,73993,116],{"class":115},[105,73995,69743],{"class":220},[105,73997,122],{"class":115},[105,73999,74000,74002,74004],{"class":107,"line":33633},[105,74001,70069],{"class":111},[105,74003,70072],{"class":1954},[105,74005,10845],{"class":115},[105,74007,74008],{"class":107,"line":33639},[105,74009,74010],{"class":174},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[105,74012,74013],{"class":107,"line":33645},[105,74014,74015],{"class":174},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[105,74017,74018,74020,74023,74025,74027,74030,74032,74034,74036,74039,74041,74044],{"class":107,"line":33656},[105,74019,58213],{"class":111},[105,74021,74022],{"class":164}," trArr",[105,74024,13556],{"class":111},[105,74026,51950],{"class":115},[105,74028,74029],{"class":1954},"map",[105,74031,116],{"class":115},[105,74033,54434],{"class":111},[105,74035,1649],{"class":115},[105,74037,74038],{"class":5208},"ele",[105,74040,12427],{"class":115},[105,74042,74043],{"class":5208},"index",[105,74045,12434],{"class":115},[105,74047,74048,74050],{"class":107,"line":33667},[105,74049,14744],{"class":111},[105,74051,70153],{"class":220},[105,74053,74054],{"class":107,"line":33673},[105,74055,74056],{"class":220},"      \u003Ctr>\n",[105,74058,74059,74061,74063,74065,74068],{"class":107,"line":33690},[105,74060,70158],{"class":220},[105,74062,74038],{"class":115},[105,74064,674],{"class":220},[105,74066,74067],{"class":115},"unameId",[105,74069,70173],{"class":220},[105,74071,74072,74074,74076,74078,74080],{"class":107,"line":33713},[105,74073,70158],{"class":220},[105,74075,74038],{"class":115},[105,74077,674],{"class":220},[105,74079,70189],{"class":115},[105,74081,70173],{"class":220},[105,74083,74084,74086,74088,74090,74092],{"class":107,"line":33736},[105,74085,70158],{"class":220},[105,74087,74038],{"class":115},[105,74089,674],{"class":220},[105,74091,70206],{"class":115},[105,74093,70173],{"class":220},[105,74095,74096,74098,74100,74102,74104],{"class":107,"line":33742},[105,74097,70158],{"class":220},[105,74099,74038],{"class":115},[105,74101,674],{"class":220},[105,74103,70223],{"class":115},[105,74105,70173],{"class":220},[105,74107,74108,74110,74112,74114,74116],{"class":107,"line":33747},[105,74109,70158],{"class":220},[105,74111,74038],{"class":115},[105,74113,674],{"class":220},[105,74115,70240],{"class":115},[105,74117,70173],{"class":220},[105,74119,74120,74122,74124,74126,74128],{"class":107,"line":33756},[105,74121,70158],{"class":220},[105,74123,74038],{"class":115},[105,74125,674],{"class":220},[105,74127,70257],{"class":115},[105,74129,70173],{"class":220},[105,74131,74132,74134,74136,74138,74140],{"class":107,"line":33766},[105,74133,70158],{"class":220},[105,74135,74038],{"class":115},[105,74137,674],{"class":220},[105,74139,2378],{"class":115},[105,74141,70173],{"class":220},[105,74143,74144],{"class":107,"line":33772},[105,74145,73600],{"class":220},[105,74147,74148,74151,74153],{"class":107,"line":33777},[105,74149,74150],{"class":220},"          \u003Ca href=\"#\" data-id=\"${",[105,74152,74043],{"class":115},[105,74154,74155],{"class":220},"}\">删除\u003C\u002Fa>\n",[105,74157,74158],{"class":107,"line":33783},[105,74159,73610],{"class":220},[105,74161,74162],{"class":107,"line":33796},[105,74163,74164],{"class":220},"      \u003C\u002Ftr>\n",[105,74166,74167],{"class":107,"line":33802},[105,74168,74169],{"class":220},"  `\n",[105,74171,74172],{"class":107,"line":33813},[105,74173,64800],{"class":115},[105,74175,74176,74178,74180],{"class":107,"line":33824},[105,74177,58229],{"class":115},[105,74179,58232],{"class":1954},[105,74181,74182],{"class":115},"(trArr)\n",[105,74184,74185],{"class":107,"line":33843},[105,74186,2391],{"emptyLinePlaceholder":32},[105,74188,74189],{"class":107,"line":49503},[105,74190,74191],{"class":174},"      \u002F\u002F (2) 把数组转换为字符串join\n",[105,74193,74194],{"class":107,"line":49508},[105,74195,74196],{"class":174},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[105,74198,74199,74201,74203,74206,74209,74211,74214],{"class":107,"line":49517},[105,74200,70084],{"class":115},[105,74202,161],{"class":111},[105,74204,74205],{"class":115}," trArr.",[105,74207,74208],{"class":1954},"join",[105,74210,116],{"class":115},[105,74212,74213],{"class":220},"''",[105,74215,122],{"class":115},[105,74217,74218],{"class":107,"line":49526},[105,74219,74220],{"class":174},"      \u002F\u002F 显示共有几条\n",[105,74222,74223,74225,74227,74229,74232,74235,74237,74239],{"class":107,"line":49531},[105,74224,55756],{"class":115},[105,74226,54384],{"class":1954},[105,74228,116],{"class":115},[105,74230,74231],{"class":220},"'.total span'",[105,74233,74234],{"class":115},").innerHTML ",[105,74236,161],{"class":111},[105,74238,51950],{"class":115},[105,74240,55816],{"class":164},[105,74242,74243],{"class":107,"line":49536},[105,74244,2178],{"class":115},[105,74246,74247],{"class":107,"line":49541},[105,74248,74249],{"class":174},"    \u002F\u002F render()\n",[105,74251,74252],{"class":107,"line":49554},[105,74253,2391],{"emptyLinePlaceholder":32},[105,74255,74256],{"class":107,"line":49559},[105,74257,74258],{"class":174},"    \u002F\u002F 获取DOM对象\n",[105,74260,74261,74263,74265,74267,74269,74271,74273,74275],{"class":107,"line":49568},[105,74262,11213],{"class":111},[105,74264,69806],{"class":164},[105,74266,13556],{"class":111},[105,74268,54381],{"class":115},[105,74270,54384],{"class":1954},[105,74272,116],{"class":115},[105,74274,69817],{"class":220},[105,74276,122],{"class":115},[105,74278,74279,74281,74283,74285,74287,74289,74291,74293],{"class":107,"line":49577},[105,74280,11213],{"class":111},[105,74282,69633],{"class":164},[105,74284,13556],{"class":111},[105,74286,54381],{"class":115},[105,74288,54384],{"class":1954},[105,74290,116],{"class":115},[105,74292,69644],{"class":220},[105,74294,122],{"class":115},[105,74296,74297,74299,74301,74303,74305,74307,74309,74311],{"class":107,"line":49594},[105,74298,11213],{"class":111},[105,74300,15681],{"class":164},[105,74302,13556],{"class":111},[105,74304,54381],{"class":115},[105,74306,54384],{"class":1954},[105,74308,116],{"class":115},[105,74310,69663],{"class":220},[105,74312,122],{"class":115},[105,74314,74316,74318,74320,74322,74324,74326,74328,74330],{"class":107,"line":74315},231,[105,74317,11213],{"class":111},[105,74319,69692],{"class":164},[105,74321,13556],{"class":111},[105,74323,54381],{"class":115},[105,74325,54384],{"class":1954},[105,74327,116],{"class":115},[105,74329,69703],{"class":220},[105,74331,122],{"class":115},[105,74333,74335,74337,74339,74341,74343,74345,74347,74349],{"class":107,"line":74334},232,[105,74336,11213],{"class":111},[105,74338,69672],{"class":164},[105,74340,13556],{"class":111},[105,74342,54381],{"class":115},[105,74344,54384],{"class":1954},[105,74346,116],{"class":115},[105,74348,69683],{"class":220},[105,74350,122],{"class":115},[105,74352,74354,74356,74358,74360,74362,74364,74366,74368],{"class":107,"line":74353},233,[105,74355,11213],{"class":111},[105,74357,69712],{"class":164},[105,74359,13556],{"class":111},[105,74361,54381],{"class":115},[105,74363,54384],{"class":1954},[105,74365,116],{"class":115},[105,74367,69723],{"class":220},[105,74369,122],{"class":115},[105,74371,74373],{"class":107,"line":74372},234,[105,74374,2391],{"emptyLinePlaceholder":32},[105,74376,74378],{"class":107,"line":74377},235,[105,74379,74380],{"class":174},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[105,74382,74384,74386,74388,74390,74392,74394,74396,74398,74400],{"class":107,"line":74383},236,[105,74385,69824],{"class":115},[105,74387,57798],{"class":1954},[105,74389,116],{"class":115},[105,74391,69831],{"class":220},[105,74393,12427],{"class":115},[105,74395,54434],{"class":111},[105,74397,1649],{"class":115},[105,74399,190],{"class":5208},[105,74401,12434],{"class":115},[105,74403,74405],{"class":107,"line":74404},237,[105,74406,74407],{"class":174},"      \u002F\u002F 禁止浏览器跳转\n",[105,74409,74411,74413,74415],{"class":107,"line":74410},238,[105,74412,69851],{"class":115},[105,74414,69854],{"class":1954},[105,74416,1967],{"class":115},[105,74418,74420],{"class":107,"line":74419},239,[105,74421,74422],{"class":174},"      \u002F\u002F 非空判断\n",[105,74424,74426],{"class":107,"line":74425},240,[105,74427,74428],{"class":174},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[105,74430,74432],{"class":107,"line":74431},241,[105,74433,74434],{"class":174},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[105,74436,74438,74440,74442,74444,74447,74449,74452,74455,74457,74459],{"class":107,"line":74437},242,[105,74439,54465],{"class":111},[105,74441,1649],{"class":115},[105,74443,342],{"class":111},[105,74445,74446],{"class":115},"uname.value ",[105,74448,71342],{"class":111},[105,74450,74451],{"class":111}," !",[105,74453,74454],{"class":115},"age.value ",[105,74456,71342],{"class":111},[105,74458,74451],{"class":111},[105,74460,74461],{"class":115},"salary.value) {\n",[105,74463,74465,74467,74469,74471,74473],{"class":107,"line":74464},243,[105,74466,14744],{"class":111},[105,74468,69925],{"class":1954},[105,74470,116],{"class":115},[105,74472,69930],{"class":220},[105,74474,122],{"class":115},[105,74476,74478],{"class":107,"line":74477},244,[105,74479,52383],{"class":115},[105,74481,74483,74485,74487],{"class":107,"line":74482},245,[105,74484,57992],{"class":115},[105,74486,51869],{"class":1954},[105,74488,74489],{"class":115},"({\n",[105,74491,74493],{"class":107,"line":74492},246,[105,74494,74495],{"class":174},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[105,74497,74499],{"class":107,"line":74498},247,[105,74500,74501],{"class":174},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[105,74503,74505],{"class":107,"line":74504},248,[105,74506,74507],{"class":174},"        \u002F\u002F 对象的序号应为数组长度+1\n",[105,74509,74511],{"class":107,"line":74510},249,[105,74512,74513],{"class":174},"        \u002F\u002F unameId: arr.length + 1,\n",[105,74515,74517],{"class":107,"line":74516},250,[105,74518,2391],{"emptyLinePlaceholder":32},[105,74520,74522],{"class":107,"line":74521},251,[105,74523,74524],{"class":174},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[105,74526,74528],{"class":107,"line":74527},252,[105,74529,74530],{"class":174},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[105,74532,74534],{"class":107,"line":74533},253,[105,74535,74536],{"class":174},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[105,74538,74540],{"class":107,"line":74539},254,[105,74541,74542],{"class":174},"        \u002F\u002F 0当假看\n",[105,74544,74546,74549,74551,74553,74556,74558,74560,74562,74565,74567,74569,74572,74574],{"class":107,"line":74545},255,[105,74547,74548],{"class":115},"        unameId: arr.",[105,74550,51953],{"class":164},[105,74552,73799],{"class":111},[105,74554,74555],{"class":115}," arr[arr.",[105,74557,51953],{"class":164},[105,74559,52256],{"class":111},[105,74561,25103],{"class":164},[105,74563,74564],{"class":115},"].unameId ",[105,74566,597],{"class":111},[105,74568,25103],{"class":164},[105,74570,74571],{"class":111}," :",[105,74573,25103],{"class":164},[105,74575,31451],{"class":115},[105,74577,74579],{"class":107,"line":74578},256,[105,74580,69978],{"class":115},[105,74582,74584],{"class":107,"line":74583},257,[105,74585,69983],{"class":115},[105,74587,74589],{"class":107,"line":74588},258,[105,74590,69993],{"class":115},[105,74592,74594],{"class":107,"line":74593},259,[105,74595,69988],{"class":115},[105,74597,74599],{"class":107,"line":74598},260,[105,74600,74601],{"class":115},"        city: city.value,\n",[105,74603,74605],{"class":107,"line":74604},261,[105,74606,74607],{"class":174},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[105,74609,74611],{"class":107,"line":74610},262,[105,74612,74613],{"class":174},"        \u002F\u002F time: new Date().toDateString()\n",[105,74615,74617,74620,74623],{"class":107,"line":74616},263,[105,74618,74619],{"class":115},"        time: ",[105,74621,74622],{"class":1954},"getTime",[105,74624,1967],{"class":115},[105,74626,74628],{"class":107,"line":74627},264,[105,74629,64800],{"class":115},[105,74631,74633],{"class":107,"line":74632},265,[105,74634,74635],{"class":174},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[105,74637,74639,74641],{"class":107,"line":74638},266,[105,74640,70053],{"class":1954},[105,74642,1967],{"class":115},[105,74644,74646,74648,74650,74652,74654],{"class":107,"line":74645},267,[105,74647,70036],{"class":164},[105,74649,674],{"class":115},[105,74651,70041],{"class":1954},[105,74653,13042],{"class":115},[105,74655,74656],{"class":174},"\u002F\u002F重置表单\n",[105,74658,74660],{"class":107,"line":74659},268,[105,74661,74662],{"class":174},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[105,74664,74666,74669,74671,74673,74676,74678,74680,74682,74684],{"class":107,"line":74665},269,[105,74667,74668],{"class":115},"      localStorage.",[105,74670,71639],{"class":1954},[105,74672,116],{"class":115},[105,74674,74675],{"class":220},"'data'",[105,74677,12427],{"class":115},[105,74679,71649],{"class":164},[105,74681,674],{"class":115},[105,74683,71654],{"class":1954},[105,74685,74686],{"class":115},"(arr))\n",[105,74688,74690],{"class":107,"line":74689},270,[105,74691,33446],{"class":115},[105,74693,74695],{"class":107,"line":74694},271,[105,74696,2391],{"emptyLinePlaceholder":32},[105,74698,74700],{"class":107,"line":74699},272,[105,74701,74702],{"class":174},"    \u002F\u002F 3.删除业务\n",[105,74704,74706],{"class":107,"line":74705},273,[105,74707,74708],{"class":174},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[105,74710,74712,74714,74716,74718,74720,74722,74724,74726,74728],{"class":107,"line":74711},274,[105,74713,70326],{"class":115},[105,74715,57798],{"class":1954},[105,74717,116],{"class":115},[105,74719,57803],{"class":220},[105,74721,12427],{"class":115},[105,74723,54434],{"class":111},[105,74725,1649],{"class":115},[105,74727,190],{"class":5208},[105,74729,12434],{"class":115},[105,74731,74733],{"class":107,"line":74732},275,[105,74734,74735],{"class":174},"      \u002F\u002F 判断是否点击的是删除按钮\n",[105,74737,74739,74741,74743,74745,74747],{"class":107,"line":74738},276,[105,74740,54465],{"class":111},[105,74742,67019],{"class":115},[105,74744,54471],{"class":111},[105,74746,68241],{"class":220},[105,74748,12434],{"class":115},[105,74750,74752],{"class":107,"line":74751},277,[105,74753,74754],{"class":174},"        \u002F\u002F alert(1)\n",[105,74756,74758],{"class":107,"line":74757},278,[105,74759,74760],{"class":174},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[105,74762,74764],{"class":107,"line":74763},279,[105,74765,74766],{"class":174},"        \u002F\u002F console.log(e.target)\n",[105,74768,74770],{"class":107,"line":74769},280,[105,74771,74772],{"class":174},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[105,74774,74776],{"class":107,"line":74775},281,[105,74777,2391],{"emptyLinePlaceholder":32},[105,74779,74781],{"class":107,"line":74780},282,[105,74782,74783],{"class":174},"        \u002F\u002F 确认框，确然是否真的要删除\n",[105,74785,74787],{"class":107,"line":74786},283,[105,74788,74789],{"class":174},"        \u002F\u002F confirm()为确认框\n",[105,74791,74793],{"class":107,"line":74792},284,[105,74794,74795],{"class":174},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[105,74797,74799,74801,74803,74806,74808,74811],{"class":107,"line":74798},285,[105,74800,2488],{"class":111},[105,74802,1649],{"class":115},[105,74804,74805],{"class":1954},"confirm",[105,74807,116],{"class":115},[105,74809,74810],{"class":220},"'您确定要删除这条数据吗？'",[105,74812,74813],{"class":115},")) {\n",[105,74815,74817,74820,74822,74824,74826],{"class":107,"line":74816},286,[105,74818,74819],{"class":115},"          arr.",[105,74821,57995],{"class":1954},[105,74823,70379],{"class":115},[105,74825,333],{"class":164},[105,74827,122],{"class":115},[105,74829,74831],{"class":107,"line":74830},287,[105,74832,74833],{"class":174},"          \u002F\u002F 3.4 重新渲染页面\n",[105,74835,74837,74840],{"class":107,"line":74836},288,[105,74838,74839],{"class":1954},"          render",[105,74841,1967],{"class":115},[105,74843,74845],{"class":107,"line":74844},289,[105,74846,74847],{"class":174},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[105,74849,74851,74854,74856,74858,74860,74862,74864,74866,74868],{"class":107,"line":74850},290,[105,74852,74853],{"class":115},"          localStorage.",[105,74855,71639],{"class":1954},[105,74857,116],{"class":115},[105,74859,74675],{"class":220},[105,74861,12427],{"class":115},[105,74863,71649],{"class":164},[105,74865,674],{"class":115},[105,74867,71654],{"class":1954},[105,74869,74686],{"class":115},[105,74871,74873],{"class":107,"line":74872},291,[105,74874,2520],{"class":115},[105,74876,74878],{"class":107,"line":74877},292,[105,74879,52383],{"class":115},[105,74881,74883],{"class":107,"line":74882},293,[105,74884,2391],{"emptyLinePlaceholder":32},[105,74886,74888],{"class":107,"line":74887},294,[105,74889,33446],{"class":115},[105,74891,74893],{"class":107,"line":74892},295,[105,74894,2391],{"emptyLinePlaceholder":32},[105,74896,74898,74900,74902],{"class":107,"line":74897},296,[105,74899,52402],{"class":115},[105,74901,51798],{"class":51285},[105,74903,51292],{"class":115},[105,74905,74907,74909,74911],{"class":107,"line":74906},297,[105,74908,51770],{"class":115},[105,74910,51785],{"class":51285},[105,74912,51292],{"class":115},[105,74914,74916],{"class":107,"line":74915},298,[105,74917,2391],{"emptyLinePlaceholder":32},[105,74919,74921,74923,74925],{"class":107,"line":74920},299,[105,74922,51770],{"class":115},[105,74924,50620],{"class":51285},[105,74926,51292],{"class":115},[47,74928,74930],{"id":74929},"_36-正则表达式","3.6 正则表达式",[14,74932,74933],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,74935,74936],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,74938,74939],{},"正则表达式的作用：",[1123,74941,74942,74949,74955],{},[62,74943,74944,74945,74948],{},"表单验证（ ",[265,74946,74947],{},"匹配"," ）",[62,74950,74951,74952,74948],{},"过滤敏感词（ ",[265,74953,74954],{},"替换",[62,74956,74957,74958,74948],{},"字符串中提取我们想要的部分（ ",[265,74959,74960],{},"提取",[76,74962,74964],{"id":74963},"_361-语法","3.6.1 语法",[14,74966,74967],{},"正则表达式使用步骤：",[59,74969,74970,74973],{},[62,74971,74972],{},"定义规则",[62,74974,74975],{},"查找是否匹配",[14,74977,74978],{},"正则表达式里边不需要写引号",[14,74980,74981],{},[20,74982],{"alt":22,"src":74983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,74985,74986],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,74988,74989],{},"reg.test(str)",[14,74991,74992],{},[20,74993],{"alt":22,"src":74994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,74996,74997],{},[20,74998],{"alt":22,"src":74999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[76,75001,75003],{"id":75002},"_362-元字符","3.6.2 元字符",[59,75005,75006,75009,75012,75015,75022],{},[62,75007,75008],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[62,75010,75011],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[62,75013,75014],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[62,75016,75017,75018],{},"正则验证工具：",[354,75019,75020],{"href":75020,"rel":75021},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23858],[62,75023,75024],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21990,75026,75028],{"id":75027},"_3621-边界符","3.6.2.1 边界符",[14,75030,75031],{},[20,75032],{"alt":22,"src":75033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75035,75036],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75038,75039],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75041,75042],{},"只匹配一次",[14,75044,75045],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21990,75047,75049],{"id":75048},"_3622-量词","3.6.2.2 量词",[14,75051,75052],{},[20,75053],{"alt":22,"src":75054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75056,75057],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21990,75059,75061],{"id":75060},"_3623-元字符","3.6.2.3 元字符",[14,75063,75064],{},[20,75065],{"alt":22,"src":75066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75068,75069],{},"匹配的是a或b或c []只选一个",[14,75071,75072],{},[20,75073],{"alt":22,"src":75074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75076,75077],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75079,75080],{},[20,75081],{"alt":22,"src":75082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75084,75085],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75087,75088],{},[20,75089],{"alt":22,"src":75090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[96,75092,75094],{"className":50618,"code":75093,"language":50620,"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",[102,75095,75096,75106,75120,75124,75132,75146,75166,75178,75186,75190,75198,75206,75211,75242,75269,75297,75301,75306,75334,75365,75370,75375,75406,75438,75470,75474,75479,75510,75540,75570,75574,75579,75610,75641,75671,75701,75705,75710,75743,75747,75752,75783,75814,75818,75823,75854,75884,75915,75919,75924,75956,75987,76018,76045,76076,76108,76141,76172,76203,76235,76266,76274,76282,76286],{"__ignoreMap":22},[105,75097,75098,75100,75102,75104],{"class":107,"line":108},[105,75099,51282],{"class":115},[105,75101,51286],{"class":51285},[105,75103,51289],{"class":1954},[105,75105,51292],{"class":115},[105,75107,75108,75110,75112,75114,75116,75118],{"class":107,"line":28},[105,75109,1026],{"class":115},[105,75111,50620],{"class":51285},[105,75113,51301],{"class":1954},[105,75115,161],{"class":115},[105,75117,51306],{"class":220},[105,75119,51292],{"class":115},[105,75121,75122],{"class":107,"line":1171},[105,75123,2391],{"emptyLinePlaceholder":32},[105,75125,75126,75128,75130],{"class":107,"line":1186},[105,75127,1026],{"class":115},[105,75129,51319],{"class":51285},[105,75131,51292],{"class":115},[105,75133,75134,75136,75138,75140,75142,75144],{"class":107,"line":1192},[105,75135,52129],{"class":115},[105,75137,51329],{"class":51285},[105,75139,51332],{"class":1954},[105,75141,161],{"class":115},[105,75143,51337],{"class":220},[105,75145,51292],{"class":115},[105,75147,75148,75150,75152,75154,75156,75158,75160,75162,75164],{"class":107,"line":1206},[105,75149,52129],{"class":115},[105,75151,51329],{"class":51285},[105,75153,14912],{"class":1954},[105,75155,161],{"class":115},[105,75157,51376],{"class":220},[105,75159,51356],{"class":1954},[105,75161,161],{"class":115},[105,75163,51383],{"class":220},[105,75165,51292],{"class":115},[105,75167,75168,75170,75172,75174,75176],{"class":107,"line":1212},[105,75169,52129],{"class":115},[105,75171,51392],{"class":51285},[105,75173,51395],{"class":115},[105,75175,51392],{"class":51285},[105,75177,51292],{"class":115},[105,75179,75180,75182,75184],{"class":107,"line":1303},[105,75181,51770],{"class":115},[105,75183,51319],{"class":51285},[105,75185,51292],{"class":115},[105,75187,75188],{"class":107,"line":1309},[105,75189,2391],{"emptyLinePlaceholder":32},[105,75191,75192,75194,75196],{"class":107,"line":1321},[105,75193,1026],{"class":115},[105,75195,51785],{"class":51285},[105,75197,51292],{"class":115},[105,75199,75200,75202,75204],{"class":107,"line":1603},[105,75201,52129],{"class":115},[105,75203,51798],{"class":51285},[105,75205,51292],{"class":115},[105,75207,75208],{"class":107,"line":1608},[105,75209,75210],{"class":174},"    \u002F\u002F 元字符中\n",[105,75212,75213,75215,75217,75219,75221,75224,75226,75228,75231,75233,75236,75239],{"class":107,"line":1614},[105,75214,73738],{"class":115},[105,75216,58232],{"class":1954},[105,75218,116],{"class":115},[105,75220,700],{"class":220},[105,75222,75223],{"class":47962},"哈",[105,75225,700],{"class":220},[105,75227,674],{"class":115},[105,75229,75230],{"class":1954},"test",[105,75232,116],{"class":115},[105,75234,75235],{"class":220},"'哈'",[105,75237,75238],{"class":115},"))  ",[105,75240,75241],{"class":174},"\u002F\u002Ftrue\n",[105,75243,75244,75246,75248,75250,75252,75254,75256,75258,75260,75262,75265,75267],{"class":107,"line":1619},[105,75245,73738],{"class":115},[105,75247,58232],{"class":1954},[105,75249,116],{"class":115},[105,75251,700],{"class":220},[105,75253,75223],{"class":47962},[105,75255,700],{"class":220},[105,75257,674],{"class":115},[105,75259,75230],{"class":1954},[105,75261,116],{"class":115},[105,75263,75264],{"class":220},"'哈哈'",[105,75266,75238],{"class":115},[105,75268,75241],{"class":174},[105,75270,75271,75273,75275,75277,75279,75281,75283,75285,75287,75289,75292,75295],{"class":107,"line":1633},[105,75272,73738],{"class":115},[105,75274,58232],{"class":1954},[105,75276,116],{"class":115},[105,75278,700],{"class":220},[105,75280,75223],{"class":47962},[105,75282,700],{"class":220},[105,75284,674],{"class":115},[105,75286,75230],{"class":1954},[105,75288,116],{"class":115},[105,75290,75291],{"class":220},"'二哈'",[105,75293,75294],{"class":115},"))   ",[105,75296,75241],{"class":174},[105,75298,75299],{"class":107,"line":1638},[105,75300,2391],{"emptyLinePlaceholder":32},[105,75302,75303],{"class":107,"line":1644},[105,75304,75305],{"class":174},"    \u002F\u002F 1.边界符\n",[105,75307,75308,75310,75312,75314,75316,75318,75320,75322,75324,75326,75328,75330,75332],{"class":107,"line":1665},[105,75309,73738],{"class":115},[105,75311,58232],{"class":1954},[105,75313,116],{"class":115},[105,75315,700],{"class":220},[105,75317,1082],{"class":111},[105,75319,75223],{"class":47962},[105,75321,700],{"class":220},[105,75323,674],{"class":115},[105,75325,75230],{"class":1954},[105,75327,116],{"class":115},[105,75329,75235],{"class":220},[105,75331,75238],{"class":115},[105,75333,75241],{"class":174},[105,75335,75336,75338,75340,75342,75344,75346,75348,75350,75352,75354,75356,75358,75360,75362],{"class":107,"line":1670},[105,75337,73738],{"class":115},[105,75339,58232],{"class":1954},[105,75341,116],{"class":115},[105,75343,700],{"class":220},[105,75345,1082],{"class":111},[105,75347,75223],{"class":47962},[105,75349,418],{"class":111},[105,75351,700],{"class":220},[105,75353,674],{"class":115},[105,75355,75230],{"class":1954},[105,75357,116],{"class":115},[105,75359,75264],{"class":220},[105,75361,75238],{"class":115},[105,75363,75364],{"class":174},"\u002F\u002Ffalse\n",[105,75366,75367],{"class":107,"line":1684},[105,75368,75369],{"class":174},"    \u002F\u002F 2.量词\n",[105,75371,75372],{"class":107,"line":1689},[105,75373,75374],{"class":174},"    \u002F\u002F 量词 * 类似于 >= 0\n",[105,75376,75377,75379,75381,75383,75385,75387,75389,75392,75394,75396,75398,75400,75402,75404],{"class":107,"line":1718},[105,75378,73738],{"class":115},[105,75380,58232],{"class":1954},[105,75382,116],{"class":115},[105,75384,700],{"class":220},[105,75386,1082],{"class":111},[105,75388,75223],{"class":47962},[105,75390,75391],{"class":111},"*$",[105,75393,700],{"class":220},[105,75395,674],{"class":115},[105,75397,75230],{"class":1954},[105,75399,116],{"class":115},[105,75401,75264],{"class":220},[105,75403,75238],{"class":115},[105,75405,75241],{"class":174},[105,75407,75408,75410,75412,75414,75416,75418,75420,75422,75424,75426,75428,75430,75433,75435],{"class":107,"line":1723},[105,75409,73738],{"class":115},[105,75411,58232],{"class":1954},[105,75413,116],{"class":115},[105,75415,700],{"class":220},[105,75417,1082],{"class":111},[105,75419,75223],{"class":47962},[105,75421,75391],{"class":111},[105,75423,700],{"class":220},[105,75425,674],{"class":115},[105,75427,75230],{"class":1954},[105,75429,116],{"class":115},[105,75431,75432],{"class":220},"'二哈好傻'",[105,75434,75238],{"class":115},[105,75436,75437],{"class":174},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[105,75439,75440,75442,75444,75446,75448,75450,75452,75454,75456,75458,75460,75462,75465,75467],{"class":107,"line":1740},[105,75441,73738],{"class":115},[105,75443,58232],{"class":1954},[105,75445,116],{"class":115},[105,75447,700],{"class":220},[105,75449,1082],{"class":111},[105,75451,75223],{"class":47962},[105,75453,75391],{"class":111},[105,75455,700],{"class":220},[105,75457,674],{"class":115},[105,75459,75230],{"class":1954},[105,75461,116],{"class":115},[105,75463,75464],{"class":220},"'哈好哈'",[105,75466,75294],{"class":115},[105,75468,75469],{"class":174},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[105,75471,75472],{"class":107,"line":1745},[105,75473,2391],{"emptyLinePlaceholder":32},[105,75475,75476],{"class":107,"line":1750},[105,75477,75478],{"class":174},"    \u002F\u002F +类似于>=1\n",[105,75480,75481,75483,75485,75487,75489,75491,75493,75496,75498,75500,75502,75504,75506,75508],{"class":107,"line":1755},[105,75482,73738],{"class":115},[105,75484,58232],{"class":1954},[105,75486,116],{"class":115},[105,75488,700],{"class":220},[105,75490,1082],{"class":111},[105,75492,75223],{"class":47962},[105,75494,75495],{"class":111},"+$",[105,75497,700],{"class":220},[105,75499,674],{"class":115},[105,75501,75230],{"class":1954},[105,75503,116],{"class":115},[105,75505,75264],{"class":220},[105,75507,75238],{"class":115},[105,75509,75241],{"class":174},[105,75511,75512,75514,75516,75518,75520,75522,75524,75526,75528,75530,75532,75534,75536,75538],{"class":107,"line":1769},[105,75513,73738],{"class":115},[105,75515,58232],{"class":1954},[105,75517,116],{"class":115},[105,75519,700],{"class":220},[105,75521,1082],{"class":111},[105,75523,75223],{"class":47962},[105,75525,75495],{"class":111},[105,75527,700],{"class":220},[105,75529,674],{"class":115},[105,75531,75230],{"class":1954},[105,75533,116],{"class":115},[105,75535,75432],{"class":220},[105,75537,75238],{"class":115},[105,75539,75437],{"class":174},[105,75541,75542,75544,75546,75548,75550,75552,75554,75556,75558,75560,75562,75564,75566,75568],{"class":107,"line":1774},[105,75543,73738],{"class":115},[105,75545,58232],{"class":1954},[105,75547,116],{"class":115},[105,75549,700],{"class":220},[105,75551,1082],{"class":111},[105,75553,75223],{"class":47962},[105,75555,75495],{"class":111},[105,75557,700],{"class":220},[105,75559,674],{"class":115},[105,75561,75230],{"class":1954},[105,75563,116],{"class":115},[105,75565,75464],{"class":220},[105,75567,75294],{"class":115},[105,75569,75364],{"class":174},[105,75571,75572],{"class":107,"line":2568},[105,75573,2391],{"emptyLinePlaceholder":32},[105,75575,75576],{"class":107,"line":2582},[105,75577,75578],{"class":174},"    \u002F\u002F ?类似于0次或一次\n",[105,75580,75581,75583,75585,75587,75589,75591,75594,75596,75598,75600,75602,75604,75606,75608],{"class":107,"line":2590},[105,75582,73738],{"class":115},[105,75584,58232],{"class":1954},[105,75586,116],{"class":115},[105,75588,700],{"class":220},[105,75590,1082],{"class":111},[105,75592,75593],{"class":47962},"哈？",[105,75595,418],{"class":111},[105,75597,700],{"class":220},[105,75599,674],{"class":115},[105,75601,75230],{"class":1954},[105,75603,116],{"class":115},[105,75605,74213],{"class":220},[105,75607,75294],{"class":115},[105,75609,75241],{"class":174},[105,75611,75612,75614,75616,75618,75620,75622,75624,75627,75629,75631,75633,75635,75637,75639],{"class":107,"line":2595},[105,75613,73738],{"class":115},[105,75615,58232],{"class":1954},[105,75617,116],{"class":115},[105,75619,700],{"class":220},[105,75621,1082],{"class":111},[105,75623,75223],{"class":47962},[105,75625,75626],{"class":111},"?$",[105,75628,700],{"class":220},[105,75630,674],{"class":115},[105,75632,75230],{"class":1954},[105,75634,116],{"class":115},[105,75636,75264],{"class":220},[105,75638,75238],{"class":115},[105,75640,75364],{"class":174},[105,75642,75643,75645,75647,75649,75651,75653,75655,75657,75659,75661,75663,75665,75667,75669],{"class":107,"line":2601},[105,75644,73738],{"class":115},[105,75646,58232],{"class":1954},[105,75648,116],{"class":115},[105,75650,700],{"class":220},[105,75652,1082],{"class":111},[105,75654,75223],{"class":47962},[105,75656,75626],{"class":111},[105,75658,700],{"class":220},[105,75660,674],{"class":115},[105,75662,75230],{"class":1954},[105,75664,116],{"class":115},[105,75666,75432],{"class":220},[105,75668,75238],{"class":115},[105,75670,75437],{"class":174},[105,75672,75673,75675,75677,75679,75681,75683,75685,75687,75689,75691,75693,75695,75697,75699],{"class":107,"line":2607},[105,75674,73738],{"class":115},[105,75676,58232],{"class":1954},[105,75678,116],{"class":115},[105,75680,700],{"class":220},[105,75682,1082],{"class":111},[105,75684,75223],{"class":47962},[105,75686,75626],{"class":111},[105,75688,700],{"class":220},[105,75690,674],{"class":115},[105,75692,75230],{"class":1954},[105,75694,116],{"class":115},[105,75696,75464],{"class":220},[105,75698,75238],{"class":115},[105,75700,75364],{"class":174},[105,75702,75703],{"class":107,"line":2612},[105,75704,2391],{"emptyLinePlaceholder":32},[105,75706,75707],{"class":107,"line":7940},[105,75708,75709],{"class":174},"    \u002F\u002F {n}写几，就必须出现几次\n",[105,75711,75712,75714,75716,75718,75720,75722,75724,75727,75729,75731,75733,75735,75738,75741],{"class":107,"line":7964},[105,75713,73738],{"class":115},[105,75715,58232],{"class":1954},[105,75717,116],{"class":115},[105,75719,700],{"class":220},[105,75721,1082],{"class":111},[105,75723,75223],{"class":47962},[105,75725,75726],{"class":111},"{4}$",[105,75728,700],{"class":220},[105,75730,674],{"class":115},[105,75732,75230],{"class":1954},[105,75734,116],{"class":115},[105,75736,75737],{"class":220},"'哈哈哈哈'",[105,75739,75740],{"class":115},")) ",[105,75742,75241],{"class":174},[105,75744,75745],{"class":107,"line":7969},[105,75746,2391],{"emptyLinePlaceholder":32},[105,75748,75749],{"class":107,"line":7975},[105,75750,75751],{"class":174},"    \u002F\u002F {n,}大于等于n次\n",[105,75753,75754,75756,75758,75760,75762,75764,75766,75769,75771,75773,75775,75777,75779,75781],{"class":107,"line":8002},[105,75755,73738],{"class":115},[105,75757,58232],{"class":1954},[105,75759,116],{"class":115},[105,75761,700],{"class":220},[105,75763,1082],{"class":111},[105,75765,75223],{"class":47962},[105,75767,75768],{"class":111},"{4,}$",[105,75770,700],{"class":220},[105,75772,674],{"class":115},[105,75774,75230],{"class":1954},[105,75776,116],{"class":115},[105,75778,75737],{"class":220},[105,75780,75740],{"class":115},[105,75782,75241],{"class":174},[105,75784,75785,75787,75789,75791,75793,75795,75797,75799,75801,75803,75805,75807,75810,75812],{"class":107,"line":8007},[105,75786,73738],{"class":115},[105,75788,58232],{"class":1954},[105,75790,116],{"class":115},[105,75792,700],{"class":220},[105,75794,1082],{"class":111},[105,75796,75223],{"class":47962},[105,75798,75768],{"class":111},[105,75800,700],{"class":220},[105,75802,674],{"class":115},[105,75804,75230],{"class":1954},[105,75806,116],{"class":115},[105,75808,75809],{"class":220},"'哈哈哈哈哈'",[105,75811,75740],{"class":115},[105,75813,75241],{"class":174},[105,75815,75816],{"class":107,"line":8013},[105,75817,2391],{"emptyLinePlaceholder":32},[105,75819,75820],{"class":107,"line":8025},[105,75821,75822],{"class":174},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[105,75824,75825,75827,75829,75831,75833,75835,75837,75840,75842,75844,75846,75848,75850,75852],{"class":107,"line":8037},[105,75826,73738],{"class":115},[105,75828,58232],{"class":1954},[105,75830,116],{"class":115},[105,75832,700],{"class":220},[105,75834,1082],{"class":111},[105,75836,75223],{"class":47962},[105,75838,75839],{"class":111},"{4,6}$",[105,75841,700],{"class":220},[105,75843,674],{"class":115},[105,75845,75230],{"class":1954},[105,75847,116],{"class":115},[105,75849,75737],{"class":220},[105,75851,75740],{"class":115},[105,75853,75241],{"class":174},[105,75855,75856,75858,75860,75862,75864,75866,75868,75870,75872,75874,75876,75878,75880,75882],{"class":107,"line":8049},[105,75857,73738],{"class":115},[105,75859,58232],{"class":1954},[105,75861,116],{"class":115},[105,75863,700],{"class":220},[105,75865,1082],{"class":111},[105,75867,75223],{"class":47962},[105,75869,75839],{"class":111},[105,75871,700],{"class":220},[105,75873,674],{"class":115},[105,75875,75230],{"class":1954},[105,75877,116],{"class":115},[105,75879,75809],{"class":220},[105,75881,75740],{"class":115},[105,75883,75241],{"class":174},[105,75885,75886,75888,75890,75892,75894,75896,75898,75900,75902,75904,75906,75908,75911,75913],{"class":107,"line":9708},[105,75887,73738],{"class":115},[105,75889,58232],{"class":1954},[105,75891,116],{"class":115},[105,75893,700],{"class":220},[105,75895,1082],{"class":111},[105,75897,75223],{"class":47962},[105,75899,75839],{"class":111},[105,75901,700],{"class":220},[105,75903,674],{"class":115},[105,75905,75230],{"class":1954},[105,75907,116],{"class":115},[105,75909,75910],{"class":220},"'哈哈哈哈哈哈哈'",[105,75912,75740],{"class":115},[105,75914,75364],{"class":174},[105,75916,75917],{"class":107,"line":9733},[105,75918,2391],{"emptyLinePlaceholder":32},[105,75920,75921],{"class":107,"line":9756},[105,75922,75923],{"class":174},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[105,75925,75926,75928,75930,75932,75934,75936,75939,75941,75943,75945,75947,75949,75952,75954],{"class":107,"line":9780},[105,75927,73738],{"class":115},[105,75929,58232],{"class":1954},[105,75931,116],{"class":115},[105,75933,700],{"class":220},[105,75935,1082],{"class":111},[105,75937,75938],{"class":164},"[abc]",[105,75940,418],{"class":111},[105,75942,700],{"class":220},[105,75944,674],{"class":115},[105,75946,75230],{"class":1954},[105,75948,116],{"class":115},[105,75950,75951],{"class":220},"'a'",[105,75953,75238],{"class":115},[105,75955,75241],{"class":174},[105,75957,75958,75960,75962,75964,75966,75968,75970,75972,75974,75976,75978,75980,75983,75985],{"class":107,"line":9785},[105,75959,73738],{"class":115},[105,75961,58232],{"class":1954},[105,75963,116],{"class":115},[105,75965,700],{"class":220},[105,75967,1082],{"class":111},[105,75969,75938],{"class":164},[105,75971,418],{"class":111},[105,75973,700],{"class":220},[105,75975,674],{"class":115},[105,75977,75230],{"class":1954},[105,75979,116],{"class":115},[105,75981,75982],{"class":220},"'b'",[105,75984,75238],{"class":115},[105,75986,75241],{"class":174},[105,75988,75989,75991,75993,75995,75997,75999,76001,76003,76005,76007,76009,76011,76014,76016],{"class":107,"line":9790},[105,75990,73738],{"class":115},[105,75992,58232],{"class":1954},[105,75994,116],{"class":115},[105,75996,700],{"class":220},[105,75998,1082],{"class":111},[105,76000,75938],{"class":164},[105,76002,418],{"class":111},[105,76004,700],{"class":220},[105,76006,674],{"class":115},[105,76008,75230],{"class":1954},[105,76010,116],{"class":115},[105,76012,76013],{"class":220},"'c'",[105,76015,75238],{"class":115},[105,76017,75241],{"class":174},[105,76019,76020,76022,76024,76026,76028,76030,76032,76034,76036,76038,76041,76043],{"class":107,"line":9795},[105,76021,73738],{"class":115},[105,76023,58232],{"class":1954},[105,76025,116],{"class":115},[105,76027,700],{"class":220},[105,76029,75938],{"class":164},[105,76031,700],{"class":220},[105,76033,674],{"class":115},[105,76035,75230],{"class":1954},[105,76037,116],{"class":115},[105,76039,76040],{"class":220},"'ab'",[105,76042,75238],{"class":115},[105,76044,75241],{"class":174},[105,76046,76047,76049,76051,76053,76055,76057,76059,76061,76063,76065,76067,76069,76071,76073],{"class":107,"line":9804},[105,76048,73738],{"class":115},[105,76050,58232],{"class":1954},[105,76052,116],{"class":115},[105,76054,700],{"class":220},[105,76056,1082],{"class":111},[105,76058,75938],{"class":164},[105,76060,418],{"class":111},[105,76062,700],{"class":220},[105,76064,674],{"class":115},[105,76066,75230],{"class":1954},[105,76068,116],{"class":115},[105,76070,76040],{"class":220},[105,76072,75238],{"class":115},[105,76074,76075],{"class":174},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[105,76077,76078,76080,76082,76084,76086,76088,76090,76093,76095,76097,76099,76101,76103,76105],{"class":107,"line":9809},[105,76079,73738],{"class":115},[105,76081,58232],{"class":1954},[105,76083,116],{"class":115},[105,76085,700],{"class":220},[105,76087,1082],{"class":111},[105,76089,75938],{"class":164},[105,76091,76092],{"class":111},"{2}$",[105,76094,700],{"class":220},[105,76096,674],{"class":115},[105,76098,75230],{"class":1954},[105,76100,116],{"class":115},[105,76102,76040],{"class":220},[105,76104,75238],{"class":115},[105,76106,76107],{"class":174},"\u002F\u002Ftrue   可以选两个\n",[105,76109,76110,76112,76114,76116,76118,76120,76123,76125,76127,76129,76131,76133,76136,76138],{"class":107,"line":9815},[105,76111,73738],{"class":115},[105,76113,58232],{"class":1954},[105,76115,116],{"class":115},[105,76117,700],{"class":220},[105,76119,1082],{"class":111},[105,76121,76122],{"class":164},"[a-z]",[105,76124,418],{"class":111},[105,76126,700],{"class":220},[105,76128,674],{"class":115},[105,76130,75230],{"class":1954},[105,76132,116],{"class":115},[105,76134,76135],{"class":220},"'p'",[105,76137,75294],{"class":115},[105,76139,76140],{"class":174},"\u002F\u002Ftrue   依然只能选一个\n",[105,76142,76143,76145,76147,76149,76151,76153,76156,76158,76160,76162,76164,76166,76168,76170],{"class":107,"line":9836},[105,76144,73738],{"class":115},[105,76146,58232],{"class":1954},[105,76148,116],{"class":115},[105,76150,700],{"class":220},[105,76152,1082],{"class":111},[105,76154,76155],{"class":164},"[A-Z]",[105,76157,418],{"class":111},[105,76159,700],{"class":220},[105,76161,674],{"class":115},[105,76163,75230],{"class":1954},[105,76165,116],{"class":115},[105,76167,76135],{"class":220},[105,76169,75294],{"class":115},[105,76171,75364],{"class":174},[105,76173,76174,76176,76178,76180,76182,76184,76186,76188,76190,76192,76194,76196,76199,76201],{"class":107,"line":9842},[105,76175,73738],{"class":115},[105,76177,58232],{"class":1954},[105,76179,116],{"class":115},[105,76181,700],{"class":220},[105,76183,1082],{"class":111},[105,76185,76155],{"class":164},[105,76187,418],{"class":111},[105,76189,700],{"class":220},[105,76191,674],{"class":115},[105,76193,75230],{"class":1954},[105,76195,116],{"class":115},[105,76197,76198],{"class":220},"'P'",[105,76200,75294],{"class":115},[105,76202,75241],{"class":174},[105,76204,76205,76207,76209,76211,76213,76215,76218,76220,76222,76224,76226,76228,76231,76233],{"class":107,"line":9856},[105,76206,73738],{"class":115},[105,76208,58232],{"class":1954},[105,76210,116],{"class":115},[105,76212,700],{"class":220},[105,76214,1082],{"class":111},[105,76216,76217],{"class":164},"[0-9]",[105,76219,418],{"class":111},[105,76221,700],{"class":220},[105,76223,674],{"class":115},[105,76225,75230],{"class":1954},[105,76227,116],{"class":115},[105,76229,76230],{"class":220},"'0'",[105,76232,75294],{"class":115},[105,76234,75241],{"class":174},[105,76236,76237,76239,76241,76243,76245,76247,76250,76252,76254,76256,76258,76260,76262,76264],{"class":107,"line":9862},[105,76238,73738],{"class":115},[105,76240,58232],{"class":1954},[105,76242,116],{"class":115},[105,76244,700],{"class":220},[105,76246,1082],{"class":111},[105,76248,76249],{"class":164},"[a-zA-Z0-9]",[105,76251,418],{"class":111},[105,76253,700],{"class":220},[105,76255,674],{"class":115},[105,76257,75230],{"class":1954},[105,76259,116],{"class":115},[105,76261,76135],{"class":220},[105,76263,75238],{"class":115},[105,76265,75241],{"class":174},[105,76267,76268,76270,76272],{"class":107,"line":9889},[105,76269,52402],{"class":115},[105,76271,51798],{"class":51285},[105,76273,51292],{"class":115},[105,76275,76276,76278,76280],{"class":107,"line":9898},[105,76277,51770],{"class":115},[105,76279,51785],{"class":51285},[105,76281,51292],{"class":115},[105,76283,76284],{"class":107,"line":9904},[105,76285,2391],{"emptyLinePlaceholder":32},[105,76287,76288,76290,76292],{"class":107,"line":9912},[105,76289,51770],{"class":115},[105,76291,50620],{"class":51285},[105,76293,51292],{"class":115},[21990,76295,76297],{"id":76296},"_3624-修饰符","3.6.2.4 修饰符",[14,76299,76300],{},[20,76301],{"alt":22,"src":76302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76304,76305],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76307,76308],{},[20,76309],{"alt":22,"src":76310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[96,76312,76314],{"className":50618,"code":76313,"language":50620,"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",[102,76315,76316,76326,76340,76348,76362,76382,76394,76402,76410,76418,76450,76481,76486,76518,76529,76562,76571,76579,76587],{"__ignoreMap":22},[105,76317,76318,76320,76322,76324],{"class":107,"line":108},[105,76319,51282],{"class":115},[105,76321,51286],{"class":51285},[105,76323,51289],{"class":1954},[105,76325,51292],{"class":115},[105,76327,76328,76330,76332,76334,76336,76338],{"class":107,"line":28},[105,76329,1026],{"class":115},[105,76331,50620],{"class":51285},[105,76333,51301],{"class":1954},[105,76335,161],{"class":115},[105,76337,51306],{"class":220},[105,76339,51292],{"class":115},[105,76341,76342,76344,76346],{"class":107,"line":1171},[105,76343,1026],{"class":115},[105,76345,51319],{"class":51285},[105,76347,51292],{"class":115},[105,76349,76350,76352,76354,76356,76358,76360],{"class":107,"line":1186},[105,76351,52129],{"class":115},[105,76353,51329],{"class":51285},[105,76355,51332],{"class":1954},[105,76357,161],{"class":115},[105,76359,51337],{"class":220},[105,76361,51292],{"class":115},[105,76363,76364,76366,76368,76370,76372,76374,76376,76378,76380],{"class":107,"line":1192},[105,76365,52129],{"class":115},[105,76367,51329],{"class":51285},[105,76369,14912],{"class":1954},[105,76371,161],{"class":115},[105,76373,51376],{"class":220},[105,76375,51356],{"class":1954},[105,76377,161],{"class":115},[105,76379,51383],{"class":220},[105,76381,51292],{"class":115},[105,76383,76384,76386,76388,76390,76392],{"class":107,"line":1206},[105,76385,52129],{"class":115},[105,76387,51392],{"class":51285},[105,76389,51395],{"class":115},[105,76391,51392],{"class":51285},[105,76393,51292],{"class":115},[105,76395,76396,76398,76400],{"class":107,"line":1212},[105,76397,51770],{"class":115},[105,76399,51319],{"class":51285},[105,76401,51292],{"class":115},[105,76403,76404,76406,76408],{"class":107,"line":1303},[105,76405,1026],{"class":115},[105,76407,51785],{"class":51285},[105,76409,51292],{"class":115},[105,76411,76412,76414,76416],{"class":107,"line":1309},[105,76413,52129],{"class":115},[105,76415,51798],{"class":51285},[105,76417,51292],{"class":115},[105,76419,76420,76422,76424,76426,76428,76430,76433,76435,76437,76439,76441,76443,76446,76448],{"class":107,"line":1321},[105,76421,73738],{"class":115},[105,76423,58232],{"class":1954},[105,76425,116],{"class":115},[105,76427,700],{"class":220},[105,76429,1082],{"class":111},[105,76431,76432],{"class":47962},"java",[105,76434,418],{"class":111},[105,76436,700],{"class":220},[105,76438,674],{"class":115},[105,76440,75230],{"class":1954},[105,76442,116],{"class":115},[105,76444,76445],{"class":220},"'java'",[105,76447,75740],{"class":115},[105,76449,75241],{"class":174},[105,76451,76452,76454,76456,76458,76460,76462,76464,76466,76468,76470,76472,76474,76477,76479],{"class":107,"line":1603},[105,76453,73738],{"class":115},[105,76455,58232],{"class":1954},[105,76457,116],{"class":115},[105,76459,700],{"class":220},[105,76461,1082],{"class":111},[105,76463,76432],{"class":47962},[105,76465,418],{"class":111},[105,76467,700],{"class":220},[105,76469,674],{"class":115},[105,76471,75230],{"class":1954},[105,76473,116],{"class":115},[105,76475,76476],{"class":220},"'Java'",[105,76478,75740],{"class":115},[105,76480,75364],{"class":174},[105,76482,76483],{"class":107,"line":1608},[105,76484,76485],{"class":174},"    \u002F\u002F 不区分大小写、\n",[105,76487,76488,76490,76492,76494,76496,76498,76500,76502,76504,76506,76508,76510,76512,76514,76516],{"class":107,"line":1614},[105,76489,73738],{"class":115},[105,76491,58232],{"class":1954},[105,76493,116],{"class":115},[105,76495,700],{"class":220},[105,76497,1082],{"class":111},[105,76499,76432],{"class":47962},[105,76501,418],{"class":111},[105,76503,700],{"class":220},[105,76505,557],{"class":111},[105,76507,674],{"class":115},[105,76509,75230],{"class":1954},[105,76511,116],{"class":115},[105,76513,76476],{"class":220},[105,76515,75740],{"class":115},[105,76517,75241],{"class":174},[105,76519,76520,76522,76524,76526],{"class":107,"line":1619},[105,76521,11213],{"class":111},[105,76523,73904],{"class":164},[105,76525,13556],{"class":111},[105,76527,76528],{"class":220}," 'java是一门编程语言，学完java工资很高'\n",[105,76530,76531,76533,76536,76538,76541,76544,76546,76548,76550,76552,76555,76557,76560],{"class":107,"line":1633},[105,76532,11213],{"class":111},[105,76534,76535],{"class":164}," result",[105,76537,13556],{"class":111},[105,76539,76540],{"class":115}," str.",[105,76542,76543],{"class":1954},"replace",[105,76545,116],{"class":115},[105,76547,700],{"class":220},[105,76549,76432],{"class":47962},[105,76551,700],{"class":220},[105,76553,76554],{"class":111},"ig",[105,76556,12427],{"class":115},[105,76558,76559],{"class":220},"'前端'",[105,76561,122],{"class":115},[105,76563,76564,76566,76568],{"class":107,"line":1638},[105,76565,73738],{"class":115},[105,76567,58232],{"class":1954},[105,76569,76570],{"class":115},"(result)\n",[105,76572,76573,76575,76577],{"class":107,"line":1644},[105,76574,52402],{"class":115},[105,76576,51798],{"class":51285},[105,76578,51292],{"class":115},[105,76580,76581,76583,76585],{"class":107,"line":1665},[105,76582,51770],{"class":115},[105,76584,51785],{"class":51285},[105,76586,51292],{"class":115},[105,76588,76589,76591,76593],{"class":107,"line":1670},[105,76590,51770],{"class":115},[105,76592,50620],{"class":51285},[105,76594,51292],{"class":115},[5118,76596,76597],{},"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":28,"depth":28,"links":76599},[76600,76610,76622,76639,76646,76654],{"id":53345,"depth":28,"text":53346,"children":76601},[76602,76603,76604,76605,76606,76607,76608,76609],{"id":53349,"depth":1171,"text":53350},{"id":53382,"depth":1171,"text":53383},{"id":53421,"depth":1171,"text":53422},{"id":53579,"depth":1171,"text":53580},{"id":53627,"depth":1171,"text":53628},{"id":53764,"depth":1171,"text":53765},{"id":54086,"depth":1171,"text":54087},{"id":57074,"depth":1171,"text":57075},{"id":57102,"depth":28,"text":57103,"children":76611},[76612,76613,76614,76615,76616,76617,76618,76619,76620,76621],{"id":57106,"depth":1171,"text":57107},{"id":57129,"depth":1171,"text":57130},{"id":58044,"depth":1171,"text":58045},{"id":58734,"depth":1171,"text":58735},{"id":59016,"depth":1171,"text":59017},{"id":63177,"depth":1171,"text":63178},{"id":63347,"depth":1171,"text":63348},{"id":63475,"depth":1171,"text":63476},{"id":63500,"depth":1171,"text":63501},{"id":64889,"depth":1171,"text":64890},{"id":66042,"depth":28,"text":66043,"children":76623},[76624,76625,76626,76627,76628,76629,76630,76631,76632,76633,76634,76635,76636,76637,76638],{"id":66046,"depth":1171,"text":66047},{"id":66700,"depth":1171,"text":66701},{"id":68395,"depth":1171,"text":68396},{"id":68436,"depth":1171,"text":68437},{"id":68478,"depth":1171,"text":68479},{"id":68492,"depth":1171,"text":68493},{"id":68541,"depth":1171,"text":68542},{"id":68553,"depth":1171,"text":68554},{"id":68568,"depth":1171,"text":68569},{"id":68604,"depth":1171,"text":68605},{"id":68685,"depth":1171,"text":68686},{"id":68813,"depth":1171,"text":68814},{"id":68825,"depth":1171,"text":68826},{"id":68844,"depth":1171,"text":68845},{"id":70955,"depth":1171,"text":70956},{"id":70974,"depth":28,"text":70975,"children":76640},[76641,76642,76643,76644,76645],{"id":70995,"depth":1171,"text":70996},{"id":71015,"depth":1171,"text":71016},{"id":71064,"depth":1171,"text":71065},{"id":71189,"depth":1171,"text":71190},{"id":71370,"depth":1171,"text":71371},{"id":71388,"depth":28,"text":71389,"children":76647},[76648,76649,76650,76651,76652,76653],{"id":71403,"depth":1171,"text":71404},{"id":71462,"depth":1171,"text":71463},{"id":71486,"depth":1171,"text":71487},{"id":71806,"depth":1171,"text":71807},{"id":71838,"depth":1171,"text":71839},{"id":71861,"depth":1171,"text":71862},{"id":74929,"depth":28,"text":74930,"children":76655},[76656,76657],{"id":74963,"depth":1171,"text":74964},{"id":75002,"depth":1171,"text":75003},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53317,"description":23369},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76664,"title":76665,"body":76666,"description":23369,"extension":30,"meta":92803,"navigation":32,"path":92804,"seo":92805,"stem":92806,"__hash__":92807},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76667,"toc":92739},[76668,76671,76674,76678,76682,76687,76692,76703,76707,76712,76715,76719,76722,76727,76731,76735,76738,76743,76746,76750,76753,76761,76764,76768,76773,76778,76781,76785,76790,76795,76798,76802,76807,76810,76815,76818,76823,76826,76831,76836,76839,76842,76846,76851,76856,76859,76863,76867,76870,76873,76876,76880,76884,76889,76894,76897,76901,76906,76911,76914,76917,76920,76923,76926,76929,76932,76935,76938,76943,76947,76952,76957,76960,76963,76966,76969,76972,76975,76978,76981,76985,76989,76992,76995,76998,77003,77005,77008,77011,77014,77017,77020,77023,77026,77029,77032,77035,77038,77041,77044,77049,77054,77059,77062,77066,77069,77074,77078,77080,77091,77096,77197,77200,77203,77206,77209,77212,77215,77218,77221,77223,77226,77229,77232,77235,77238,77240,77243,77246,77249,77252,77255,77258,77260,77263,77265,77267,77270,77274,77278,77281,77284,77287,77290,77293,77296,77299,77302,77305,77310,77430,77433,77436,77441,77444,77447,77450,77453,77458,77461,77464,77467,77470,77475,77478,77578,77643,77717,77721,77724,77727,77731,77734,77748,77777,77780,77783,77786,77789,77792,77795,77798,77800,77803,77806,77809,77812,77816,77821,77825,77830,77905,77908,78091,78094,78097,78100,78103,78106,78108,78111,78114,78117,78120,78123,78126,78128,78132,78135,78140,78143,78146,78149,78152,78154,78159,78162,78165,78168,78171,78173,78178,78181,78184,78186,78188,78191,78195,78198,78201,78206,78209,78212,78215,78265,78270,78274,78279,78282,78351,78354,78363,78367,78372,78375,78378,78386,78389,78406,80208,80212,80216,80221,80224,80228,80234,80240,80392,80397,80402,80405,80408,80411,80414,80417,80420,80423,80426,80429,80432,80435,80438,80443,80447,80450,80461,80465,80470,80473,80476,80479,80482,80485,80487,80490,80493,80496,80499,80501,80518,80521,80525,80528,80533,80538,80541,80544,80548,80551,80554,80563,80566,80570,80573,80578,80583,80650,80654,80657,80660,80665,80670,80756,80761,80765,80768,80771,80786,80789,80794,80798,80803,80912,80915,80926,81076,81080,81085,81194,81198,81203,81208,81213,81216,81223,81243,81279,81443,81448,81451,81456,81463,81466,81469,81472,81531,81587,81643,81647,81652,81967,81970,81974,81977,81982,82091,82096,82100,82105,82109,82180,82184,82186,82189,82192,82230,82506,82510,82527,82593,82627,82631,82634,82639,82668,82675,82684,82689,82704,82709,82718,82721,82858,82862,82924,82928,82933,83178,83182,83187,83190,83193,83196,83199,83203,83208,84789,84793,84797,84803,84806,84811,84815,84818,84823,84826,84837,84841,84846,84850,84855,84860,84863,84868,84872,84876,84879,84884,84889,84892,84895,84898,85020,85025,85127,85130,85133,85137,85142,85314,85319,85323,85326,85331,85397,85402,85405,85536,85539,85544,85547,85550,85641,85646,85649,85652,85655,85658,85663,85668,85671,85676,85681,85686,85690,85693,85696,85701,85706,85711,85716,85770,85773,85776,85781,85784,85787,85792,85797,85802,85806,85811,85825,85830,85833,85838,85842,85847,85852,85857,85862,85867,85872,85877,85882,85885,85889,85894,85897,85900,85903,85908,85913,85916,85919,85923,85926,85929,85934,85939,85944,85949,85952,85957,85962,86023,86028,86031,86036,87277,87282,87286,87290,87295,87298,87303,87308,87311,87316,87318,87323,87327,87330,87333,87344,87348,87353,87358,87413,87418,87423,87428,87639,87644,87648,87653,87656,87658,87661,87664,88111,88116,88123,88129,88132,88135,88399,88404,88408,88673,88678,88682,88687,88692,88697,88702,89033,89036,89041,89046,89049,89053,89057,89062,89067,89072,89077,89082,89087,89091,89094,89099,89104,89107,89181,89186,89191,89196,89198,89201,89571,89576,89581,89586,89589,89592,89694,89699,89704,89807,89811,89816,89820,89824,89829,89834,89837,89842,89845,89848,90241,90246,90249,90252,90255,90258,90778,90782,90787,90792,90797,90800,90805,90808,90811,91193,91198,91200,91202,91205,91208,91720,91724,91785,91788,91791,91794,91798,91801,91806,91811,92736],[10,76669,76665],{"id":76670},"_4js进阶",[14,76672,76673],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[47,76675,76677],{"id":76676},"_41-作用域","4.1 作用域",[76,76679,76681],{"id":76680},"_411-局部作用域","4.1.1 局部作用域",[14,76683,76684],{},[20,76685],{"alt":22,"src":76686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76688,76689],{},[20,76690],{"alt":22,"src":76691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1123,76693,76694,76697,76700],{},[62,76695,76696],{},"函数作用域在函数内部",[62,76698,76699],{},"块级作用域在{}",[62,76701,76702],{},"对象的那个{}不是作用域，不是块作用域",[76,76704,76706],{"id":76705},"_412-全局作用域","4.1.2 全局作用域",[14,76708,76709],{},[20,76710],{"alt":22,"src":76711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76713,76714],{},"window.a=10不要这样写",[76,76716,76718],{"id":76717},"_413-作用域链","4.1.3 作用域链",[14,76720,76721],{},"变量查找机制",[14,76723,76724],{},[20,76725],{"alt":22,"src":76726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[47,76728,76730],{"id":76729},"_42-垃圾回收机制","4.2 垃圾回收机制",[76,76732,76734],{"id":76733},"_421-大体介绍","4.2.1 大体介绍",[14,76736,76737],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76739,76740],{},[20,76741],{"alt":22,"src":76742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76744,76745],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[76,76747,76749],{"id":76748},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76751,76752],{},"堆栈空间分配区别：",[59,76754,76755,76758],{},[62,76756,76757],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[62,76759,76760],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76762,76763],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21990,76765,76767],{"id":76766},"_4221-引用计数","4.2.2.1 引用计数",[14,76769,76770],{},[20,76771],{"alt":22,"src":76772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76774,76775],{},[20,76776],{"alt":22,"src":76777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76779,76780],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21990,76782,76784],{"id":76783},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76786,76787],{},[20,76788],{"alt":22,"src":76789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76791,76792],{},[20,76793],{"alt":22,"src":76794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76796,76797],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[47,76799,76801],{"id":76800},"_43-闭包","4.3 闭包",[14,76803,76804],{},[20,76805],{"alt":22,"src":76806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76808,76809],{},"闭包：内层函数+外层函数的变量",[14,76811,76812],{},[20,76813],{"alt":22,"src":76814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76816,76817],{},"closure就是闭包",[14,76819,76820],{},[20,76821],{"alt":22,"src":76822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76824,76825],{},"内层函数必须包含外层函数的变量才是闭包",[14,76827,76828],{},[20,76829],{"alt":22,"src":76830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76832,76833],{},[20,76834],{"alt":22,"src":76835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76837,76838],{},"闭包可能会引起内存泄漏",[14,76840,76841],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[47,76843,76845],{"id":76844},"_44-变量提升","4.4 变量提升",[14,76847,76848],{},[20,76849],{"alt":22,"src":76850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76852,76853],{},[20,76854],{"alt":22,"src":76855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76857,76858],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[47,76860,76862],{"id":76861},"_45-函数进阶","4.5 函数进阶",[76,76864,76866],{"id":76865},"_451-函数提升","4.5.1 函数提升",[14,76868,76869],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76871,76872],{},"只提升函数声明，不提升函数调用",[51798,76874,76875],{},"\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",[76,76877,76879],{"id":76878},"_452-函数参数","4.5.2 函数参数",[21990,76881,76883],{"id":76882},"_4521-动态参数","4.5.2.1 动态参数",[14,76885,76886],{},[20,76887],{"alt":22,"src":76888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76890,76891],{},[20,76892],{"alt":22,"src":76893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76895,76896],{},"箭头函数里边没有arguments",[21990,76898,76900],{"id":76899},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76902,76903],{},[20,76904],{"alt":22,"src":76905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76907,76908],{},[20,76909],{"alt":22,"src":76910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76912,76913],{},"剩余参数使用的时候不需要写...",[14,76915,76916],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,76918,76919],{},"  function getSum(a,b,...arr) {",[14,76921,76922],{},"  console.log(11)",[14,76924,76925],{},"  }",[14,76927,76928],{},"  getSum(1,2,3,4)",[14,76930,76931],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,76933,76934],{},"  getSum(1,2)",[14,76936,76937],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,76939,76940],{},[20,76941],{"alt":22,"src":76942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21990,76944,76946],{"id":76945},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,76948,76949],{},[20,76950],{"alt":22,"src":76951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,76953,76954],{},[20,76955],{"alt":22,"src":76956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,76958,76959],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,76961,76962],{},"展开运算符可以用于数组之间的合并：",[14,76964,76965],{},"const arr1 = [1, 2, 3]",[14,76967,76968],{},"const arr2 = [3, 4, 5]",[14,76970,76971],{},"const arr = [...arr1, ...arr2]",[14,76973,76974],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,76976,76977],{},"剩余参数：函数参数使用，得到真数组",[14,76979,76980],{},"展开运算符：数组中使用，数组展开",[76,76982,76984],{"id":76983},"_453-箭头函数","4.5.3 箭头函数",[21990,76986,76988],{"id":76987},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,76990,76991],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,76993,76994],{},"它不是万能的！！！",[14,76996,76997],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,76999,77000],{},[20,77001],{"alt":22,"src":77002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77004,145],{},[14,77006,77007],{},"① 只有一个形参的时候，可以省略小括号：",[14,77009,77010],{},"const fn=x=>{console.log(x)}",[14,77012,77013],{},"② 只有一行代码时可以省略大括号：",[14,77015,77016],{},"const fn=x=>console.log(11)",[14,77018,77019],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77021,77022],{},"const fn=x=>x+x",[14,77024,77025],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77027,77028],{},"⑤ 阻止表单默认提交：",[14,77030,77031],{},"const form = document.querySelector('form')",[14,77033,77034],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77036,77037],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77039,77040],{},"const fn=uname=>({uname:uname})",[14,77042,77043],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77045,77046],{},[20,77047],{"alt":22,"src":77048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77050,77051],{},[20,77052],{"alt":22,"src":77053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77055,77056],{},[20,77057],{"alt":22,"src":77058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77060,77061],{},"一定不要忘记用()，有()就理解为自带return",[21990,77063,77065],{"id":77064},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77067,77068],{},"箭头函数是没有动态参数的arguments",[14,77070,77071],{},[20,77072],{"alt":22,"src":77073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21990,77075,77077],{"id":77076},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77079,11324],{},[59,77081,77082,77085,77088],{},[62,77083,77084],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[62,77086,77087],{},"事件回调函数使用箭头函数时，this 为全局的 window",[62,77089,77090],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77092,77093],{},[20,77094],{"alt":22,"src":77095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[96,77097,77099],{"className":53052,"code":77098,"language":53054,"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",[102,77100,77101,77109,77114,77119,77124,77129,77134,77138,77143,77147,77151,77156,77161,77166,77170,77174,77179,77184,77189],{"__ignoreMap":22},[105,77102,77103,77105,77107],{"class":107,"line":108},[105,77104,52129],{"class":115},[105,77106,51798],{"class":51285},[105,77108,51292],{"class":115},[105,77110,77111],{"class":107,"line":28},[105,77112,77113],{"class":115},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[105,77115,77116],{"class":107,"line":1171},[105,77117,77118],{"class":115},"    console.log(this) \u002F\u002F指向window\n",[105,77120,77121],{"class":107,"line":1186},[105,77122,77123],{"class":115},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[105,77125,77126],{"class":107,"line":1192},[105,77127,77128],{"class":115},"    function fn() {\n",[105,77130,77131],{"class":107,"line":1206},[105,77132,77133],{"class":115},"      console.log(this)  \u002F\u002F指向window\n",[105,77135,77136],{"class":107,"line":1212},[105,77137,2178],{"class":115},[105,77139,77140],{"class":107,"line":1303},[105,77141,77142],{"class":115},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[105,77144,77145],{"class":107,"line":1309},[105,77146,2391],{"emptyLinePlaceholder":32},[105,77148,77149],{"class":107,"line":1321},[105,77150,71508],{"class":115},[105,77152,77153],{"class":107,"line":1603},[105,77154,77155],{"class":115},"      name: 'andy',\n",[105,77157,77158],{"class":107,"line":1608},[105,77159,77160],{"class":115},"      sayHai: function () {\n",[105,77162,77163],{"class":107,"line":1614},[105,77164,77165],{"class":115},"        console.log(this)\n",[105,77167,77168],{"class":107,"line":1619},[105,77169,52383],{"class":115},[105,77171,77172],{"class":107,"line":1633},[105,77173,2178],{"class":115},[105,77175,77176],{"class":107,"line":1638},[105,77177,77178],{"class":115},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[105,77180,77181],{"class":107,"line":1644},[105,77182,77183],{"class":115},"    \u002F\u002F 2.箭头函数的this\n",[105,77185,77186],{"class":107,"line":1665},[105,77187,77188],{"class":115},"    const fn = () => console.log(this)\n",[105,77190,77191,77193,77195],{"class":107,"line":1670},[105,77192,52402],{"class":115},[105,77194,51798],{"class":51285},[105,77196,51292],{"class":115},[14,77198,77199],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77201,77202],{},"const fn = () => console.log(this)",[14,77204,77205],{},"fn() \u002F\u002F指向window",[14,77207,77208],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77210,77211],{},"①",[14,77213,77214],{},"const obj = {",[14,77216,77217],{},"uname: 'pink老师',",[14,77219,77220],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77222,1062],{},[14,77224,77225],{},"调用对象里边的函数",[14,77227,77228],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77230,77231],{},"obj.sayHai()",[14,77233,77234],{},"②",[14,77236,77237],{},"const obj1 = {",[14,77239,77217],{},[14,77241,77242],{},"sayHai: function () {",[14,77244,77245],{},"let i = 10",[14,77247,77248],{},"const count = () => {",[14,77250,77251],{},"console.log(this)",[14,77253,77254],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77256,77257],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77259,1062],{},[14,77261,77262],{},"count()",[14,77264,1062],{},[14,77266,1062],{},[14,77268,77269],{},"obj1.sayHai()",[47,77271,77273],{"id":77272},"_46-解构赋值","4.6 解构赋值",[76,77275,77277],{"id":77276},"_461-数组解构","4.6.1 数组解构",[14,77279,77280],{},"以前要是使用数组中的值的话：",[14,77282,77283],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77285,77286],{},"const arr=[100,60,80]",[14,77288,77289],{},"const max=arr[0]",[14,77291,77292],{},"const min=arr[1]",[14,77294,77295],{},"const avg=arr[2]",[14,77297,77298],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77300,77301],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77303,77304],{},"这个写法就类似于上边的那种用很多const的方法",[14,77306,77307],{},[20,77308],{"alt":22,"src":77309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[96,77311,77313],{"className":50618,"code":77312,"language":50620,"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",[102,77314,77315,77320,77325,77330,77335,77340,77344,77348,77353,77357,77362,77367,77371,77376,77381,77392,77402,77407,77412,77417,77421,77425],{"__ignoreMap":22},[105,77316,77317],{"class":107,"line":108},[105,77318,77319],{"class":115},"①变量之间交换值:\n",[105,77321,77322],{"class":107,"line":28},[105,77323,77324],{"class":115},"let a=1\n",[105,77326,77327],{"class":107,"line":1171},[105,77328,77329],{"class":115},"let b=2;\n",[105,77331,77332],{"class":107,"line":1186},[105,77333,77334],{"class":115},"必须加这行代码，不然就会报错\n",[105,77336,77337],{"class":107,"line":1192},[105,77338,77339],{"class":115},"[b,a]=[a,b]\n",[105,77341,77342],{"class":107,"line":1206},[105,77343,2391],{"emptyLinePlaceholder":32},[105,77345,77346],{"class":107,"line":1212},[105,77347,2391],{"emptyLinePlaceholder":32},[105,77349,77350],{"class":107,"line":1303},[105,77351,77352],{"class":115},"可以写成下面的方式：\n",[105,77354,77355],{"class":107,"line":1309},[105,77356,77324],{"class":115},[105,77358,77359],{"class":107,"line":1321},[105,77360,77361],{"class":115},"let b=2\n",[105,77363,77364],{"class":107,"line":1603},[105,77365,77366],{"class":115},";[b,a]=[a,b]\n",[105,77368,77369],{"class":107,"line":1608},[105,77370,2391],{"emptyLinePlaceholder":32},[105,77372,77373],{"class":107,"line":1614},[105,77374,77375],{"class":115},"②排序\n",[105,77377,77378],{"class":107,"line":1619},[105,77379,77380],{"class":115},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[105,77382,77383,77386,77389],{"class":107,"line":1633},[105,77384,77385],{"class":115},"for (let i = 0; i ",[105,77387,1026],{"class":77388},"s7hpK",[105,77390,77391],{"class":115}," arr1.length; i++) {\n",[105,77393,77394,77397,77399],{"class":107,"line":1638},[105,77395,77396],{"class":115},"   for (let j = 0; j ",[105,77398,1026],{"class":77388},[105,77400,77401],{"class":115}," arr1.length - 1; j++) {\n",[105,77403,77404],{"class":107,"line":1644},[105,77405,77406],{"class":115},"      if (arr1[j] > arr1[j + 1]) {\n",[105,77408,77409],{"class":107,"line":1665},[105,77410,77411],{"class":115},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[105,77413,77414],{"class":107,"line":1670},[105,77415,77416],{"class":115},"       }\n",[105,77418,77419],{"class":107,"line":1684},[105,77420,4300],{"class":115},[105,77422,77423],{"class":107,"line":1689},[105,77424,1556],{"class":115},[105,77426,77427],{"class":107,"line":1718},[105,77428,77429],{"class":115},"console.log(arr1)\n",[14,77431,77432],{},"数组解构的细节：",[14,77434,77435],{},"①变量多，单元值少",[14,77437,77438],{},[20,77439],{"alt":22,"src":77440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77442,77443],{},"防止出现undefined的方法：",[14,77445,77446],{},"const [a=0,b=0] =[1]",[14,77448,77449],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77451,77452],{},"②变量少，单元值多",[14,77454,77455],{},[20,77456],{"alt":22,"src":77457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77459,77460],{},"此时可以使用剩余参数来接收多余的值",[14,77462,77463],{},"const [a,b,...c]=[1,2,3,4]",[14,77465,77466],{},"console.log(c) 输出[3,4]",[14,77468,77469],{},"③可以按需导入，忽略某些返回值",[14,77471,77472],{},[20,77473],{"alt":22,"src":77474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77476,77477],{},"④支持多维数组的结构",[96,77479,77483],{"className":77480,"code":77481,"language":77482,"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",[102,77484,77485,77513,77529,77544,77559],{"__ignoreMap":22},[105,77486,77487,77489,77491,77493,77495,77497,77499,77501,77504,77506,77508,77510],{"class":107,"line":108},[105,77488,6784],{"class":111},[105,77490,51818],{"class":115},[105,77492,161],{"class":111},[105,77494,52211],{"class":115},[105,77496,333],{"class":164},[105,77498,12427],{"class":115},[105,77500,193],{"class":164},[105,77502,77503],{"class":115},", [",[105,77505,187],{"class":164},[105,77507,12427],{"class":115},[105,77509,409],{"class":164},[105,77511,77512],{"class":115},"]]\n",[105,77514,77515,77518,77520,77522,77524,77526],{"class":107,"line":28},[105,77516,77517],{"class":115},"console.",[105,77519,58232],{"class":1954},[105,77521,3842],{"class":115},[105,77523,307],{"class":164},[105,77525,4207],{"class":115},[105,77527,77528],{"class":174},"  \u002F\u002F1\n",[105,77530,77531,77533,77535,77537,77539,77541],{"class":107,"line":1171},[105,77532,77517],{"class":115},[105,77534,58232],{"class":1954},[105,77536,3842],{"class":115},[105,77538,333],{"class":164},[105,77540,4207],{"class":115},[105,77542,77543],{"class":174},"  \u002F\u002F2\n",[105,77545,77546,77548,77550,77552,77554,77556],{"class":107,"line":1186},[105,77547,77517],{"class":115},[105,77549,58232],{"class":1954},[105,77551,3842],{"class":115},[105,77553,193],{"class":164},[105,77555,4207],{"class":115},[105,77557,77558],{"class":174},"  \u002F\u002F[3,4]\n",[105,77560,77561,77563,77565,77567,77569,77571,77573,77575],{"class":107,"line":1192},[105,77562,77517],{"class":115},[105,77564,58232],{"class":1954},[105,77566,3842],{"class":115},[105,77568,193],{"class":164},[105,77570,4892],{"class":115},[105,77572,307],{"class":164},[105,77574,4207],{"class":115},[105,77576,77577],{"class":174},"  \u002F\u002F3\n",[96,77579,77581],{"className":77480,"code":77580,"language":77482,"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",[102,77582,77583,77610,77621,77632],{"__ignoreMap":22},[105,77584,77585,77587,77590,77592,77594,77596,77598,77600,77602,77604,77606,77608],{"class":107,"line":108},[105,77586,6784],{"class":111},[105,77588,77589],{"class":115}," [a, b, c] ",[105,77591,161],{"class":111},[105,77593,52211],{"class":115},[105,77595,333],{"class":164},[105,77597,12427],{"class":115},[105,77599,193],{"class":164},[105,77601,77503],{"class":115},[105,77603,187],{"class":164},[105,77605,12427],{"class":115},[105,77607,409],{"class":164},[105,77609,77512],{"class":115},[105,77611,77612,77614,77616,77619],{"class":107,"line":28},[105,77613,77517],{"class":115},[105,77615,58232],{"class":1954},[105,77617,77618],{"class":115},"(a)",[105,77620,77528],{"class":174},[105,77622,77623,77625,77627,77630],{"class":107,"line":1171},[105,77624,77517],{"class":115},[105,77626,58232],{"class":1954},[105,77628,77629],{"class":115},"(b)",[105,77631,77543],{"class":174},[105,77633,77634,77636,77638,77641],{"class":107,"line":1186},[105,77635,77517],{"class":115},[105,77637,58232],{"class":1954},[105,77639,77640],{"class":115},"(c)",[105,77642,77558],{"class":174},[96,77644,77646],{"className":77480,"code":77645,"language":77482,"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",[102,77647,77648,77675,77685,77695,77705],{"__ignoreMap":22},[105,77649,77650,77652,77655,77657,77659,77661,77663,77665,77667,77669,77671,77673],{"class":107,"line":108},[105,77651,6784],{"class":111},[105,77653,77654],{"class":115}," [a, b, [c, d]] ",[105,77656,161],{"class":111},[105,77658,52211],{"class":115},[105,77660,333],{"class":164},[105,77662,12427],{"class":115},[105,77664,193],{"class":164},[105,77666,77503],{"class":115},[105,77668,187],{"class":164},[105,77670,12427],{"class":115},[105,77672,409],{"class":164},[105,77674,77512],{"class":115},[105,77676,77677,77679,77681,77683],{"class":107,"line":28},[105,77678,77517],{"class":115},[105,77680,58232],{"class":1954},[105,77682,77618],{"class":115},[105,77684,77528],{"class":174},[105,77686,77687,77689,77691,77693],{"class":107,"line":1171},[105,77688,77517],{"class":115},[105,77690,58232],{"class":1954},[105,77692,77629],{"class":115},[105,77694,77543],{"class":174},[105,77696,77697,77699,77701,77703],{"class":107,"line":1186},[105,77698,77517],{"class":115},[105,77700,58232],{"class":1954},[105,77702,77640],{"class":115},[105,77704,77577],{"class":174},[105,77706,77707,77709,77711,77714],{"class":107,"line":1192},[105,77708,77517],{"class":115},[105,77710,58232],{"class":1954},[105,77712,77713],{"class":115},"(d)",[105,77715,77716],{"class":174},"  \u002F\u002F4\n",[76,77718,77720],{"id":77719},"_462-对象解构","4.6.2 对象解构",[14,77722,77723],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77725,77726],{},"用的非常非常多！！！！！！",[21990,77728,77730],{"id":77729},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77732,77733],{},"基本语法：",[59,77735,77736,77739,77742,77745],{},[62,77737,77738],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[62,77740,77741],{},"对象属性的值将被赋值给与属性名相同的变量",[62,77743,77744],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[62,77746,77747],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[96,77749,77751],{"className":50618,"code":77750,"language":50620,"meta":22,"style":22},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[102,77752,77753,77758,77763,77768,77772],{"__ignoreMap":22},[105,77754,77755],{"class":107,"line":108},[105,77756,77757],{"class":115},"const obj = {\n",[105,77759,77760],{"class":107,"line":28},[105,77761,77762],{"class":115},"   uname: 'pink老师',\n",[105,77764,77765],{"class":107,"line":1171},[105,77766,77767],{"class":115},"   age: 18,\n",[105,77769,77770],{"class":107,"line":1186},[105,77771,1556],{"class":115},[105,77773,77774],{"class":107,"line":1192},[105,77775,77776],{"class":115},"const { uname, age } = obj\n",[14,77778,77779],{},"上方代码这样写等价于：",[14,77781,77782],{},"const uname等价于obj.uname",[14,77784,77785],{},"变量名可以重新改名：",[14,77787,77788],{},"const uname='red老师'",[14,77790,77791],{},"const user={",[14,77793,77794],{},"  uname:'pink老师',",[14,77796,77797],{},"  age:18",[14,77799,1062],{},[14,77801,77802],{},"const {uname,age}=user",[14,77804,77805],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77807,77808],{},"const {旧变量名：新变量名}=对象",[14,77810,77811],{},"const {uname:username,age}=user",[21990,77813,77815],{"id":77814},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77817,77818],{},[20,77819],{"alt":22,"src":77820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21990,77822,77824],{"id":77823},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77826,77827],{},[20,77828],{"alt":22,"src":77829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[96,77831,77833],{"className":53052,"code":77832,"language":53054,"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",[102,77834,77835,77843,77848,77853,77858,77863,77868,77873,77878,77883,77887,77892,77897],{"__ignoreMap":22},[105,77836,77837,77839,77841],{"class":107,"line":108},[105,77838,52129],{"class":115},[105,77840,51798],{"class":51285},[105,77842,51292],{"class":115},[105,77844,77845],{"class":107,"line":28},[105,77846,77847],{"class":115},"    const pig = {\n",[105,77849,77850],{"class":107,"line":1171},[105,77851,77852],{"class":115},"      name: '佩奇',\n",[105,77854,77855],{"class":107,"line":1186},[105,77856,77857],{"class":115},"      family: {\n",[105,77859,77860],{"class":107,"line":1192},[105,77861,77862],{"class":115},"        mother: '猪妈妈',\n",[105,77864,77865],{"class":107,"line":1206},[105,77866,77867],{"class":115},"        father: '猪爸爸',\n",[105,77869,77870],{"class":107,"line":1212},[105,77871,77872],{"class":115},"        sister: '乔治'\n",[105,77874,77875],{"class":107,"line":1303},[105,77876,77877],{"class":115},"      },\n",[105,77879,77880],{"class":107,"line":1309},[105,77881,77882],{"class":115},"      age: 6\n",[105,77884,77885],{"class":107,"line":1321},[105,77886,2178],{"class":115},[105,77888,77889],{"class":107,"line":1603},[105,77890,77891],{"class":115},"    \u002F\u002F 多级对象解构\n",[105,77893,77894],{"class":107,"line":1608},[105,77895,77896],{"class":115},"    const { name, family: { mother, father, sister }, age } = pig\n",[105,77898,77899,77901,77903],{"class":107,"line":1614},[105,77900,52402],{"class":115},[105,77902,51798],{"class":51285},[105,77904,51292],{"class":115},[14,77906,77907],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[96,77909,77912],{"className":77910,"code":77911,"language":76432,"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",[102,77913,77914,77919,77930,77942,77954,77963,77967,77978,77990,78000,78005,78009,78019,78030,78039,78043,78047,78058,78069,78078,78082,78087],{"__ignoreMap":22},[105,77915,77916],{"class":107,"line":108},[105,77917,77918],{"class":174},"    \u002F\u002F 这是后台传递过来的数据\n",[105,77920,77921,77923,77926,77928],{"class":107,"line":28},[105,77922,11213],{"class":111},[105,77924,77925],{"class":115}," msg ",[105,77927,161],{"class":111},[105,77929,15564],{"class":115},[105,77931,77932,77935,77937,77940],{"class":107,"line":1171},[105,77933,77934],{"class":220},"      \"code\"",[105,77936,975],{"class":111},[105,77938,77939],{"class":164}," 200",[105,77941,31451],{"class":115},[105,77943,77944,77947,77949,77952],{"class":107,"line":1186},[105,77945,77946],{"class":220},"      \"msg\"",[105,77948,975],{"class":111},[105,77950,77951],{"class":220}," \"获取新闻列表成功\"",[105,77953,31451],{"class":115},[105,77955,77956,77959,77961],{"class":107,"line":1192},[105,77957,77958],{"class":220},"      \"data\"",[105,77960,975],{"class":111},[105,77962,55432],{"class":115},[105,77964,77965],{"class":107,"line":1206},[105,77966,2501],{"class":115},[105,77968,77969,77972,77974,77976],{"class":107,"line":1212},[105,77970,77971],{"class":220},"          \"id\"",[105,77973,975],{"class":111},[105,77975,25103],{"class":164},[105,77977,31451],{"class":115},[105,77979,77980,77983,77985,77988],{"class":107,"line":1303},[105,77981,77982],{"class":220},"          \"title\"",[105,77984,975],{"class":111},[105,77986,77987],{"class":220}," \"5G商用自己，三大运用商收入下降\"",[105,77989,31451],{"class":115},[105,77991,77992,77995,77997],{"class":107,"line":1309},[105,77993,77994],{"class":220},"          \"count\"",[105,77996,975],{"class":111},[105,77998,77999],{"class":164}," 58\n",[105,78001,78002],{"class":107,"line":1321},[105,78003,78004],{"class":115},"        },\n",[105,78006,78007],{"class":107,"line":1603},[105,78008,2501],{"class":115},[105,78010,78011,78013,78015,78017],{"class":107,"line":1608},[105,78012,77971],{"class":220},[105,78014,975],{"class":111},[105,78016,14747],{"class":164},[105,78018,31451],{"class":115},[105,78020,78021,78023,78025,78028],{"class":107,"line":1614},[105,78022,77982],{"class":220},[105,78024,975],{"class":111},[105,78026,78027],{"class":220}," \"国际媒体头条速览\"",[105,78029,31451],{"class":115},[105,78031,78032,78034,78036],{"class":107,"line":1619},[105,78033,77994],{"class":220},[105,78035,975],{"class":111},[105,78037,78038],{"class":164}," 56\n",[105,78040,78041],{"class":107,"line":1633},[105,78042,78004],{"class":115},[105,78044,78045],{"class":107,"line":1638},[105,78046,2501],{"class":115},[105,78048,78049,78051,78053,78056],{"class":107,"line":1644},[105,78050,77971],{"class":220},[105,78052,975],{"class":111},[105,78054,78055],{"class":164}," 3",[105,78057,31451],{"class":115},[105,78059,78060,78062,78064,78067],{"class":107,"line":1665},[105,78061,77982],{"class":220},[105,78063,975],{"class":111},[105,78065,78066],{"class":220}," \"乌克兰和俄罗斯持续冲突\"",[105,78068,31451],{"class":115},[105,78070,78071,78073,78075],{"class":107,"line":1670},[105,78072,77994],{"class":220},[105,78074,975],{"class":111},[105,78076,78077],{"class":164}," 1669\n",[105,78079,78080],{"class":107,"line":1684},[105,78081,78004],{"class":115},[105,78083,78084],{"class":107,"line":1689},[105,78085,78086],{"class":115},"      ]\n",[105,78088,78089],{"class":107,"line":1718},[105,78090,2178],{"class":115},[14,78092,78093],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78095,78096],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78098,78099],{},"\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,78101,78102],{},"function({data}) {",[14,78104,78105],{},"console.log(data)",[14,78107,1062],{},[14,78109,78110],{},"render(msg)",[14,78112,78113],{},"实参传递给形参的时候解构了",[14,78115,78116],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78118,78119],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78121,78122],{},"function render({data:mydata}) {",[14,78124,78125],{},"  console.log(data)",[14,78127,1062],{},[76,78129,78131],{"id":78130},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78133,78134],{},"有两种情况：一个是数组结构，一个是立即执行函数",[59,78136,78137],{},[62,78138,78139],{},"如果对一个数组进行遍历，有两种方式：",[14,78141,78142],{},"①法1",[14,78144,78145],{},"const arr=[1,2,3]",[14,78147,78148],{},"arr.map(function(item,index) {",[14,78150,78151],{},"  console.log(item)",[14,78153,52449],{},[14,78155,78156],{},[20,78157],{"alt":22,"src":78158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78160,78161],{},"②法2",[14,78163,78164],{},"const str='pink'",[14,78166,78167],{},"[1,2,3].map(function(item,index) {",[14,78169,78170],{},"console.log(item)",[14,78172,52449],{},[14,78174,78175],{},[20,78176],{"alt":22,"src":78177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78179,78180],{},"此时会报错",[14,78182,78183],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78185,78170],{},[14,78187,52449],{},[14,78189,78190],{},"内部会当成这样处理，所以我们用分号进行隔开",[47,78192,78194],{"id":78193},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78196,78197],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78199,78200],{},"可以理解为加强版的for循环",[14,78202,78203],{},[20,78204],{"alt":22,"src":78205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78207,78208],{},"里边不写return，不返回数组，只遍历不返回",[14,78210,78211],{},"map是返回数组",[14,78213,78214],{},"forEach主要用于遍历数组对象",[96,78216,78218],{"className":53052,"code":78217,"language":53054,"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",[102,78219,78220,78228,78233,78238,78243,78248,78252,78257],{"__ignoreMap":22},[105,78221,78222,78224,78226],{"class":107,"line":108},[105,78223,52129],{"class":115},[105,78225,51798],{"class":51285},[105,78227,51292],{"class":115},[105,78229,78230],{"class":107,"line":28},[105,78231,78232],{"class":115},"    const arr = ['red', 'green', 'pink']\n",[105,78234,78235],{"class":107,"line":1171},[105,78236,78237],{"class":115},"    const result = arr.forEach(function (item, index) {\n",[105,78239,78240],{"class":107,"line":1186},[105,78241,78242],{"class":115},"      console.log(item)\n",[105,78244,78245],{"class":107,"line":1192},[105,78246,78247],{"class":115},"      console.log(index)\n",[105,78249,78250],{"class":107,"line":1206},[105,78251,33446],{"class":115},[105,78253,78254],{"class":107,"line":1212},[105,78255,78256],{"class":115},"    console.log(result)\n",[105,78258,78259,78261,78263],{"class":107,"line":1303},[105,78260,52402],{"class":115},[105,78262,51798],{"class":51285},[105,78264,51292],{"class":115},[14,78266,78267],{},[20,78268],{"alt":22,"src":78269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[47,78271,78273],{"id":78272},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78275,78276],{},[20,78277],{"alt":22,"src":78278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78280,78281],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[96,78283,78285],{"className":53052,"code":78284,"language":53054,"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",[102,78286,78287,78295,78303,78308,78313,78317,78321,78326,78330,78335,78343],{"__ignoreMap":22},[105,78288,78289,78291,78293],{"class":107,"line":108},[105,78290,1026],{"class":115},[105,78292,51785],{"class":51285},[105,78294,51292],{"class":115},[105,78296,78297,78299,78301],{"class":107,"line":28},[105,78298,52129],{"class":115},[105,78300,51798],{"class":51285},[105,78302,51292],{"class":115},[105,78304,78305],{"class":107,"line":1171},[105,78306,78307],{"class":115},"    const arr = [10, 20, 30]\n",[105,78309,78310],{"class":107,"line":1186},[105,78311,78312],{"class":115},"    const newArr = arr.filter(function (item, index) {\n",[105,78314,78315],{"class":107,"line":1192},[105,78316,78242],{"class":115},[105,78318,78319],{"class":107,"line":1206},[105,78320,78247],{"class":115},[105,78322,78323],{"class":107,"line":1212},[105,78324,78325],{"class":115},"      return item >= 20\n",[105,78327,78328],{"class":107,"line":1303},[105,78329,33446],{"class":115},[105,78331,78332],{"class":107,"line":1309},[105,78333,78334],{"class":115},"    console.log(newArr)\n",[105,78336,78337,78339,78341],{"class":107,"line":1321},[105,78338,52402],{"class":115},[105,78340,51798],{"class":51285},[105,78342,51292],{"class":115},[105,78344,78345,78347,78349],{"class":107,"line":1603},[105,78346,51770],{"class":115},[105,78348,51785],{"class":51285},[105,78350,51292],{"class":115},[14,78352,78353],{},"这个也可以写成箭头函数：",[96,78355,78357],{"className":50618,"code":78356,"language":50620,"meta":22,"style":22},"const newArr = arr.filter(item => item >= 20)\n",[102,78358,78359],{"__ignoreMap":22},[105,78360,78361],{"class":107,"line":108},[105,78362,78356],{"class":115},[47,78364,78366],{"id":78365},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78368,78369],{},[20,78370],{"alt":22,"src":78371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78373,78374],{},"步骤：",[14,78376,78377],{},"①：渲染页面模块",[1123,78379,78380,78383],{},[62,78381,78382],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[62,78384,78385],{},"用forEach+字符串的形式",[14,78387,78388],{},"②：点击不同需求，显示不同页面内容",[1123,78390,78391,78394,78397,78400,78403],{},[62,78392,78393],{},"点击采取事件委托方式 .filter",[62,78395,78396],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[62,78398,78399],{},"筛选条件是根据点击的 data-index 来判断",[62,78401,78402],{},"可以使用对象解构，把事件对象解构",[62,78404,78405],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[96,78407,78409],{"className":50618,"code":78408,"language":50620,"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",[102,78410,78411,78421,78435,78439,78447,78461,78481,78493,78501,78507,78517,78527,78537,78541,78545,78551,78564,78576,78586,78598,78602,78606,78613,78626,78638,78655,78673,78686,78690,78694,78706,78716,78720,78724,78731,78772,78799,78809,78813,78817,78825,78837,78841,78845,78853,78865,78877,78888,78892,78896,78905,78917,78928,78932,78936,78945,78957,78969,78973,78977,78984,78994,79006,79018,79033,79037,79041,79049,79065,79075,79085,79095,79107,79111,79115,79125,79136,79146,79150,79158,79166,79170,79178,79193,79219,79244,79269,79288,79296,79310,79315,79320,79325,79330,79335,79343,79351,79356,79367,79372,79382,79392,79402,79412,79416,79420,79429,79438,79447,79456,79460,79464,79473,79482,79491,79500,79504,79508,79517,79526,79535,79544,79548,79552,79561,79570,79579,79588,79592,79596,79605,79614,79623,79632,79636,79640,79649,79658,79667,79676,79680,79684,79693,79702,79710,79719,79723,79727,79731,79736,79748,79753,79765,79769,79786,79814,79823,79828,79838,79848,79857,79862,79867,79871,79876,79893,79897,79902,79910,79915,79942,79947,79967,79972,79984,79989,79994,79999,80010,80024,80061,80079,80112,80129,80153,80157,80162,80168,80172,80176,80180,80188,80196,80200],{"__ignoreMap":22},[105,78412,78413,78415,78417,78419],{"class":107,"line":108},[105,78414,51282],{"class":115},[105,78416,51286],{"class":51285},[105,78418,51289],{"class":1954},[105,78420,51292],{"class":115},[105,78422,78423,78425,78427,78429,78431,78433],{"class":107,"line":28},[105,78424,1026],{"class":115},[105,78426,50620],{"class":51285},[105,78428,51301],{"class":1954},[105,78430,161],{"class":115},[105,78432,51306],{"class":220},[105,78434,51292],{"class":115},[105,78436,78437],{"class":107,"line":1171},[105,78438,2391],{"emptyLinePlaceholder":32},[105,78440,78441,78443,78445],{"class":107,"line":1186},[105,78442,1026],{"class":115},[105,78444,51319],{"class":51285},[105,78446,51292],{"class":115},[105,78448,78449,78451,78453,78455,78457,78459],{"class":107,"line":1192},[105,78450,52129],{"class":115},[105,78452,51329],{"class":51285},[105,78454,51332],{"class":1954},[105,78456,161],{"class":115},[105,78458,51337],{"class":220},[105,78460,51292],{"class":115},[105,78462,78463,78465,78467,78469,78471,78473,78475,78477,78479],{"class":107,"line":1206},[105,78464,52129],{"class":115},[105,78466,51329],{"class":51285},[105,78468,14912],{"class":1954},[105,78470,161],{"class":115},[105,78472,51376],{"class":220},[105,78474,51356],{"class":1954},[105,78476,161],{"class":115},[105,78478,51383],{"class":220},[105,78480,51292],{"class":115},[105,78482,78483,78485,78487,78489,78491],{"class":107,"line":1212},[105,78484,52129],{"class":115},[105,78486,51392],{"class":51285},[105,78488,51395],{"class":115},[105,78490,51392],{"class":51285},[105,78492,51292],{"class":115},[105,78494,78495,78497,78499],{"class":107,"line":1303},[105,78496,52129],{"class":115},[105,78498,5118],{"class":51285},[105,78500,51292],{"class":115},[105,78502,78503,78505],{"class":107,"line":1309},[105,78504,6395],{"class":51285},[105,78506,15564],{"class":115},[105,78508,78509,78511,78513,78515],{"class":107,"line":1321},[105,78510,54680],{"class":164},[105,78512,51422],{"class":115},[105,78514,307],{"class":164},[105,78516,1282],{"class":115},[105,78518,78519,78521,78523,78525],{"class":107,"line":1603},[105,78520,54691],{"class":164},[105,78522,51422],{"class":115},[105,78524,307],{"class":164},[105,78526,1282],{"class":115},[105,78528,78529,78531,78533,78535],{"class":107,"line":1608},[105,78530,72581],{"class":164},[105,78532,51422],{"class":115},[105,78534,60490],{"class":164},[105,78536,1282],{"class":115},[105,78538,78539],{"class":107,"line":1614},[105,78540,2178],{"class":115},[105,78542,78543],{"class":107,"line":1619},[105,78544,2391],{"emptyLinePlaceholder":32},[105,78546,78547,78549],{"class":107,"line":1633},[105,78548,62108],{"class":1954},[105,78550,15564],{"class":115},[105,78552,78553,78555,78557,78560,78562],{"class":107,"line":1638},[105,78554,54756],{"class":164},[105,78556,51422],{"class":115},[105,78558,78559],{"class":164},"990",[105,78561,51477],{"class":111},[105,78563,1282],{"class":115},[105,78565,78566,78568,78570,78572,78574],{"class":107,"line":1644},[105,78567,54691],{"class":164},[105,78569,51422],{"class":115},[105,78571,307],{"class":164},[105,78573,51541],{"class":164},[105,78575,1282],{"class":115},[105,78577,78578,78580,78582,78584],{"class":107,"line":1665},[105,78579,54994],{"class":164},[105,78581,51422],{"class":115},[105,78583,51462],{"class":164},[105,78585,1282],{"class":115},[105,78587,78588,78591,78593,78596],{"class":107,"line":1670},[105,78589,78590],{"class":164},"      flex-wrap",[105,78592,51422],{"class":115},[105,78594,78595],{"class":164},"wrap",[105,78597,1282],{"class":115},[105,78599,78600],{"class":107,"line":1684},[105,78601,2178],{"class":115},[105,78603,78604],{"class":107,"line":1689},[105,78605,2391],{"emptyLinePlaceholder":32},[105,78607,78608,78611],{"class":107,"line":1718},[105,78609,78610],{"class":1954},"    .item",[105,78612,15564],{"class":115},[105,78614,78615,78617,78619,78622,78624],{"class":107,"line":1723},[105,78616,54756],{"class":164},[105,78618,51422],{"class":115},[105,78620,78621],{"class":164},"240",[105,78623,51477],{"class":111},[105,78625,1282],{"class":115},[105,78627,78628,78630,78632,78634,78636],{"class":107,"line":1740},[105,78629,61985],{"class":164},[105,78631,51422],{"class":115},[105,78633,562],{"class":164},[105,78635,51477],{"class":111},[105,78637,1282],{"class":115},[105,78639,78640,78642,78644,78646,78648,78651,78653],{"class":107,"line":1745},[105,78641,54680],{"class":164},[105,78643,51422],{"class":115},[105,78645,816],{"class":164},[105,78647,51477],{"class":111},[105,78649,78650],{"class":164}," 30",[105,78652,51477],{"class":111},[105,78654,1282],{"class":115},[105,78656,78657,78659,78661,78663,78666,78669,78671],{"class":107,"line":1750},[105,78658,61845],{"class":164},[105,78660,51422],{"class":115},[105,78662,28106],{"class":164},[105,78664,78665],{"class":164}," ease",[105,78667,78668],{"class":164}," .5",[105,78670,811],{"class":111},[105,78672,1282],{"class":115},[105,78674,78675,78678,78680,78682,78684],{"class":107,"line":1755},[105,78676,78677],{"class":164},"      margin-bottom",[105,78679,51422],{"class":115},[105,78681,816],{"class":164},[105,78683,51477],{"class":111},[105,78685,1282],{"class":115},[105,78687,78688],{"class":107,"line":1769},[105,78689,2178],{"class":115},[105,78691,78692],{"class":107,"line":1774},[105,78693,2391],{"emptyLinePlaceholder":32},[105,78695,78696,78699,78701,78704],{"class":107,"line":2568},[105,78697,78698],{"class":1954},"    .item:nth-child",[105,78700,116],{"class":115},[105,78702,78703],{"class":164},"4n",[105,78705,12434],{"class":115},[105,78707,78708,78710,78712,78714],{"class":107,"line":2582},[105,78709,61985],{"class":164},[105,78711,51422],{"class":115},[105,78713,307],{"class":164},[105,78715,1282],{"class":115},[105,78717,78718],{"class":107,"line":2590},[105,78719,2178],{"class":115},[105,78721,78722],{"class":107,"line":2595},[105,78723,2391],{"emptyLinePlaceholder":32},[105,78725,78726,78729],{"class":107,"line":2601},[105,78727,78728],{"class":1954},"    .item:hover",[105,78730,15564],{"class":115},[105,78732,78733,78736,78738,78740,78742,78744,78746,78748,78750,78753,78755,78757,78759,78761,78763,78765,78767,78770],{"class":107,"line":2607},[105,78734,78735],{"class":164},"      box-shadow",[105,78737,51422],{"class":115},[105,78739,307],{"class":164},[105,78741,51477],{"class":111},[105,78743,4084],{"class":164},[105,78745,51477],{"class":111},[105,78747,2139],{"class":164},[105,78749,51477],{"class":111},[105,78751,78752],{"class":164}," rgba",[105,78754,116],{"class":115},[105,78756,307],{"class":164},[105,78758,12427],{"class":115},[105,78760,307],{"class":164},[105,78762,12427],{"class":115},[105,78764,307],{"class":164},[105,78766,12427],{"class":115},[105,78768,78769],{"class":164},".2",[105,78771,2710],{"class":115},[105,78773,78774,78777,78779,78782,78784,78786,78788,78791,78793,78795,78797],{"class":107,"line":2612},[105,78775,78776],{"class":164},"      transform",[105,78778,51422],{"class":115},[105,78780,78781],{"class":164},"translate3d",[105,78783,116],{"class":115},[105,78785,307],{"class":164},[105,78787,12427],{"class":115},[105,78789,78790],{"class":164},"-4",[105,78792,51477],{"class":111},[105,78794,12427],{"class":115},[105,78796,307],{"class":164},[105,78798,2710],{"class":115},[105,78800,78801,78803,78805,78807],{"class":107,"line":7940},[105,78802,62010],{"class":164},[105,78804,51422],{"class":115},[105,78806,62015],{"class":164},[105,78808,1282],{"class":115},[105,78810,78811],{"class":107,"line":7964},[105,78812,2178],{"class":115},[105,78814,78815],{"class":107,"line":7969},[105,78816,2391],{"emptyLinePlaceholder":32},[105,78818,78819,78821,78823],{"class":107,"line":7975},[105,78820,78610],{"class":1954},[105,78822,55600],{"class":51285},[105,78824,15564],{"class":115},[105,78826,78827,78829,78831,78833,78835],{"class":107,"line":8002},[105,78828,54756],{"class":164},[105,78830,51422],{"class":115},[105,78832,427],{"class":164},[105,78834,444],{"class":111},[105,78836,1282],{"class":115},[105,78838,78839],{"class":107,"line":8007},[105,78840,2178],{"class":115},[105,78842,78843],{"class":107,"line":8013},[105,78844,2391],{"emptyLinePlaceholder":32},[105,78846,78847,78849,78851],{"class":107,"line":8025},[105,78848,78610],{"class":1954},[105,78850,62289],{"class":1954},[105,78852,15564],{"class":115},[105,78854,78855,78857,78859,78861,78863],{"class":107,"line":8037},[105,78856,54907],{"class":164},[105,78858,51422],{"class":115},[105,78860,766],{"class":164},[105,78862,51477],{"class":111},[105,78864,1282],{"class":115},[105,78866,78867,78869,78871,78873,78875],{"class":107,"line":8049},[105,78868,78677],{"class":164},[105,78870,51422],{"class":115},[105,78872,562],{"class":164},[105,78874,51477],{"class":111},[105,78876,1282],{"class":115},[105,78878,78879,78881,78883,78886],{"class":107,"line":9708},[105,78880,57401],{"class":164},[105,78882,51422],{"class":115},[105,78884,78885],{"class":164},"#666",[105,78887,1282],{"class":115},[105,78889,78890],{"class":107,"line":9733},[105,78891,2178],{"class":115},[105,78893,78894],{"class":107,"line":9756},[105,78895,2391],{"emptyLinePlaceholder":32},[105,78897,78898,78900,78903],{"class":107,"line":9780},[105,78899,78610],{"class":1954},[105,78901,78902],{"class":1954}," .price",[105,78904,15564],{"class":115},[105,78906,78907,78909,78911,78913,78915],{"class":107,"line":9785},[105,78908,54907],{"class":164},[105,78910,51422],{"class":115},[105,78912,866],{"class":164},[105,78914,51477],{"class":111},[105,78916,1282],{"class":115},[105,78918,78919,78921,78923,78926],{"class":107,"line":9790},[105,78920,57401],{"class":164},[105,78922,51422],{"class":115},[105,78924,78925],{"class":164},"firebrick",[105,78927,1282],{"class":115},[105,78929,78930],{"class":107,"line":9795},[105,78931,2178],{"class":115},[105,78933,78934],{"class":107,"line":9804},[105,78935,2391],{"emptyLinePlaceholder":32},[105,78937,78938,78940,78943],{"class":107,"line":9809},[105,78939,78610],{"class":1954},[105,78941,78942],{"class":1954}," .price::before",[105,78944,15564],{"class":115},[105,78946,78947,78950,78952,78955],{"class":107,"line":9815},[105,78948,78949],{"class":164},"      content",[105,78951,51422],{"class":115},[105,78953,78954],{"class":220},"'￥'",[105,78956,1282],{"class":115},[105,78958,78959,78961,78963,78965,78967],{"class":107,"line":9836},[105,78960,54907],{"class":164},[105,78962,51422],{"class":115},[105,78964,665],{"class":164},[105,78966,51477],{"class":111},[105,78968,1282],{"class":115},[105,78970,78971],{"class":107,"line":9842},[105,78972,2178],{"class":115},[105,78974,78975],{"class":107,"line":9856},[105,78976,2391],{"emptyLinePlaceholder":32},[105,78978,78979,78982],{"class":107,"line":9862},[105,78980,78981],{"class":1954},"    .filter",[105,78983,15564],{"class":115},[105,78985,78986,78988,78990,78992],{"class":107,"line":9889},[105,78987,54994],{"class":164},[105,78989,51422],{"class":115},[105,78991,51462],{"class":164},[105,78993,1282],{"class":115},[105,78995,78996,78998,79000,79002,79004],{"class":107,"line":9898},[105,78997,54756],{"class":164},[105,78999,51422],{"class":115},[105,79001,78559],{"class":164},[105,79003,51477],{"class":111},[105,79005,1282],{"class":115},[105,79007,79008,79010,79012,79014,79016],{"class":107,"line":9904},[105,79009,54691],{"class":164},[105,79011,51422],{"class":115},[105,79013,307],{"class":164},[105,79015,51541],{"class":164},[105,79017,1282],{"class":115},[105,79019,79020,79022,79024,79026,79028,79030],{"class":107,"line":9912},[105,79021,54680],{"class":164},[105,79023,51422],{"class":115},[105,79025,772],{"class":164},[105,79027,51477],{"class":111},[105,79029,78650],{"class":164},[105,79031,79032],{"class":111},"px\n",[105,79034,79035],{"class":107,"line":9917},[105,79036,2178],{"class":115},[105,79038,79039],{"class":107,"line":16596},[105,79040,2391],{"emptyLinePlaceholder":32},[105,79042,79043,79045,79047],{"class":107,"line":16602},[105,79044,78981],{"class":1954},[105,79046,1390],{"class":51285},[105,79048,15564],{"class":115},[105,79050,79051,79053,79055,79057,79059,79061,79063],{"class":107,"line":16625},[105,79052,54680],{"class":164},[105,79054,51422],{"class":115},[105,79056,562],{"class":164},[105,79058,51477],{"class":111},[105,79060,8942],{"class":164},[105,79062,51477],{"class":111},[105,79064,1282],{"class":115},[105,79066,79067,79069,79071,79073],{"class":107,"line":16631},[105,79068,61706],{"class":164},[105,79070,51422],{"class":115},[105,79072,61803],{"class":164},[105,79074,1282],{"class":115},[105,79076,79077,79079,79081,79083],{"class":107,"line":16654},[105,79078,57401],{"class":164},[105,79080,51422],{"class":115},[105,79082,78885],{"class":164},[105,79084,1282],{"class":115},[105,79086,79087,79089,79091,79093],{"class":107,"line":16668},[105,79088,63955],{"class":164},[105,79090,51422],{"class":115},[105,79092,54722],{"class":164},[105,79094,1282],{"class":115},[105,79096,79097,79099,79101,79103,79105],{"class":107,"line":16688},[105,79098,61735],{"class":164},[105,79100,51422],{"class":115},[105,79102,816],{"class":164},[105,79104,51477],{"class":111},[105,79106,1282],{"class":115},[105,79108,79109],{"class":107,"line":16694},[105,79110,2178],{"class":115},[105,79112,79113],{"class":107,"line":16705},[105,79114,2391],{"emptyLinePlaceholder":32},[105,79116,79117,79119,79121,79123],{"class":107,"line":16728},[105,79118,78981],{"class":1954},[105,79120,1390],{"class":51285},[105,79122,61885],{"class":1954},[105,79124,15564],{"class":115},[105,79126,79127,79129,79131,79134],{"class":107,"line":16750},[105,79128,54869],{"class":164},[105,79130,51422],{"class":115},[105,79132,79133],{"class":164},"#05943c",[105,79135,1282],{"class":115},[105,79137,79138,79140,79142,79144],{"class":107,"line":16755},[105,79139,57401],{"class":164},[105,79141,51422],{"class":115},[105,79143,60827],{"class":164},[105,79145,1282],{"class":115},[105,79147,79148],{"class":107,"line":16761},[105,79149,2178],{"class":115},[105,79151,79152,79154,79156],{"class":107,"line":16775},[105,79153,52402],{"class":115},[105,79155,5118],{"class":51285},[105,79157,51292],{"class":115},[105,79159,79160,79162,79164],{"class":107,"line":16788},[105,79161,51770],{"class":115},[105,79163,51319],{"class":51285},[105,79165,51292],{"class":115},[105,79167,79168],{"class":107,"line":16793},[105,79169,2391],{"emptyLinePlaceholder":32},[105,79171,79172,79174,79176],{"class":107,"line":16807},[105,79173,1026],{"class":115},[105,79175,51785],{"class":51285},[105,79177,51292],{"class":115},[105,79179,79180,79182,79184,79186,79188,79191],{"class":107,"line":16812},[105,79181,52129],{"class":115},[105,79183,51596],{"class":51285},[105,79185,53471],{"class":1954},[105,79187,161],{"class":115},[105,79189,79190],{"class":220},"\"filter\"",[105,79192,51292],{"class":115},[105,79194,79195,79197,79199,79201,79203,79205,79208,79210,79212,79215,79217],{"class":107,"line":16818},[105,79196,51326],{"class":115},[105,79198,354],{"class":51285},[105,79200,61042],{"class":1954},[105,79202,161],{"class":115},[105,79204,61047],{"class":220},[105,79206,79207],{"class":1954}," data-index",[105,79209,161],{"class":115},[105,79211,3669],{"class":220},[105,79213,79214],{"class":115},">0-100元\u003C\u002F",[105,79216,354],{"class":51285},[105,79218,51292],{"class":115},[105,79220,79221,79223,79225,79227,79229,79231,79233,79235,79237,79240,79242],{"class":107,"line":16823},[105,79222,51326],{"class":115},[105,79224,354],{"class":51285},[105,79226,61042],{"class":1954},[105,79228,161],{"class":115},[105,79230,61047],{"class":220},[105,79232,79207],{"class":1954},[105,79234,161],{"class":115},[105,79236,3692],{"class":220},[105,79238,79239],{"class":115},">100-300元\u003C\u002F",[105,79241,354],{"class":51285},[105,79243,51292],{"class":115},[105,79245,79246,79248,79250,79252,79254,79256,79258,79260,79262,79265,79267],{"class":107,"line":16837},[105,79247,51326],{"class":115},[105,79249,354],{"class":51285},[105,79251,61042],{"class":1954},[105,79253,161],{"class":115},[105,79255,61047],{"class":220},[105,79257,79207],{"class":1954},[105,79259,161],{"class":115},[105,79261,3705],{"class":220},[105,79263,79264],{"class":115},">300元以上\u003C\u002F",[105,79266,354],{"class":51285},[105,79268,51292],{"class":115},[105,79270,79271,79273,79275,79277,79279,79281,79284,79286],{"class":107,"line":16842},[105,79272,51326],{"class":115},[105,79274,354],{"class":51285},[105,79276,61042],{"class":1954},[105,79278,161],{"class":115},[105,79280,61047],{"class":220},[105,79282,79283],{"class":115},">全部区间\u003C\u002F",[105,79285,354],{"class":51285},[105,79287,51292],{"class":115},[105,79289,79290,79292,79294],{"class":107,"line":16847},[105,79291,52402],{"class":115},[105,79293,51596],{"class":51285},[105,79295,51292],{"class":115},[105,79297,79298,79300,79302,79304,79306,79308],{"class":107,"line":16861},[105,79299,52129],{"class":115},[105,79301,51596],{"class":51285},[105,79303,53471],{"class":1954},[105,79305,161],{"class":115},[105,79307,62593],{"class":220},[105,79309,51292],{"class":115},[105,79311,79312],{"class":107,"line":16873},[105,79313,79314],{"class":174},"    \u003C!-- \u003Cdiv class=\"item\">\n",[105,79316,79317],{"class":107,"line":16878},[105,79318,79319],{"class":174},"      \u003Cimg src=\"\" alt=\"\">\n",[105,79321,79322],{"class":107,"line":16891},[105,79323,79324],{"class":174},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[105,79326,79327],{"class":107,"line":16896},[105,79328,79329],{"class":174},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[105,79331,79332],{"class":107,"line":16901},[105,79333,79334],{"class":174},"    \u003C\u002Fdiv> -->\n",[105,79336,79337,79339,79341],{"class":107,"line":16906},[105,79338,52402],{"class":115},[105,79340,51596],{"class":51285},[105,79342,51292],{"class":115},[105,79344,79345,79347,79349],{"class":107,"line":16919},[105,79346,52129],{"class":115},[105,79348,51798],{"class":51285},[105,79350,51292],{"class":115},[105,79352,79353],{"class":107,"line":16924},[105,79354,79355],{"class":174},"    \u002F\u002F 2. 初始化数据\n",[105,79357,79358,79360,79363,79365],{"class":107,"line":32618},[105,79359,11213],{"class":111},[105,79361,79362],{"class":164}," goodsList",[105,79364,13556],{"class":111},[105,79366,55432],{"class":115},[105,79368,79369],{"class":107,"line":32624},[105,79370,79371],{"class":115},"      {\n",[105,79373,79374,79377,79380],{"class":107,"line":32630},[105,79375,79376],{"class":115},"        id: ",[105,79378,79379],{"class":220},"'4001172'",[105,79381,31451],{"class":115},[105,79383,79384,79387,79390],{"class":107,"line":32636},[105,79385,79386],{"class":115},"        name: ",[105,79388,79389],{"class":220},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[105,79391,31451],{"class":115},[105,79393,79394,79397,79400],{"class":107,"line":32642},[105,79395,79396],{"class":115},"        price: ",[105,79398,79399],{"class":220},"'289.00'",[105,79401,31451],{"class":115},[105,79403,79404,79407,79410],{"class":107,"line":32653},[105,79405,79406],{"class":115},"        picture: ",[105,79408,79409],{"class":220},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[105,79411,31451],{"class":115},[105,79413,79414],{"class":107,"line":32659},[105,79415,77877],{"class":115},[105,79417,79418],{"class":107,"line":32679},[105,79419,79371],{"class":115},[105,79421,79422,79424,79427],{"class":107,"line":32685},[105,79423,79376],{"class":115},[105,79425,79426],{"class":220},"'4001594'",[105,79428,31451],{"class":115},[105,79430,79431,79433,79436],{"class":107,"line":32696},[105,79432,79386],{"class":115},[105,79434,79435],{"class":220},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[105,79437,31451],{"class":115},[105,79439,79440,79442,79445],{"class":107,"line":32702},[105,79441,79396],{"class":115},[105,79443,79444],{"class":220},"'288.00'",[105,79446,31451],{"class":115},[105,79448,79449,79451,79454],{"class":107,"line":32708},[105,79450,79406],{"class":115},[105,79452,79453],{"class":220},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[105,79455,31451],{"class":115},[105,79457,79458],{"class":107,"line":32714},[105,79459,77877],{"class":115},[105,79461,79462],{"class":107,"line":32720},[105,79463,79371],{"class":115},[105,79465,79466,79468,79471],{"class":107,"line":32726},[105,79467,79376],{"class":115},[105,79469,79470],{"class":220},"'4001009'",[105,79472,31451],{"class":115},[105,79474,79475,79477,79480],{"class":107,"line":32732},[105,79476,79386],{"class":115},[105,79478,79479],{"class":220},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[105,79481,31451],{"class":115},[105,79483,79484,79486,79489],{"class":107,"line":32738},[105,79485,79396],{"class":115},[105,79487,79488],{"class":220},"'109.00'",[105,79490,31451],{"class":115},[105,79492,79493,79495,79498],{"class":107,"line":32758},[105,79494,79406],{"class":115},[105,79496,79497],{"class":220},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[105,79499,31451],{"class":115},[105,79501,79502],{"class":107,"line":32764},[105,79503,77877],{"class":115},[105,79505,79506],{"class":107,"line":32780},[105,79507,79371],{"class":115},[105,79509,79510,79512,79515],{"class":107,"line":32786},[105,79511,79376],{"class":115},[105,79513,79514],{"class":220},"'4001874'",[105,79516,31451],{"class":115},[105,79518,79519,79521,79524],{"class":107,"line":32800},[105,79520,79386],{"class":115},[105,79522,79523],{"class":220},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[105,79525,31451],{"class":115},[105,79527,79528,79530,79533],{"class":107,"line":32806},[105,79529,79396],{"class":115},[105,79531,79532],{"class":220},"'488.00'",[105,79534,31451],{"class":115},[105,79536,79537,79539,79542],{"class":107,"line":32821},[105,79538,79406],{"class":115},[105,79540,79541],{"class":220},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[105,79543,31451],{"class":115},[105,79545,79546],{"class":107,"line":32827},[105,79547,77877],{"class":115},[105,79549,79550],{"class":107,"line":32836},[105,79551,79371],{"class":115},[105,79553,79554,79556,79559],{"class":107,"line":32842},[105,79555,79376],{"class":115},[105,79557,79558],{"class":220},"'4001649'",[105,79560,31451],{"class":115},[105,79562,79563,79565,79568],{"class":107,"line":32851},[105,79564,79386],{"class":115},[105,79566,79567],{"class":220},"'大师监制龙泉青瓷茶叶罐'",[105,79569,31451],{"class":115},[105,79571,79572,79574,79577],{"class":107,"line":32857},[105,79573,79396],{"class":115},[105,79575,79576],{"class":220},"'139.00'",[105,79578,31451],{"class":115},[105,79580,79581,79583,79586],{"class":107,"line":32863},[105,79582,79406],{"class":115},[105,79584,79585],{"class":220},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[105,79587,31451],{"class":115},[105,79589,79590],{"class":107,"line":32872},[105,79591,77877],{"class":115},[105,79593,79594],{"class":107,"line":32878},[105,79595,79371],{"class":115},[105,79597,79598,79600,79603],{"class":107,"line":32889},[105,79599,79376],{"class":115},[105,79601,79602],{"class":220},"'3997185'",[105,79604,31451],{"class":115},[105,79606,79607,79609,79612],{"class":107,"line":32895},[105,79608,79386],{"class":115},[105,79610,79611],{"class":220},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[105,79613,31451],{"class":115},[105,79615,79616,79618,79621],{"class":107,"line":32914},[105,79617,79396],{"class":115},[105,79619,79620],{"class":220},"'108.00'",[105,79622,31451],{"class":115},[105,79624,79625,79627,79630],{"class":107,"line":32920},[105,79626,79406],{"class":115},[105,79628,79629],{"class":220},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[105,79631,31451],{"class":115},[105,79633,79634],{"class":107,"line":32931},[105,79635,77877],{"class":115},[105,79637,79638],{"class":107,"line":32937},[105,79639,79371],{"class":115},[105,79641,79642,79644,79647],{"class":107,"line":32957},[105,79643,79376],{"class":115},[105,79645,79646],{"class":220},"'3997403'",[105,79648,31451],{"class":115},[105,79650,79651,79653,79656],{"class":107,"line":32973},[105,79652,79386],{"class":115},[105,79654,79655],{"class":220},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[105,79657,31451],{"class":115},[105,79659,79660,79662,79665],{"class":107,"line":32979},[105,79661,79396],{"class":115},[105,79663,79664],{"class":220},"'100.00'",[105,79666,31451],{"class":115},[105,79668,79669,79671,79674],{"class":107,"line":32993},[105,79670,79406],{"class":115},[105,79672,79673],{"class":220},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[105,79675,31451],{"class":115},[105,79677,79678],{"class":107,"line":32999},[105,79679,77877],{"class":115},[105,79681,79682],{"class":107,"line":33005},[105,79683,79371],{"class":115},[105,79685,79686,79688,79691],{"class":107,"line":33016},[105,79687,79376],{"class":115},[105,79689,79690],{"class":220},"'3998274'",[105,79692,31451],{"class":115},[105,79694,79695,79697,79700],{"class":107,"line":33022},[105,79696,79386],{"class":115},[105,79698,79699],{"class":220},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[105,79701,31451],{"class":115},[105,79703,79704,79706,79708],{"class":107,"line":33028},[105,79705,79396],{"class":115},[105,79707,79576],{"class":220},[105,79709,31451],{"class":115},[105,79711,79712,79714,79717],{"class":107,"line":33038},[105,79713,79406],{"class":115},[105,79715,79716],{"class":220},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[105,79718,31451],{"class":115},[105,79720,79721],{"class":107,"line":33044},[105,79722,77877],{"class":115},[105,79724,79725],{"class":107,"line":33055},[105,79726,53094],{"class":115},[105,79728,79729],{"class":107,"line":33061},[105,79730,2391],{"emptyLinePlaceholder":32},[105,79732,79733],{"class":107,"line":33071},[105,79734,79735],{"class":174},"    \u002F\u002F 1.渲染函数\n",[105,79737,79738,79740,79742,79744,79746],{"class":107,"line":33076},[105,79739,70069],{"class":111},[105,79741,70072],{"class":1954},[105,79743,116],{"class":115},[105,79745,3871],{"class":5208},[105,79747,12434],{"class":115},[105,79749,79750],{"class":107,"line":33082},[105,79751,79752],{"class":174},"      \u002F\u002F 声明空字符串\n",[105,79754,79755,79758,79761,79763],{"class":107,"line":33131},[105,79756,79757],{"class":111},"      let",[105,79759,79760],{"class":115}," str ",[105,79762,161],{"class":111},[105,79764,70089],{"class":220},[105,79766,79767],{"class":107,"line":33178},[105,79768,70094],{"class":174},[105,79770,79771,79773,79776,79778,79781,79784],{"class":107,"line":33183},[105,79772,57992],{"class":115},[105,79774,79775],{"class":1954},"forEach",[105,79777,116],{"class":115},[105,79779,79780],{"class":5208},"item",[105,79782,79783],{"class":111}," =>",[105,79785,15564],{"class":115},[105,79787,79788,79790,79793,79796,79798,79801,79803,79806,79809,79811],{"class":107,"line":33189},[105,79789,61255],{"class":111},[105,79791,79792],{"class":115}," { ",[105,79794,79795],{"class":164},"name",[105,79797,12427],{"class":115},[105,79799,79800],{"class":164},"price",[105,79802,12427],{"class":115},[105,79804,79805],{"class":164},"picture",[105,79807,79808],{"class":115}," } ",[105,79810,161],{"class":111},[105,79812,79813],{"class":115}," item\n",[105,79815,79816,79819,79821],{"class":107,"line":33208},[105,79817,79818],{"class":115},"        str ",[105,79820,9469],{"class":111},[105,79822,70153],{"class":220},[105,79824,79825],{"class":107,"line":33214},[105,79826,79827],{"class":220},"          \u003Cdiv class=\"item\">\n",[105,79829,79830,79833,79835],{"class":107,"line":33234},[105,79831,79832],{"class":220},"            \u003Cimg src=\"${",[105,79834,79805],{"class":115},[105,79836,79837],{"class":220},"}\" alt=\"\">\n",[105,79839,79840,79843,79845],{"class":107,"line":33240},[105,79841,79842],{"class":220},"            \u003Cp class=\"name\">${",[105,79844,79795],{"class":115},[105,79846,79847],{"class":220},"}\u003C\u002Fp>\n",[105,79849,79850,79853,79855],{"class":107,"line":33246},[105,79851,79852],{"class":220},"            \u003Cp class=\"price\">${",[105,79854,79800],{"class":115},[105,79856,79847],{"class":220},[105,79858,79859],{"class":107,"line":33256},[105,79860,79861],{"class":220},"          \u003C\u002Fdiv>\n",[105,79863,79864],{"class":107,"line":33261},[105,79865,79866],{"class":220},"        `\n",[105,79868,79869],{"class":107,"line":33267},[105,79870,64800],{"class":115},[105,79872,79873],{"class":107,"line":33283},[105,79874,79875],{"class":174},"      \u002F\u002F 追加给List\n",[105,79877,79878,79880,79882,79884,79887,79889,79891],{"class":107,"line":33328},[105,79879,55756],{"class":115},[105,79881,54384],{"class":1954},[105,79883,116],{"class":115},[105,79885,79886],{"class":220},"'.list'",[105,79888,74234],{"class":115},[105,79890,161],{"class":111},[105,79892,73970],{"class":115},[105,79894,79895],{"class":107,"line":33334},[105,79896,2178],{"class":115},[105,79898,79899],{"class":107,"line":33340},[105,79900,79901],{"class":174},"    \u002F\u002F 页面一打开就需要渲染\n",[105,79903,79904,79907],{"class":107,"line":33346},[105,79905,79906],{"class":1954},"    render",[105,79908,79909],{"class":115},"(goodsList)\n",[105,79911,79912],{"class":107,"line":33357},[105,79913,79914],{"class":174},"    \u002F\u002F 2.过滤筛选\n",[105,79916,79917,79919,79921,79923,79926,79928,79930,79932,79934,79936,79938,79940],{"class":107,"line":33363},[105,79918,52392],{"class":115},[105,79920,54384],{"class":1954},[105,79922,116],{"class":115},[105,79924,79925],{"class":220},"'.filter'",[105,79927,30811],{"class":115},[105,79929,57798],{"class":1954},[105,79931,116],{"class":115},[105,79933,57803],{"class":220},[105,79935,12427],{"class":115},[105,79937,190],{"class":5208},[105,79939,79783],{"class":111},[105,79941,15564],{"class":115},[105,79943,79944],{"class":107,"line":33369},[105,79945,79946],{"class":174},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[105,79948,79949,79951,79953,79956,79958,79960,79962,79964],{"class":107,"line":33375},[105,79950,58213],{"class":111},[105,79952,79792],{"class":115},[105,79954,79955],{"class":164},"tagName",[105,79957,12427],{"class":115},[105,79959,31522],{"class":164},[105,79961,79808],{"class":115},[105,79963,161],{"class":111},[105,79965,79966],{"class":115}," e.target\n",[105,79968,79969],{"class":107,"line":33393},[105,79970,79971],{"class":174},"      \u002F\u002F 判断\n",[105,79973,79974,79976,79978,79980,79982],{"class":107,"line":33407},[105,79975,54465],{"class":111},[105,79977,67019],{"class":115},[105,79979,54471],{"class":111},[105,79981,68241],{"class":220},[105,79983,12434],{"class":115},[105,79985,79986],{"class":107,"line":33416},[105,79987,79988],{"class":174},"        \u002F\u002F console.log(11)\n",[105,79990,79991],{"class":107,"line":33425},[105,79992,79993],{"class":174},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[105,79995,79996],{"class":107,"line":33434},[105,79997,79998],{"class":174},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[105,80000,80001,80003,80005,80007],{"class":107,"line":33443},[105,80002,51815],{"class":111},[105,80004,51818],{"class":115},[105,80006,161],{"class":111},[105,80008,80009],{"class":115}," goodsList\n",[105,80011,80012,80014,80017,80019,80022],{"class":107,"line":33449},[105,80013,2488],{"class":111},[105,80015,80016],{"class":115}," (dataset.index ",[105,80018,54471],{"class":111},[105,80020,80021],{"class":220}," '1'",[105,80023,12434],{"class":115},[105,80025,80026,80029,80031,80034,80037,80039,80041,80043,80046,80048,80050,80053,80055,80057,80059],{"class":107,"line":33455},[105,80027,80028],{"class":115},"          arr ",[105,80030,161],{"class":111},[105,80032,80033],{"class":115}," goodsList.",[105,80035,80036],{"class":1954},"filter",[105,80038,116],{"class":115},[105,80040,79780],{"class":5208},[105,80042,79783],{"class":111},[105,80044,80045],{"class":115}," item.price ",[105,80047,1701],{"class":111},[105,80049,4084],{"class":164},[105,80051,80052],{"class":111}," &&",[105,80054,80045],{"class":115},[105,80056,1579],{"class":111},[105,80058,5746],{"class":164},[105,80060,122],{"class":115},[105,80062,80063,80066,80068,80070,80072,80074,80077],{"class":107,"line":33463},[105,80064,80065],{"class":115},"        } ",[105,80067,1692],{"class":111},[105,80069,1695],{"class":111},[105,80071,80016],{"class":115},[105,80073,54471],{"class":111},[105,80075,80076],{"class":220}," '2'",[105,80078,12434],{"class":115},[105,80080,80081,80083,80085,80087,80089,80091,80093,80095,80097,80099,80101,80103,80105,80107,80110],{"class":107,"line":33468},[105,80082,80028],{"class":115},[105,80084,161],{"class":111},[105,80086,80033],{"class":115},[105,80088,80036],{"class":1954},[105,80090,116],{"class":115},[105,80092,79780],{"class":5208},[105,80094,79783],{"class":111},[105,80096,80045],{"class":115},[105,80098,1701],{"class":111},[105,80100,5746],{"class":164},[105,80102,80052],{"class":111},[105,80104,80045],{"class":115},[105,80106,1579],{"class":111},[105,80108,80109],{"class":164}," 300",[105,80111,122],{"class":115},[105,80113,80114,80116,80118,80120,80122,80124,80127],{"class":107,"line":33474},[105,80115,80065],{"class":115},[105,80117,1692],{"class":111},[105,80119,1695],{"class":111},[105,80121,80016],{"class":115},[105,80123,54471],{"class":111},[105,80125,80126],{"class":220}," '3'",[105,80128,12434],{"class":115},[105,80130,80131,80133,80135,80137,80139,80141,80143,80145,80147,80149,80151],{"class":107,"line":33485},[105,80132,80028],{"class":115},[105,80134,161],{"class":111},[105,80136,80033],{"class":115},[105,80138,80036],{"class":1954},[105,80140,116],{"class":115},[105,80142,79780],{"class":5208},[105,80144,79783],{"class":111},[105,80146,80045],{"class":115},[105,80148,1701],{"class":111},[105,80150,80109],{"class":164},[105,80152,122],{"class":115},[105,80154,80155],{"class":107,"line":33491},[105,80156,2520],{"class":115},[105,80158,80159],{"class":107,"line":33511},[105,80160,80161],{"class":174},"        \u002F\u002F 渲染函数\n",[105,80163,80164,80166],{"class":107,"line":33517},[105,80165,70393],{"class":1954},[105,80167,52397],{"class":115},[105,80169,80170],{"class":107,"line":33523},[105,80171,52383],{"class":115},[105,80173,80174],{"class":107,"line":33529},[105,80175,2391],{"emptyLinePlaceholder":32},[105,80177,80178],{"class":107,"line":33546},[105,80179,33446],{"class":115},[105,80181,80182,80184,80186],{"class":107,"line":33552},[105,80183,52402],{"class":115},[105,80185,51798],{"class":51285},[105,80187,51292],{"class":115},[105,80189,80190,80192,80194],{"class":107,"line":33558},[105,80191,51770],{"class":115},[105,80193,51785],{"class":51285},[105,80195,51292],{"class":115},[105,80197,80198],{"class":107,"line":33564},[105,80199,2391],{"emptyLinePlaceholder":32},[105,80201,80202,80204,80206],{"class":107,"line":33570},[105,80203,51770],{"class":115},[105,80205,50620],{"class":51285},[105,80207,51292],{"class":115},[47,80209,80211],{"id":80210},"_410-深入了解对象","4.10 深入了解对象",[76,80213,80215],{"id":80214},"_4101-创建对象","4.10.1 创建对象",[14,80217,80218],{},[20,80219],{"alt":22,"src":80220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80222,80223],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[76,80225,80227],{"id":80226},"_4102-构造函数","4.10.2 构造函数",[14,80229,80230,80233],{},[265,80231,80232],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80235,80236,80239],{},[265,80237,80238],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[96,80241,80243],{"className":50618,"code":80242,"language":50620,"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",[102,80244,80245,80253,80258,80279,80292,80304,80316,80320,80325,80352,80357,80384],{"__ignoreMap":22},[105,80246,80247,80249,80251],{"class":107,"line":108},[105,80248,1026],{"class":115},[105,80250,51798],{"class":51285},[105,80252,51292],{"class":115},[105,80254,80255],{"class":107,"line":28},[105,80256,80257],{"class":174},"\u002F\u002F例：\n",[105,80259,80260,80262,80265,80267,80269,80271,80273,80275,80277],{"class":107,"line":1171},[105,80261,54434],{"class":111},[105,80263,80264],{"class":1954}," Pig",[105,80266,116],{"class":115},[105,80268,79795],{"class":5208},[105,80270,494],{"class":115},[105,80272,70206],{"class":5208},[105,80274,494],{"class":115},[105,80276,70223],{"class":5208},[105,80278,12434],{"class":115},[105,80280,80281,80284,80287,80289],{"class":107,"line":1186},[105,80282,80283],{"class":164},"    this",[105,80285,80286],{"class":115},".name",[105,80288,161],{"class":111},[105,80290,80291],{"class":115},"name\n",[105,80293,80294,80296,80299,80301],{"class":107,"line":1192},[105,80295,80283],{"class":164},[105,80297,80298],{"class":115},".age",[105,80300,161],{"class":111},[105,80302,80303],{"class":115},"age\n",[105,80305,80306,80308,80311,80313],{"class":107,"line":1206},[105,80307,80283],{"class":164},[105,80309,80310],{"class":115},".gender",[105,80312,161],{"class":111},[105,80314,80315],{"class":115},"gender    \n",[105,80317,80318],{"class":107,"line":1212},[105,80319,1556],{"class":115},[105,80321,80322],{"class":107,"line":1303},[105,80323,80324],{"class":174},"\u002F\u002F创建佩奇对象\n",[105,80326,80327,80329,80332,80334,80336,80338,80341,80343,80345,80347,80350],{"class":107,"line":1309},[105,80328,6784],{"class":111},[105,80330,80331],{"class":164}," Peppa",[105,80333,11709],{"class":111},[105,80335,80264],{"class":1954},[105,80337,116],{"class":115},[105,80339,80340],{"class":220},"'佩奇'",[105,80342,494],{"class":115},[105,80344,460],{"class":164},[105,80346,494],{"class":115},[105,80348,80349],{"class":220},"'女'",[105,80351,122],{"class":115},[105,80353,80354],{"class":107,"line":1321},[105,80355,80356],{"class":174},"\u002F\u002F创建乔治对象\n",[105,80358,80359,80361,80364,80366,80368,80370,80373,80375,80377,80379,80382],{"class":107,"line":1603},[105,80360,6784],{"class":111},[105,80362,80363],{"class":164}," George",[105,80365,11709],{"class":111},[105,80367,80264],{"class":1954},[105,80369,116],{"class":115},[105,80371,80372],{"class":220},"'乔治'",[105,80374,494],{"class":115},[105,80376,187],{"class":164},[105,80378,494],{"class":115},[105,80380,80381],{"class":220},"'男'",[105,80383,122],{"class":115},[105,80385,80386,80388,80390],{"class":107,"line":1608},[105,80387,51770],{"class":115},[105,80389,51798],{"class":51285},[105,80391,51292],{"class":115},[14,80393,80394],{},[20,80395],{"alt":22,"src":80396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80398,80399],{},[20,80400],{"alt":22,"src":80401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80403,80404],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80406,80407],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80409,80410],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80412,80413],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80415,80416],{},"这里用等号是因为：对象.属性=值",[14,80418,80419],{},"①利用对象字面量创建对象",[14,80421,80422],{},"const o={",[14,80424,80425],{},"name:'pink'",[14,80427,80428],{},"} ②利用new Object创建对象",[14,80430,80431],{},"const o=new Object({name:'pink'})",[14,80433,80434],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80436,80437],{},"构造函数创建对象的执行过程：",[14,80439,80440],{},[20,80441],{"alt":22,"src":80442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[76,80444,80446],{"id":80445},"_4103-实例成员","4.10.3 实例成员",[14,80448,80449],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[59,80451,80452,80455,80458],{},[62,80453,80454],{},"实例对象的属性和方法即为实例成员",[62,80456,80457],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[62,80459,80460],{},"构造函数创建的实例对象彼此独立互不影响",[76,80462,80464],{"id":80463},"_4104-静态成员","4.10.4 静态成员",[14,80466,80467],{},[20,80468],{"alt":22,"src":80469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80471,80472],{},"静态成员有Date.now() Math.PI Math.random()",[14,80474,80475],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80477,80478],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80480,80481],{},"function Pig(name) n {",[14,80483,80484],{},"this.name=name",[14,80486,1062],{},[14,80488,80489],{},"Pig.eyes=2",[14,80491,80492],{},"Pig.sayHai=function () { console.log(this) }",[14,80494,80495],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80497,80498],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80500,11324],{},[59,80502,80503,80506,80509,80512,80515],{},[62,80504,80505],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[62,80507,80508],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[62,80510,80511],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[62,80513,80514],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[62,80516,80517],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80519,80520],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[76,80522,80524],{"id":80523},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80526,80527],{},"内置构造函数包含：",[14,80529,80530],{},[20,80531],{"alt":22,"src":80532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80534,80535],{},[20,80536],{"alt":22,"src":80537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80539,80540],{},"这些基本数据类型，js对他们进行了包装",[51798,80542,80543],{},"\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",[21990,80545,80547],{"id":80546},"_41051-object","4.10.5.1 Object",[14,80549,80550],{},"Object 是内置的构造函数，用于创建普通对象",[14,80552,80553],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[96,80555,80557],{"className":50618,"code":80556,"language":50620,"meta":22,"style":22},"const user=new Object({name:'小明',age:15})\n",[102,80558,80559],{"__ignoreMap":22},[105,80560,80561],{"class":107,"line":108},[105,80562,80556],{"class":115},[14,80564,80565],{},"三个常用的静态方法：",[22902,80567,80569],{"id":80568},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80571,80572],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80574,80575],{},[20,80576],{"alt":22,"src":80577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80579,80580],{},[20,80581],{"alt":22,"src":80582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[96,80584,80586],{"className":53052,"code":80585,"language":53054,"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",[102,80587,80588,80596,80604,80609,80614,80619,80624,80629,80634,80642],{"__ignoreMap":22},[105,80589,80590,80592,80594],{"class":107,"line":108},[105,80591,1026],{"class":115},[105,80593,51785],{"class":51285},[105,80595,51292],{"class":115},[105,80597,80598,80600,80602],{"class":107,"line":28},[105,80599,52129],{"class":115},[105,80601,51798],{"class":51285},[105,80603,51292],{"class":115},[105,80605,80606],{"class":107,"line":1171},[105,80607,80608],{"class":115},"    const o = { name: 'pink', age: 6 }\n",[105,80610,80611],{"class":107,"line":1186},[105,80612,80613],{"class":115},"    \u002F\u002F 获得所有属性名\n",[105,80615,80616],{"class":107,"line":1192},[105,80617,80618],{"class":115},"    const arr = Object.keys(o)\n",[105,80620,80621],{"class":107,"line":1206},[105,80622,80623],{"class":115},"    console.log(arr)\n",[105,80625,80626],{"class":107,"line":1212},[105,80627,80628],{"class":115},"    \u002F\u002F 获得所有属性值\n",[105,80630,80631],{"class":107,"line":1303},[105,80632,80633],{"class":115},"    console.log(Object.values(o))\n",[105,80635,80636,80638,80640],{"class":107,"line":1309},[105,80637,52402],{"class":115},[105,80639,51798],{"class":51285},[105,80641,51292],{"class":115},[105,80643,80644,80646,80648],{"class":107,"line":1321},[105,80645,51770],{"class":115},[105,80647,51785],{"class":51285},[105,80649,51292],{"class":115},[22902,80651,80653],{"id":80652},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80655,80656],{},"Object.assign(oo,o)",[14,80658,80659],{},"后的东西添加给前 是追加",[14,80661,80662],{},[20,80663],{"alt":22,"src":80664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80666,80667],{},[20,80668],{"alt":22,"src":80669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[96,80671,80673],{"className":53052,"code":80672,"language":53054,"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",[102,80674,80675,80683,80691,80695,80699,80703,80707,80711,80715,80720,80725,80730,80735,80740,80748],{"__ignoreMap":22},[105,80676,80677,80679,80681],{"class":107,"line":108},[105,80678,1026],{"class":115},[105,80680,51785],{"class":51285},[105,80682,51292],{"class":115},[105,80684,80685,80687,80689],{"class":107,"line":28},[105,80686,52129],{"class":115},[105,80688,51798],{"class":51285},[105,80690,51292],{"class":115},[105,80692,80693],{"class":107,"line":1171},[105,80694,80608],{"class":115},[105,80696,80697],{"class":107,"line":1186},[105,80698,80613],{"class":115},[105,80700,80701],{"class":107,"line":1192},[105,80702,80618],{"class":115},[105,80704,80705],{"class":107,"line":1206},[105,80706,80623],{"class":115},[105,80708,80709],{"class":107,"line":1212},[105,80710,80628],{"class":115},[105,80712,80713],{"class":107,"line":1303},[105,80714,80633],{"class":115},[105,80716,80717],{"class":107,"line":1309},[105,80718,80719],{"class":115},"    const oo = {}\n",[105,80721,80722],{"class":107,"line":1321},[105,80723,80724],{"class":115},"    Object.assign(oo, o)\n",[105,80726,80727],{"class":107,"line":1603},[105,80728,80729],{"class":115},"    console.log(oo)\n",[105,80731,80732],{"class":107,"line":1608},[105,80733,80734],{"class":115},"    Object.assign(o, { gender: '女' })\n",[105,80736,80737],{"class":107,"line":1614},[105,80738,80739],{"class":115},"    console.log(o)\n",[105,80741,80742,80744,80746],{"class":107,"line":1619},[105,80743,52402],{"class":115},[105,80745,51798],{"class":51285},[105,80747,51292],{"class":115},[105,80749,80750,80752,80754],{"class":107,"line":1633},[105,80751,51770],{"class":115},[105,80753,51785],{"class":51285},[105,80755,51292],{"class":115},[14,80757,80758],{},[20,80759],{"alt":22,"src":80760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21990,80762,80764],{"id":80763},"_41052-array","4.10.5.2 Array",[14,80766,80767],{},"Array 是内置的构造函数，用于创建数组",[14,80769,80770],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[96,80772,80774],{"className":50618,"code":80773,"language":50620,"meta":22,"style":22},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[102,80775,80776,80781],{"__ignoreMap":22},[105,80777,80778],{"class":107,"line":108},[105,80779,80780],{"class":115},"const arr=new Array(3,5)\n",[105,80782,80783],{"class":107,"line":28},[105,80784,80785],{"class":115},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80787,80788],{},"Array的实例方法，这个方法是实例成员",[14,80790,80791],{},[20,80792],{"alt":22,"src":80793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22902,80795,80797],{"id":80796},"_410521-reduce","4.10.5.2.1 reduce",[14,80799,80800],{},[20,80801],{"alt":22,"src":80802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[96,80804,80806],{"className":53052,"code":80805,"language":53054,"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",[102,80807,80808,80816,80824,80829,80834,80839,80844,80848,80853,80858,80863,80867,80872,80877,80881,80886,80891,80896,80904],{"__ignoreMap":22},[105,80809,80810,80812,80814],{"class":107,"line":108},[105,80811,1026],{"class":115},[105,80813,51785],{"class":51285},[105,80815,51292],{"class":115},[105,80817,80818,80820,80822],{"class":107,"line":28},[105,80819,52129],{"class":115},[105,80821,51798],{"class":51285},[105,80823,51292],{"class":115},[105,80825,80826],{"class":107,"line":1171},[105,80827,80828],{"class":115},"    const arr = [1, 5, 8]\n",[105,80830,80831],{"class":107,"line":1186},[105,80832,80833],{"class":115},"    \u002F\u002F 1.没有初始值\n",[105,80835,80836],{"class":107,"line":1192},[105,80837,80838],{"class":115},"    const total = arr.reduce(function (prev, current) {\n",[105,80840,80841],{"class":107,"line":1206},[105,80842,80843],{"class":115},"      return prev + current\n",[105,80845,80846],{"class":107,"line":1212},[105,80847,33446],{"class":115},[105,80849,80850],{"class":107,"line":1303},[105,80851,80852],{"class":115},"    console.log(total)   \u002F\u002F14\n",[105,80854,80855],{"class":107,"line":1309},[105,80856,80857],{"class":115},"    \u002F\u002F 2.有初始值\n",[105,80859,80860],{"class":107,"line":1321},[105,80861,80862],{"class":115},"    const total1 = arr.reduce(function (prev, current) {\n",[105,80864,80865],{"class":107,"line":1603},[105,80866,80843],{"class":115},[105,80868,80869],{"class":107,"line":1608},[105,80870,80871],{"class":115},"    }, 10)\n",[105,80873,80874],{"class":107,"line":1614},[105,80875,80876],{"class":115},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[105,80878,80879],{"class":107,"line":1619},[105,80880,2391],{"emptyLinePlaceholder":32},[105,80882,80883],{"class":107,"line":1633},[105,80884,80885],{"class":115},"    \u002F\u002F 3.箭头函数写法\n",[105,80887,80888],{"class":107,"line":1638},[105,80889,80890],{"class":115},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[105,80892,80893],{"class":107,"line":1644},[105,80894,80895],{"class":115},"    console.log(total2)   \u002F\u002F24\n",[105,80897,80898,80900,80902],{"class":107,"line":1665},[105,80899,52402],{"class":115},[105,80901,51798],{"class":51285},[105,80903,51292],{"class":115},[105,80905,80906,80908,80910],{"class":107,"line":1670},[105,80907,51770],{"class":115},[105,80909,51785],{"class":51285},[105,80911,51292],{"class":115},[14,80913,80914],{},"执行过程：",[59,80916,80917,80920,80923],{},[62,80918,80919],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[62,80921,80922],{},"每一次循环，把返回值给作为下一次循环的上一次值",[62,80924,80925],{},"如果有起始值，则起始值作为上一次值",[96,80927,80929],{"className":53052,"code":80928,"language":53054,"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",[102,80930,80931,80939,80947,80951,80955,80959,80963,80967,80971,80976,80981,80986,80991,80996,81000,81004,81008,81012,81016,81020,81025,81029,81034,81038,81043,81048,81052,81056,81060,81068],{"__ignoreMap":22},[105,80932,80933,80935,80937],{"class":107,"line":108},[105,80934,1026],{"class":115},[105,80936,51785],{"class":51285},[105,80938,51292],{"class":115},[105,80940,80941,80943,80945],{"class":107,"line":28},[105,80942,52129],{"class":115},[105,80944,51798],{"class":51285},[105,80946,51292],{"class":115},[105,80948,80949],{"class":107,"line":1171},[105,80950,80828],{"class":115},[105,80952,80953],{"class":107,"line":1186},[105,80954,80833],{"class":115},[105,80956,80957],{"class":107,"line":1192},[105,80958,80838],{"class":115},[105,80960,80961],{"class":107,"line":1206},[105,80962,80843],{"class":115},[105,80964,80965],{"class":107,"line":1212},[105,80966,33446],{"class":115},[105,80968,80969],{"class":107,"line":1303},[105,80970,80852],{"class":115},[105,80972,80973],{"class":107,"line":1309},[105,80974,80975],{"class":115},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[105,80977,80978],{"class":107,"line":1321},[105,80979,80980],{"class":115},"    \u002F\u002F     1              5                    6\n",[105,80982,80983],{"class":107,"line":1603},[105,80984,80985],{"class":115},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[105,80987,80988],{"class":107,"line":1608},[105,80989,80990],{"class":115},"    \u002F\u002F     6              8                    14\n",[105,80992,80993],{"class":107,"line":1614},[105,80994,80995],{"class":115},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[105,80997,80998],{"class":107,"line":1619},[105,80999,80857],{"class":115},[105,81001,81002],{"class":107,"line":1633},[105,81003,80862],{"class":115},[105,81005,81006],{"class":107,"line":1638},[105,81007,80843],{"class":115},[105,81009,81010],{"class":107,"line":1644},[105,81011,80871],{"class":115},[105,81013,81014],{"class":107,"line":1665},[105,81015,80876],{"class":115},[105,81017,81018],{"class":107,"line":1670},[105,81019,80975],{"class":115},[105,81021,81022],{"class":107,"line":1684},[105,81023,81024],{"class":115},"    \u002F\u002F     10             1                     11\n",[105,81026,81027],{"class":107,"line":1689},[105,81028,80985],{"class":115},[105,81030,81031],{"class":107,"line":1718},[105,81032,81033],{"class":115},"    \u002F\u002F     11             5                    16\n",[105,81035,81036],{"class":107,"line":1723},[105,81037,80985],{"class":115},[105,81039,81040],{"class":107,"line":1740},[105,81041,81042],{"class":115},"    \u002F\u002F     16             8                    24\n",[105,81044,81045],{"class":107,"line":1745},[105,81046,81047],{"class":115},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[105,81049,81050],{"class":107,"line":1750},[105,81051,80885],{"class":115},[105,81053,81054],{"class":107,"line":1755},[105,81055,80890],{"class":115},[105,81057,81058],{"class":107,"line":1769},[105,81059,80895],{"class":115},[105,81061,81062,81064,81066],{"class":107,"line":1774},[105,81063,52402],{"class":115},[105,81065,51798],{"class":51285},[105,81067,51292],{"class":115},[105,81069,81070,81072,81074],{"class":107,"line":2568},[105,81071,51770],{"class":115},[105,81073,51785],{"class":51285},[105,81075,51292],{"class":115},[22902,81077,81079],{"id":81078},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81081,81082],{},[20,81083],{"alt":22,"src":81084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[96,81086,81088],{"className":53052,"code":81087,"language":53054,"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",[102,81089,81090,81098,81106,81111,81116,81121,81126,81130,81135,81140,81145,81150,81155,81160,81164,81169,81173,81178,81186],{"__ignoreMap":22},[105,81091,81092,81094,81096],{"class":107,"line":108},[105,81093,1026],{"class":115},[105,81095,51785],{"class":51285},[105,81097,51292],{"class":115},[105,81099,81100,81102,81104],{"class":107,"line":28},[105,81101,52129],{"class":115},[105,81103,51798],{"class":51285},[105,81105,51292],{"class":115},[105,81107,81108],{"class":107,"line":1171},[105,81109,81110],{"class":115},"    const arr = [\n",[105,81112,81113],{"class":107,"line":1186},[105,81114,81115],{"class":115},"      { name: '张三', salary: 10000 },\n",[105,81117,81118],{"class":107,"line":1192},[105,81119,81120],{"class":115},"      { name: '李四', salary: 10000 },\n",[105,81122,81123],{"class":107,"line":1206},[105,81124,81125],{"class":115},"      { name: '王五', salary: 10000 }\n",[105,81127,81128],{"class":107,"line":1212},[105,81129,53094],{"class":115},[105,81131,81132],{"class":107,"line":1303},[105,81133,81134],{"class":115},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[105,81136,81137],{"class":107,"line":1309},[105,81138,81139],{"class":115},"    \u002F\u002F prev是累计值\n",[105,81141,81142],{"class":107,"line":1321},[105,81143,81144],{"class":115},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[105,81146,81147],{"class":107,"line":1603},[105,81148,81149],{"class":115},"    console.log(total)\n",[105,81151,81152],{"class":107,"line":1608},[105,81153,81154],{"class":115},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[105,81156,81157],{"class":107,"line":1614},[105,81158,81159],{"class":115},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[105,81161,81162],{"class":107,"line":1619},[105,81163,81154],{"class":115},[105,81165,81166],{"class":107,"line":1633},[105,81167,81168],{"class":115},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[105,81170,81171],{"class":107,"line":1638},[105,81172,81154],{"class":115},[105,81174,81175],{"class":107,"line":1644},[105,81176,81177],{"class":115},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[105,81179,81180,81182,81184],{"class":107,"line":1665},[105,81181,52402],{"class":115},[105,81183,51798],{"class":51285},[105,81185,51292],{"class":115},[105,81187,81188,81190,81192],{"class":107,"line":1670},[105,81189,51770],{"class":115},[105,81191,51785],{"class":51285},[105,81193,51292],{"class":115},[22902,81195,81197],{"id":81196},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81199,81200],{},[20,81201],{"alt":22,"src":81202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81204,81205],{},[20,81206],{"alt":22,"src":81207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[59,81209,81210],{},[62,81211,81212],{},"find()",[14,81214,81215],{},"循环查找，找到第一个就ok",[14,81217,81218],{},[354,81219,81222],{"href":81220,"rel":81221},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23858],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[96,81224,81226],{"className":50618,"code":81225,"language":50620,"meta":22,"style":22},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[102,81227,81228,81233,81238],{"__ignoreMap":22},[105,81229,81230],{"class":107,"line":108},[105,81231,81232],{"class":115},"const array1 = [5, 12, 8, 130, 44]\n",[105,81234,81235],{"class":107,"line":28},[105,81236,81237],{"class":115},"const found = array1.find((element) => element > 10)\n",[105,81239,81240],{"class":107,"line":1171},[105,81241,81242],{"class":115},"console.log(found)  \u002F\u002F12\n",[14,81244,81245,81247,81248,81253,81254,81257,81258,81260,81261,81266,81267,81269,81270,81272,81273,81275,81276],{},[102,81246,81212],{}," 方法是一个",[354,81249,81252],{"href":81250,"rel":81251},"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",[23858],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[102,81255,81256],{},"callbackFn"," 函数，直到 ",[102,81259,81256],{}," 返回一个",[354,81262,81265],{"href":81263,"rel":81264},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23858],"真值","。然后 ",[102,81268,81212],{}," 返回该元素并停止迭代数组。如果 ",[102,81271,81256],{}," 从未返回真值，则 ",[102,81274,81212],{}," 返回 ",[102,81277,81278],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[96,81280,81282],{"className":53052,"code":81281,"language":53054,"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",[102,81283,81284,81292,81300,81305,81310,81315,81319,81324,81329,81333,81338,81343,81347,81351,81356,81361,81365,81369,81374,81379,81384,81389,81394,81398,81403,81408,81413,81418,81422,81427,81435],{"__ignoreMap":22},[105,81285,81286,81288,81290],{"class":107,"line":108},[105,81287,1026],{"class":115},[105,81289,51785],{"class":51285},[105,81291,51292],{"class":115},[105,81293,81294,81296,81298],{"class":107,"line":28},[105,81295,52129],{"class":115},[105,81297,51798],{"class":51285},[105,81299,51292],{"class":115},[105,81301,81302],{"class":107,"line":1171},[105,81303,81304],{"class":115},"    const arr = ['red', 'blue', 'green']\n",[105,81306,81307],{"class":107,"line":1186},[105,81308,81309],{"class":115},"    const found = arr.find(item => item === 'pink')\n",[105,81311,81312],{"class":107,"line":1192},[105,81313,81314],{"class":115},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[105,81316,81317],{"class":107,"line":1206},[105,81318,2391],{"emptyLinePlaceholder":32},[105,81320,81321],{"class":107,"line":1212},[105,81322,81323],{"class":115},"    \u002F\u002F 使用场景，用于查找数据\n",[105,81325,81326],{"class":107,"line":1303},[105,81327,81328],{"class":115},"    const arr1 = [\n",[105,81330,81331],{"class":107,"line":1309},[105,81332,79371],{"class":115},[105,81334,81335],{"class":107,"line":1321},[105,81336,81337],{"class":115},"        name: '小米',\n",[105,81339,81340],{"class":107,"line":1603},[105,81341,81342],{"class":115},"        price: 1999\n",[105,81344,81345],{"class":107,"line":1608},[105,81346,77877],{"class":115},[105,81348,81349],{"class":107,"line":1614},[105,81350,79371],{"class":115},[105,81352,81353],{"class":107,"line":1619},[105,81354,81355],{"class":115},"        name: '华为',\n",[105,81357,81358],{"class":107,"line":1633},[105,81359,81360],{"class":115},"        price: 3999\n",[105,81362,81363],{"class":107,"line":1638},[105,81364,52383],{"class":115},[105,81366,81367],{"class":107,"line":1644},[105,81368,53094],{"class":115},[105,81370,81371],{"class":107,"line":1665},[105,81372,81373],{"class":115},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[105,81375,81376],{"class":107,"line":1670},[105,81377,81378],{"class":115},"    \u002F\u002F const found1 = arr1.find(item => {\n",[105,81380,81381],{"class":107,"line":1684},[105,81382,81383],{"class":115},"    \u002F\u002F   if (item.name === '小米') {\n",[105,81385,81386],{"class":107,"line":1689},[105,81387,81388],{"class":115},"    \u002F\u002F     return item\n",[105,81390,81391],{"class":107,"line":1718},[105,81392,81393],{"class":115},"    \u002F\u002F   }\n",[105,81395,81396],{"class":107,"line":1723},[105,81397,63275],{"class":115},[105,81399,81400],{"class":107,"line":1740},[105,81401,81402],{"class":115},"    \u002F\u002F 另一种写法\n",[105,81404,81405],{"class":107,"line":1745},[105,81406,81407],{"class":115},"    const found1 = arr1.find(item => {\n",[105,81409,81410],{"class":107,"line":1750},[105,81411,81412],{"class":115},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[105,81414,81415],{"class":107,"line":1755},[105,81416,81417],{"class":115},"      return item.name = '小米'\n",[105,81419,81420],{"class":107,"line":1769},[105,81421,33446],{"class":115},[105,81423,81424],{"class":107,"line":1774},[105,81425,81426],{"class":115},"    console.log(found1)\n",[105,81428,81429,81431,81433],{"class":107,"line":2568},[105,81430,52402],{"class":115},[105,81432,51798],{"class":51285},[105,81434,51292],{"class":115},[105,81436,81437,81439,81441],{"class":107,"line":2582},[105,81438,51770],{"class":115},[105,81440,51785],{"class":51285},[105,81442,51292],{"class":115},[14,81444,81445],{},[20,81446],{"alt":22,"src":81447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81449,81450],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[59,81452,81453],{"start":28},[62,81454,81455],{},"every()返回的是布尔值",[14,81457,81458],{},[354,81459,81462],{"href":81460,"rel":81461},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23858],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81464,81465],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81467,81468],{},"some是只有有一个就没问题",[14,81470,81471],{},"every是必须全是才行",[96,81473,81477],{"className":81474,"code":81475,"language":81476,"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",[102,81478,81479,81495,81509,81513,81522],{"__ignoreMap":22},[105,81480,81481,81483,81486,81488,81490,81493],{"class":107,"line":108},[105,81482,54434],{"class":111},[105,81484,81485],{"class":115}," isBigEnough(element, ",[105,81487,74043],{"class":111},[105,81489,12427],{"class":115},[105,81491,81492],{"class":111},"array",[105,81494,12434],{"class":115},[105,81496,81497,81500,81503,81505,81507],{"class":107,"line":28},[105,81498,81499],{"class":111},"  return",[105,81501,81502],{"class":115}," element ",[105,81504,1701],{"class":111},[105,81506,2029],{"class":164},[105,81508,1282],{"class":115},[105,81510,81511],{"class":107,"line":1171},[105,81512,1556],{"class":115},[105,81514,81515,81518,81520],{"class":107,"line":1186},[105,81516,81517],{"class":115},"[12, 5, 8, 130, 44].every(isBigEnough); ",[105,81519,33314],{"class":111},[105,81521,54501],{"class":115},[105,81523,81524,81527,81529],{"class":107,"line":1192},[105,81525,81526],{"class":115},"[12, 54, 18, 130, 44].every(isBigEnough); ",[105,81528,33314],{"class":111},[105,81530,57925],{"class":115},[96,81532,81534],{"className":53052,"code":81533,"language":53054,"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",[102,81535,81536,81544,81552,81557,81561,81566,81571,81579],{"__ignoreMap":22},[105,81537,81538,81540,81542],{"class":107,"line":108},[105,81539,1026],{"class":115},[105,81541,51785],{"class":51285},[105,81543,51292],{"class":115},[105,81545,81546,81548,81550],{"class":107,"line":28},[105,81547,52129],{"class":115},[105,81549,51798],{"class":51285},[105,81551,51292],{"class":115},[105,81553,81554],{"class":107,"line":1171},[105,81555,81556],{"class":115},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[105,81558,81559],{"class":107,"line":1186},[105,81560,78307],{"class":115},[105,81562,81563],{"class":107,"line":1192},[105,81564,81565],{"class":115},"    const flag = arr.every(item => item >= 10)\n",[105,81567,81568],{"class":107,"line":1206},[105,81569,81570],{"class":115},"    console.log(flag)    \u002F\u002Ftrue\n",[105,81572,81573,81575,81577],{"class":107,"line":1212},[105,81574,52402],{"class":115},[105,81576,51798],{"class":51285},[105,81578,51292],{"class":115},[105,81580,81581,81583,81585],{"class":107,"line":1303},[105,81582,51770],{"class":115},[105,81584,51785],{"class":51285},[105,81586,51292],{"class":115},[96,81588,81590],{"className":53052,"code":81589,"language":53054,"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",[102,81591,81592,81600,81608,81612,81617,81622,81627,81635],{"__ignoreMap":22},[105,81593,81594,81596,81598],{"class":107,"line":108},[105,81595,1026],{"class":115},[105,81597,51785],{"class":51285},[105,81599,51292],{"class":115},[105,81601,81602,81604,81606],{"class":107,"line":28},[105,81603,52129],{"class":115},[105,81605,51798],{"class":51285},[105,81607,51292],{"class":115},[105,81609,81610],{"class":107,"line":1171},[105,81611,81556],{"class":115},[105,81613,81614],{"class":107,"line":1186},[105,81615,81616],{"class":115},"    const arr = [10, 0, 5]\n",[105,81618,81619],{"class":107,"line":1192},[105,81620,81621],{"class":115},"    const flag = arr.some(item => item >= 10)\n",[105,81623,81624],{"class":107,"line":1206},[105,81625,81626],{"class":115},"    console.log(flag)   \u002F\u002Ftrue\n",[105,81628,81629,81631,81633],{"class":107,"line":1212},[105,81630,52402],{"class":115},[105,81632,51798],{"class":51285},[105,81634,51292],{"class":115},[105,81636,81637,81639,81641],{"class":107,"line":1303},[105,81638,51770],{"class":115},[105,81640,51785],{"class":51285},[105,81642,51292],{"class":115},[22902,81644,81646],{"id":81645},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81648,81649],{},[20,81650],{"alt":22,"src":81651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[96,81653,81655],{"className":50618,"code":81654,"language":50620,"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",[102,81656,81657,81667,81681,81685,81693,81707,81727,81739,81747,81754,81766,81778,81790,81802,81812,81822,81826,81834,81842,81846,81854,81866,81874,81896,81901,81906,81939,81947,81955,81959],{"__ignoreMap":22},[105,81658,81659,81661,81663,81665],{"class":107,"line":108},[105,81660,51282],{"class":115},[105,81662,51286],{"class":51285},[105,81664,51289],{"class":1954},[105,81666,51292],{"class":115},[105,81668,81669,81671,81673,81675,81677,81679],{"class":107,"line":28},[105,81670,1026],{"class":115},[105,81672,50620],{"class":51285},[105,81674,51301],{"class":1954},[105,81676,161],{"class":115},[105,81678,51306],{"class":220},[105,81680,51292],{"class":115},[105,81682,81683],{"class":107,"line":1171},[105,81684,2391],{"emptyLinePlaceholder":32},[105,81686,81687,81689,81691],{"class":107,"line":1186},[105,81688,1026],{"class":115},[105,81690,51319],{"class":51285},[105,81692,51292],{"class":115},[105,81694,81695,81697,81699,81701,81703,81705],{"class":107,"line":1192},[105,81696,52129],{"class":115},[105,81698,51329],{"class":51285},[105,81700,51332],{"class":1954},[105,81702,161],{"class":115},[105,81704,51337],{"class":220},[105,81706,51292],{"class":115},[105,81708,81709,81711,81713,81715,81717,81719,81721,81723,81725],{"class":107,"line":1206},[105,81710,52129],{"class":115},[105,81712,51329],{"class":51285},[105,81714,14912],{"class":1954},[105,81716,161],{"class":115},[105,81718,51376],{"class":220},[105,81720,51356],{"class":1954},[105,81722,161],{"class":115},[105,81724,51383],{"class":220},[105,81726,51292],{"class":115},[105,81728,81729,81731,81733,81735,81737],{"class":107,"line":1212},[105,81730,52129],{"class":115},[105,81732,51392],{"class":51285},[105,81734,51395],{"class":115},[105,81736,51392],{"class":51285},[105,81738,51292],{"class":115},[105,81740,81741,81743,81745],{"class":107,"line":1303},[105,81742,52129],{"class":115},[105,81744,5118],{"class":51285},[105,81746,51292],{"class":115},[105,81748,81749,81752],{"class":107,"line":1309},[105,81750,81751],{"class":51285},"    div",[105,81753,15564],{"class":115},[105,81755,81756,81758,81760,81762,81764],{"class":107,"line":1321},[105,81757,54756],{"class":164},[105,81759,51422],{"class":115},[105,81761,1713],{"class":164},[105,81763,51477],{"class":111},[105,81765,1282],{"class":115},[105,81767,81768,81770,81772,81774,81776],{"class":107,"line":1603},[105,81769,54770],{"class":164},[105,81771,51422],{"class":115},[105,81773,517],{"class":164},[105,81775,51477],{"class":111},[105,81777,1282],{"class":115},[105,81779,81780,81782,81784,81786,81788],{"class":107,"line":1608},[105,81781,57344],{"class":164},[105,81783,51422],{"class":115},[105,81785,517],{"class":164},[105,81787,51477],{"class":111},[105,81789,1282],{"class":115},[105,81791,81792,81794,81796,81798,81800],{"class":107,"line":1614},[105,81793,65118],{"class":164},[105,81795,51422],{"class":115},[105,81797,614],{"class":164},[105,81799,51477],{"class":111},[105,81801,1282],{"class":115},[105,81803,81804,81806,81808,81810],{"class":107,"line":1619},[105,81805,57271],{"class":164},[105,81807,51422],{"class":115},[105,81809,51577],{"class":164},[105,81811,1282],{"class":115},[105,81813,81814,81816,81818,81820],{"class":107,"line":1633},[105,81815,54869],{"class":164},[105,81817,51422],{"class":115},[105,81819,51630],{"class":164},[105,81821,1282],{"class":115},[105,81823,81824],{"class":107,"line":1638},[105,81825,2178],{"class":115},[105,81827,81828,81830,81832],{"class":107,"line":1644},[105,81829,52402],{"class":115},[105,81831,5118],{"class":51285},[105,81833,51292],{"class":115},[105,81835,81836,81838,81840],{"class":107,"line":1665},[105,81837,51770],{"class":115},[105,81839,51319],{"class":51285},[105,81841,51292],{"class":115},[105,81843,81844],{"class":107,"line":1670},[105,81845,2391],{"emptyLinePlaceholder":32},[105,81847,81848,81850,81852],{"class":107,"line":1684},[105,81849,1026],{"class":115},[105,81851,51785],{"class":51285},[105,81853,51292],{"class":115},[105,81855,81856,81858,81860,81862,81864],{"class":107,"line":1689},[105,81857,52129],{"class":115},[105,81859,51596],{"class":51285},[105,81861,55299],{"class":115},[105,81863,51596],{"class":51285},[105,81865,51292],{"class":115},[105,81867,81868,81870,81872],{"class":107,"line":1718},[105,81869,52129],{"class":115},[105,81871,51798],{"class":51285},[105,81873,51292],{"class":115},[105,81875,81876,81878,81881,81883,81886,81889,81891,81894],{"class":107,"line":1723},[105,81877,11213],{"class":111},[105,81879,81880],{"class":164}," spec",[105,81882,13556],{"class":111},[105,81884,81885],{"class":115}," { size: ",[105,81887,81888],{"class":220},"'40cm*40cm'",[105,81890,55449],{"class":115},[105,81892,81893],{"class":220},"'黑色'",[105,81895,55589],{"class":115},[105,81897,81898],{"class":107,"line":1740},[105,81899,81900],{"class":174},"    \u002F\u002F const arr = Object.values(spec)\n",[105,81902,81903],{"class":107,"line":1745},[105,81904,81905],{"class":174},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[105,81907,81908,81910,81912,81914,81917,81919,81921,81924,81927,81930,81932,81934,81937],{"class":107,"line":1750},[105,81909,52392],{"class":115},[105,81911,54384],{"class":1954},[105,81913,116],{"class":115},[105,81915,81916],{"class":220},"'div'",[105,81918,74234],{"class":115},[105,81920,161],{"class":111},[105,81922,81923],{"class":115}," Object.",[105,81925,81926],{"class":1954},"values",[105,81928,81929],{"class":115},"(spec).",[105,81931,74208],{"class":1954},[105,81933,116],{"class":115},[105,81935,81936],{"class":220},"'\u002F'",[105,81938,122],{"class":115},[105,81940,81941,81943,81945],{"class":107,"line":1755},[105,81942,52402],{"class":115},[105,81944,51798],{"class":51285},[105,81946,51292],{"class":115},[105,81948,81949,81951,81953],{"class":107,"line":1769},[105,81950,51770],{"class":115},[105,81952,51785],{"class":51285},[105,81954,51292],{"class":115},[105,81956,81957],{"class":107,"line":1774},[105,81958,2391],{"emptyLinePlaceholder":32},[105,81960,81961,81963,81965],{"class":107,"line":2568},[105,81962,51770],{"class":115},[105,81964,50620],{"class":51285},[105,81966,51292],{"class":115},[14,81968,81969],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22902,81971,81973],{"id":81972},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,81975,81976],{},"静态方法，将伪数组转换为真数组",[14,81978,81979],{},[20,81980],{"alt":22,"src":81981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[96,81983,81985],{"className":53052,"code":81984,"language":53054,"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",[102,81986,81987,81995,82003,82015,82027,82039,82047,82055,82060,82065,82070,82075,82083],{"__ignoreMap":22},[105,81988,81989,81991,81993],{"class":107,"line":108},[105,81990,1026],{"class":115},[105,81992,51785],{"class":51285},[105,81994,51292],{"class":115},[105,81996,81997,81999,82001],{"class":107,"line":28},[105,81998,52129],{"class":115},[105,82000,1123],{"class":51285},[105,82002,51292],{"class":115},[105,82004,82005,82007,82009,82011,82013],{"class":107,"line":1171},[105,82006,51326],{"class":115},[105,82008,62],{"class":51285},[105,82010,55299],{"class":115},[105,82012,62],{"class":51285},[105,82014,51292],{"class":115},[105,82016,82017,82019,82021,82023,82025],{"class":107,"line":1186},[105,82018,51326],{"class":115},[105,82020,62],{"class":51285},[105,82022,55299],{"class":115},[105,82024,62],{"class":51285},[105,82026,51292],{"class":115},[105,82028,82029,82031,82033,82035,82037],{"class":107,"line":1192},[105,82030,51326],{"class":115},[105,82032,62],{"class":51285},[105,82034,55299],{"class":115},[105,82036,62],{"class":51285},[105,82038,51292],{"class":115},[105,82040,82041,82043,82045],{"class":107,"line":1206},[105,82042,52402],{"class":115},[105,82044,1123],{"class":51285},[105,82046,51292],{"class":115},[105,82048,82049,82051,82053],{"class":107,"line":1212},[105,82050,52129],{"class":115},[105,82052,51798],{"class":51285},[105,82054,51292],{"class":115},[105,82056,82057],{"class":107,"line":1303},[105,82058,82059],{"class":115},"    const lis = document.querySelectorAll('li')\n",[105,82061,82062],{"class":107,"line":1309},[105,82063,82064],{"class":115},"    const liss = Array.from(lis)\n",[105,82066,82067],{"class":107,"line":1321},[105,82068,82069],{"class":115},"    liss.pop()\n",[105,82071,82072],{"class":107,"line":1603},[105,82073,82074],{"class":115},"    console.log(liss)\n",[105,82076,82077,82079,82081],{"class":107,"line":1608},[105,82078,52402],{"class":115},[105,82080,51798],{"class":51285},[105,82082,51292],{"class":115},[105,82084,82085,82087,82089],{"class":107,"line":1614},[105,82086,51770],{"class":115},[105,82088,51785],{"class":51285},[105,82090,51292],{"class":115},[14,82092,82093],{},[20,82094],{"alt":22,"src":82095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21990,82097,82099],{"id":82098},"_41053-string","4.10.5.3 String",[14,82101,82102],{},[20,82103],{"alt":22,"src":82104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22902,82106,82108],{"id":82107},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[96,82110,82112],{"className":53052,"code":82111,"language":53054,"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",[102,82113,82114,82122,82130,82135,82140,82145,82149,82154,82159,82164,82172],{"__ignoreMap":22},[105,82115,82116,82118,82120],{"class":107,"line":108},[105,82117,1026],{"class":115},[105,82119,51785],{"class":51285},[105,82121,51292],{"class":115},[105,82123,82124,82126,82128],{"class":107,"line":28},[105,82125,52129],{"class":115},[105,82127,51798],{"class":51285},[105,82129,51292],{"class":115},[105,82131,82132],{"class":107,"line":1171},[105,82133,82134],{"class":115},"    \u002F\u002F 把字符串转化为数组\n",[105,82136,82137],{"class":107,"line":1186},[105,82138,82139],{"class":115},"    const str = 'pink,red'\n",[105,82141,82142],{"class":107,"line":1192},[105,82143,82144],{"class":115},"    const arr = str.split(',')\n",[105,82146,82147],{"class":107,"line":1206},[105,82148,80623],{"class":115},[105,82150,82151],{"class":107,"line":1212},[105,82152,82153],{"class":115},"    const str1 = '2025-8-25'\n",[105,82155,82156],{"class":107,"line":1303},[105,82157,82158],{"class":115},"    const arr1 = str1.split('-')\n",[105,82160,82161],{"class":107,"line":1309},[105,82162,82163],{"class":115},"    console.log(arr1)\n",[105,82165,82166,82168,82170],{"class":107,"line":1321},[105,82167,52402],{"class":115},[105,82169,51798],{"class":51285},[105,82171,51292],{"class":115},[105,82173,82174,82176,82178],{"class":107,"line":1603},[105,82175,51770],{"class":115},[105,82177,51785],{"class":51285},[105,82179,51292],{"class":115},[22902,82181,82183],{"id":82182},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82185,5173],{},[14,82187,82188],{},"substring(indexStart)",[14,82190,82191],{},"substring(indexStart, indexEnd)",[1123,82193,82194,82205,82217,82227],{},[62,82195,82196,82197,82200,82201,82204],{},"如果省略了 ",[102,82198,82199],{},"indexEnd","，则 ",[102,82202,82203],{},"substring()"," 提取字符直到字符串的末尾",[62,82206,82207,82208,82211,82212,82200,82214,82216],{},"如果 ",[102,82209,82210],{},"indexStart"," 等于 ",[102,82213,82199],{},[102,82215,82203],{}," 返回一个空字符串",[62,82218,82207,82219,82221,82222,82200,82224,82226],{},[102,82220,82210],{}," 大于 ",[102,82223,82199],{},[102,82225,82203],{}," 的效果就像交换了这两个参数一样",[62,82228,82229],{},"结束的索引号不包含想要截取的部分",[96,82231,82233],{"className":81474,"code":82232,"language":81476,"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",[102,82234,82235,82247,82251,82285,82315,82319,82350,82354,82381,82411,82441,82445,82476],{"__ignoreMap":22},[105,82236,82237,82240,82242,82245],{"class":107,"line":108},[105,82238,82239],{"class":115},"const anyString ",[105,82241,161],{"class":111},[105,82243,82244],{"class":220}," \"Mozilla\"",[105,82246,1282],{"class":115},[105,82248,82249],{"class":107,"line":28},[105,82250,2391],{"emptyLinePlaceholder":32},[105,82252,82253,82256,82258,82260,82262,82265,82267,82270,82272,82274,82276,82278,82280,82282],{"class":107,"line":1171},[105,82254,82255],{"class":164},"console",[105,82257,674],{"class":115},[105,82259,58232],{"class":164},[105,82261,116],{"class":115},[105,82263,82264],{"class":164},"anyString",[105,82266,674],{"class":115},[105,82268,82269],{"class":164},"substring",[105,82271,116],{"class":115},[105,82273,307],{"class":164},[105,82275,12427],{"class":115},[105,82277,333],{"class":164},[105,82279,75238],{"class":115},[105,82281,33314],{"class":111},[105,82283,82284],{"class":220}," 'M'\n",[105,82286,82287,82289,82291,82293,82295,82297,82299,82301,82303,82305,82307,82309,82311,82313],{"class":107,"line":1186},[105,82288,82255],{"class":164},[105,82290,674],{"class":115},[105,82292,58232],{"class":164},[105,82294,116],{"class":115},[105,82296,82264],{"class":164},[105,82298,674],{"class":115},[105,82300,82269],{"class":164},[105,82302,116],{"class":115},[105,82304,333],{"class":164},[105,82306,12427],{"class":115},[105,82308,307],{"class":164},[105,82310,75238],{"class":115},[105,82312,33314],{"class":111},[105,82314,82284],{"class":220},[105,82316,82317],{"class":107,"line":1192},[105,82318,2391],{"emptyLinePlaceholder":32},[105,82320,82321,82323,82325,82327,82329,82331,82333,82335,82337,82339,82341,82343,82345,82347],{"class":107,"line":1206},[105,82322,82255],{"class":164},[105,82324,674],{"class":115},[105,82326,58232],{"class":164},[105,82328,116],{"class":115},[105,82330,82264],{"class":164},[105,82332,674],{"class":115},[105,82334,82269],{"class":164},[105,82336,116],{"class":115},[105,82338,307],{"class":164},[105,82340,12427],{"class":115},[105,82342,460],{"class":164},[105,82344,75238],{"class":115},[105,82346,33314],{"class":111},[105,82348,82349],{"class":220}," 'Mozill'\n",[105,82351,82352],{"class":107,"line":1212},[105,82353,2391],{"emptyLinePlaceholder":32},[105,82355,82356,82358,82360,82362,82364,82366,82368,82370,82372,82374,82376,82378],{"class":107,"line":1303},[105,82357,82255],{"class":164},[105,82359,674],{"class":115},[105,82361,58232],{"class":164},[105,82363,116],{"class":115},[105,82365,82264],{"class":164},[105,82367,674],{"class":115},[105,82369,82269],{"class":164},[105,82371,116],{"class":115},[105,82373,409],{"class":164},[105,82375,75238],{"class":115},[105,82377,33314],{"class":111},[105,82379,82380],{"class":220}," 'lla'\n",[105,82382,82383,82385,82387,82389,82391,82393,82395,82397,82399,82401,82403,82405,82407,82409],{"class":107,"line":1309},[105,82384,82255],{"class":164},[105,82386,674],{"class":115},[105,82388,58232],{"class":164},[105,82390,116],{"class":115},[105,82392,82264],{"class":164},[105,82394,674],{"class":115},[105,82396,82269],{"class":164},[105,82398,116],{"class":115},[105,82400,409],{"class":164},[105,82402,12427],{"class":115},[105,82404,485],{"class":164},[105,82406,75294],{"class":115},[105,82408,33314],{"class":111},[105,82410,82380],{"class":220},[105,82412,82413,82415,82417,82419,82421,82423,82425,82427,82429,82431,82433,82435,82437,82439],{"class":107,"line":1321},[105,82414,82255],{"class":164},[105,82416,674],{"class":115},[105,82418,58232],{"class":164},[105,82420,116],{"class":115},[105,82422,82264],{"class":164},[105,82424,674],{"class":115},[105,82426,82269],{"class":164},[105,82428,116],{"class":115},[105,82430,485],{"class":164},[105,82432,12427],{"class":115},[105,82434,409],{"class":164},[105,82436,75238],{"class":115},[105,82438,33314],{"class":111},[105,82440,82380],{"class":220},[105,82442,82443],{"class":107,"line":1603},[105,82444,2391],{"emptyLinePlaceholder":32},[105,82446,82447,82449,82451,82453,82455,82457,82459,82461,82463,82465,82467,82469,82471,82473],{"class":107,"line":1608},[105,82448,82255],{"class":164},[105,82450,674],{"class":115},[105,82452,58232],{"class":164},[105,82454,116],{"class":115},[105,82456,82264],{"class":164},[105,82458,674],{"class":115},[105,82460,82269],{"class":164},[105,82462,116],{"class":115},[105,82464,307],{"class":164},[105,82466,12427],{"class":115},[105,82468,485],{"class":164},[105,82470,75238],{"class":115},[105,82472,33314],{"class":111},[105,82474,82475],{"class":220}," 'Mozilla'\n",[105,82477,82478,82480,82482,82484,82486,82488,82490,82492,82494,82496,82498,82500,82502,82504],{"class":107,"line":1614},[105,82479,82255],{"class":164},[105,82481,674],{"class":115},[105,82483,58232],{"class":164},[105,82485,116],{"class":115},[105,82487,82264],{"class":164},[105,82489,674],{"class":115},[105,82491,82269],{"class":164},[105,82493,116],{"class":115},[105,82495,307],{"class":164},[105,82497,12427],{"class":115},[105,82499,562],{"class":164},[105,82501,75238],{"class":115},[105,82503,33314],{"class":111},[105,82505,82475],{"class":220},[22902,82507,82509],{"id":82508},"_410533-startswith","4.10.5.3.3 startsWith",[14,82511,82512,82515,82516,82521,82522,82524,82525],{},[102,82513,82514],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[265,82517,82518],{},[102,82519,82520],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[102,82523,1354],{}," 或 ",[102,82526,66005],{},[96,82528,82530],{"className":77480,"code":82529,"language":77482,"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",[102,82531,82532,82544,82563,82568,82588],{"__ignoreMap":22},[105,82533,82534,82536,82539,82541],{"class":107,"line":108},[105,82535,6784],{"class":111},[105,82537,82538],{"class":115}," str1 ",[105,82540,161],{"class":111},[105,82542,82543],{"class":220}," \"Saturday night plans\"\n",[105,82545,82546,82548,82550,82553,82556,82558,82561],{"class":107,"line":28},[105,82547,77517],{"class":115},[105,82549,58232],{"class":1954},[105,82551,82552],{"class":115},"(str1.",[105,82554,82555],{"class":1954},"startsWith",[105,82557,116],{"class":115},[105,82559,82560],{"class":220},"\"Sat\"",[105,82562,30482],{"class":115},[105,82564,82565],{"class":107,"line":1171},[105,82566,82567],{"class":174},"\u002F\u002F Expected output: true\n",[105,82569,82570,82572,82574,82576,82578,82580,82582,82584,82586],{"class":107,"line":1186},[105,82571,77517],{"class":115},[105,82573,58232],{"class":1954},[105,82575,82552],{"class":115},[105,82577,82555],{"class":1954},[105,82579,116],{"class":115},[105,82581,82560],{"class":220},[105,82583,12427],{"class":115},[105,82585,187],{"class":164},[105,82587,30482],{"class":115},[105,82589,82590],{"class":107,"line":1192},[105,82591,82592],{"class":174},"\u002F\u002F Expected output: false\n",[96,82594,82596],{"className":50618,"code":82595,"language":50620,"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",[102,82597,82598,82603,82608,82612,82617,82622],{"__ignoreMap":22},[105,82599,82600],{"class":107,"line":108},[105,82601,82602],{"class":115},"startsWith(searchString)\n",[105,82604,82605],{"class":107,"line":28},[105,82606,82607],{"class":115},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[105,82609,82610],{"class":107,"line":1171},[105,82611,2391],{"emptyLinePlaceholder":32},[105,82613,82614],{"class":107,"line":1186},[105,82615,82616],{"class":115},"const str3 = 'pink老师上课中'\n",[105,82618,82619],{"class":107,"line":1192},[105,82620,82621],{"class":115},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[105,82623,82624],{"class":107,"line":1206},[105,82625,82626],{"class":115},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22902,82628,82630],{"id":82629},"_410534-includes","4.10.5.3.4 includes",[14,82632,82633],{},"includes(searchString) includes(searchString, position)",[59,82635,82636],{},[62,82637,82638],{},"searchString:",[14,82640,82641,82642,82644,82645,82650,82651,82656,82657,21492,82660,82663,82664,82667],{},"一个要在 ",[102,82643,1291],{}," 中查找的字符串。",[354,82646,82649],{"href":82647,"rel":82648},"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",[23858],"不能是正则表达式","。所有非正则表达式的值都会被",[354,82652,82655],{"href":82653,"rel":82654},"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",[23858],"强制转换为字符串","，因此如果该参数被省略或传入 ",[102,82658,82659],{},"undefined",[102,82661,82662],{},"includes()"," 方法会在字符串中搜索 ",[102,82665,82666],{},"\"undefined\"","，这通常不是你想要的",[59,82669,82670],{"start":28},[62,82671,82672,975],{},[102,82673,82674],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82676,82677,82678,82681,82682],{},"在字符串中开始搜索 ",[102,82679,82680],{},"searchString"," 的位置。默认值为 ",[102,82683,307],{},[59,82685,82686],{"start":1171},[62,82687,82688],{},"返回值：",[14,82690,82691,82692,82694,82695,82699,82700],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[102,82693,82680],{}," 为空字符串的情况），则返回 ",[265,82696,82697],{},[102,82698,1354],{}," ，否则返回 ",[265,82701,82702],{},[102,82703,66005],{},[59,82705,82706],{"start":1186},[62,82707,82708],{},"异常：",[14,82710,82207,82711,13787,82713,82717],{},[102,82712,82680],{},[354,82714,82716],{"href":82647,"rel":82715},[23858],"是一个正则表达式","，则会抛出",[14,82719,82720],{},"只要是有就是true，不需要非得以谁开头结尾",[96,82722,82724],{"className":77480,"code":82723,"language":77482,"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",[102,82725,82726,82737,82760,82779,82799,82821,82840],{"__ignoreMap":22},[105,82727,82728,82730,82732,82734],{"class":107,"line":108},[105,82729,6784],{"class":111},[105,82731,79760],{"class":115},[105,82733,161],{"class":111},[105,82735,82736],{"class":220}," \"To be, or not to be, that is the question.\"\n",[105,82738,82739,82741,82743,82746,82749,82751,82754,82757],{"class":107,"line":28},[105,82740,77517],{"class":115},[105,82742,58232],{"class":1954},[105,82744,82745],{"class":115},"(str.",[105,82747,82748],{"class":1954},"includes",[105,82750,116],{"class":115},[105,82752,82753],{"class":220},"\"To be\"",[105,82755,82756],{"class":115},"))",[105,82758,82759],{"class":174},"  \u002F\u002F true\n",[105,82761,82762,82764,82766,82768,82770,82772,82775,82777],{"class":107,"line":1171},[105,82763,77517],{"class":115},[105,82765,58232],{"class":1954},[105,82767,82745],{"class":115},[105,82769,82748],{"class":1954},[105,82771,116],{"class":115},[105,82773,82774],{"class":220},"\"question\"",[105,82776,82756],{"class":115},[105,82778,82759],{"class":174},[105,82780,82781,82783,82785,82787,82789,82791,82794,82796],{"class":107,"line":1186},[105,82782,77517],{"class":115},[105,82784,58232],{"class":1954},[105,82786,82745],{"class":115},[105,82788,82748],{"class":1954},[105,82790,116],{"class":115},[105,82792,82793],{"class":220},"\"nonexistent\"",[105,82795,82756],{"class":115},[105,82797,82798],{"class":174},"  \u002F\u002F false\n",[105,82800,82801,82803,82805,82807,82809,82811,82813,82815,82817,82819],{"class":107,"line":1192},[105,82802,77517],{"class":115},[105,82804,58232],{"class":1954},[105,82806,82745],{"class":115},[105,82808,82748],{"class":1954},[105,82810,116],{"class":115},[105,82812,82753],{"class":220},[105,82814,12427],{"class":115},[105,82816,333],{"class":164},[105,82818,82756],{"class":115},[105,82820,82798],{"class":174},[105,82822,82823,82825,82827,82829,82831,82833,82836,82838],{"class":107,"line":1206},[105,82824,77517],{"class":115},[105,82826,58232],{"class":1954},[105,82828,82745],{"class":115},[105,82830,82748],{"class":1954},[105,82832,116],{"class":115},[105,82834,82835],{"class":220},"\"TO BE\"",[105,82837,82756],{"class":115},[105,82839,82798],{"class":174},[105,82841,82842,82844,82846,82848,82850,82852,82854,82856],{"class":107,"line":1212},[105,82843,77517],{"class":115},[105,82845,58232],{"class":1954},[105,82847,82745],{"class":115},[105,82849,82748],{"class":1954},[105,82851,116],{"class":115},[105,82853,7644],{"class":220},[105,82855,82756],{"class":115},[105,82857,82759],{"class":174},[22902,82859,82861],{"id":82860},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[96,82863,82865],{"className":53052,"code":82864,"language":53054,"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",[102,82866,82867,82875,82883,82888,82893,82898,82903,82908,82916],{"__ignoreMap":22},[105,82868,82869,82871,82873],{"class":107,"line":108},[105,82870,1026],{"class":115},[105,82872,51785],{"class":51285},[105,82874,51292],{"class":115},[105,82876,82877,82879,82881],{"class":107,"line":28},[105,82878,52129],{"class":115},[105,82880,51798],{"class":51285},[105,82882,51292],{"class":115},[105,82884,82885],{"class":107,"line":1171},[105,82886,82887],{"class":115},"    const num = 10\n",[105,82889,82890],{"class":107,"line":1186},[105,82891,82892],{"class":115},"    \u002F\u002F 强制转换\n",[105,82894,82895],{"class":107,"line":1192},[105,82896,82897],{"class":115},"    console.log(String(num))\n",[105,82899,82900],{"class":107,"line":1206},[105,82901,82902],{"class":115},"    \u002F\u002F toString()方法转换\n",[105,82904,82905],{"class":107,"line":1212},[105,82906,82907],{"class":115},"    console.log(num.toString())\n",[105,82909,82910,82912,82914],{"class":107,"line":1303},[105,82911,52402],{"class":115},[105,82913,51798],{"class":51285},[105,82915,51292],{"class":115},[105,82917,82918,82920,82922],{"class":107,"line":1309},[105,82919,51770],{"class":115},[105,82921,51785],{"class":51285},[105,82923,51292],{"class":115},[22902,82925,82927],{"id":82926},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,82929,82930],{},[20,82931],{"alt":22,"src":82932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[96,82934,82936],{"className":50618,"code":82935,"language":50620,"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",[102,82937,82938,82948,82962,82966,82974,82988,83008,83020,83028,83032,83040,83052,83060,83072,83077,83082,83087,83134,83150,83158,83166,83170],{"__ignoreMap":22},[105,82939,82940,82942,82944,82946],{"class":107,"line":108},[105,82941,51282],{"class":115},[105,82943,51286],{"class":51285},[105,82945,51289],{"class":1954},[105,82947,51292],{"class":115},[105,82949,82950,82952,82954,82956,82958,82960],{"class":107,"line":28},[105,82951,1026],{"class":115},[105,82953,50620],{"class":51285},[105,82955,51301],{"class":1954},[105,82957,161],{"class":115},[105,82959,51306],{"class":220},[105,82961,51292],{"class":115},[105,82963,82964],{"class":107,"line":1171},[105,82965,2391],{"emptyLinePlaceholder":32},[105,82967,82968,82970,82972],{"class":107,"line":1186},[105,82969,1026],{"class":115},[105,82971,51319],{"class":51285},[105,82973,51292],{"class":115},[105,82975,82976,82978,82980,82982,82984,82986],{"class":107,"line":1192},[105,82977,52129],{"class":115},[105,82979,51329],{"class":51285},[105,82981,51332],{"class":1954},[105,82983,161],{"class":115},[105,82985,51337],{"class":220},[105,82987,51292],{"class":115},[105,82989,82990,82992,82994,82996,82998,83000,83002,83004,83006],{"class":107,"line":1206},[105,82991,52129],{"class":115},[105,82993,51329],{"class":51285},[105,82995,14912],{"class":1954},[105,82997,161],{"class":115},[105,82999,51376],{"class":220},[105,83001,51356],{"class":1954},[105,83003,161],{"class":115},[105,83005,51383],{"class":220},[105,83007,51292],{"class":115},[105,83009,83010,83012,83014,83016,83018],{"class":107,"line":1212},[105,83011,52129],{"class":115},[105,83013,51392],{"class":51285},[105,83015,51395],{"class":115},[105,83017,51392],{"class":51285},[105,83019,51292],{"class":115},[105,83021,83022,83024,83026],{"class":107,"line":1303},[105,83023,51770],{"class":115},[105,83025,51319],{"class":51285},[105,83027,51292],{"class":115},[105,83029,83030],{"class":107,"line":1309},[105,83031,2391],{"emptyLinePlaceholder":32},[105,83033,83034,83036,83038],{"class":107,"line":1321},[105,83035,1026],{"class":115},[105,83037,51785],{"class":51285},[105,83039,51292],{"class":115},[105,83041,83042,83044,83046,83048,83050],{"class":107,"line":1603},[105,83043,52129],{"class":115},[105,83045,51596],{"class":51285},[105,83047,55299],{"class":115},[105,83049,51596],{"class":51285},[105,83051,51292],{"class":115},[105,83053,83054,83056,83058],{"class":107,"line":1608},[105,83055,52129],{"class":115},[105,83057,51798],{"class":51285},[105,83059,51292],{"class":115},[105,83061,83062,83064,83067,83069],{"class":107,"line":1614},[105,83063,11213],{"class":111},[105,83065,83066],{"class":164}," gift",[105,83068,13556],{"class":111},[105,83070,83071],{"class":220}," '50g的茶叶，清洗球'\n",[105,83073,83074],{"class":107,"line":1619},[105,83075,83076],{"class":174},"    \u002F\u002F 1.把字符串拆分为数组\n",[105,83078,83079],{"class":107,"line":1633},[105,83080,83081],{"class":174},"    \u002F\u002F console.log(gift.split(','))\n",[105,83083,83084],{"class":107,"line":1638},[105,83085,83086],{"class":174},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[105,83088,83089,83091,83093,83095,83098,83101,83103,83106,83108,83110,83112,83114,83116,83119,83121,83124,83126,83128,83130,83132],{"class":107,"line":1644},[105,83090,11213],{"class":111},[105,83092,73904],{"class":164},[105,83094,13556],{"class":111},[105,83096,83097],{"class":115}," gift.",[105,83099,83100],{"class":1954},"split",[105,83102,116],{"class":115},[105,83104,83105],{"class":220},"'，'",[105,83107,30811],{"class":115},[105,83109,74029],{"class":1954},[105,83111,116],{"class":115},[105,83113,79780],{"class":5208},[105,83115,79783],{"class":111},[105,83117,83118],{"class":220}," `\u003Cspan>【赠品】${",[105,83120,79780],{"class":115},[105,83122,83123],{"class":220},"}\u003C\u002Fspan>\u003Cbr>`",[105,83125,30811],{"class":115},[105,83127,74208],{"class":1954},[105,83129,116],{"class":115},[105,83131,74213],{"class":220},[105,83133,122],{"class":115},[105,83135,83136,83138,83140,83142,83144,83146,83148],{"class":107,"line":1665},[105,83137,52392],{"class":115},[105,83139,54384],{"class":1954},[105,83141,116],{"class":115},[105,83143,81916],{"class":220},[105,83145,74234],{"class":115},[105,83147,161],{"class":111},[105,83149,73970],{"class":115},[105,83151,83152,83154,83156],{"class":107,"line":1670},[105,83153,52402],{"class":115},[105,83155,51798],{"class":51285},[105,83157,51292],{"class":115},[105,83159,83160,83162,83164],{"class":107,"line":1684},[105,83161,51770],{"class":115},[105,83163,51785],{"class":51285},[105,83165,51292],{"class":115},[105,83167,83168],{"class":107,"line":1689},[105,83169,2391],{"emptyLinePlaceholder":32},[105,83171,83172,83174,83176],{"class":107,"line":1718},[105,83173,51770],{"class":115},[105,83175,50620],{"class":51285},[105,83177,51292],{"class":115},[21990,83179,83181],{"id":83180},"_41054-number","4.10.5.4 Number",[14,83183,83184],{},[20,83185],{"alt":22,"src":83186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83188,83189],{},"整数也可以进行toFixed来保留小数",[14,83191,83192],{},"比如：",[14,83194,83195],{},"const price=10",[14,83197,83198],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21990,83200,83202],{"id":83201},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83204,83205],{},[20,83206],{"alt":22,"src":83207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[96,83209,83211],{"className":50618,"code":83210,"language":50620,"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",[102,83212,83213,83223,83237,83241,83249,83263,83283,83295,83303,83309,83319,83329,83339,83343,83347,83353,83365,83379,83383,83387,83393,83405,83421,83431,83447,83451,83455,83461,83471,83481,83485,83489,83497,83509,83521,83533,83537,83541,83549,83561,83565,83569,83580,83590,83602,83614,83624,83628,83632,83640,83649,83661,83671,83681,83685,83689,83697,83706,83713,83723,83735,83739,83743,83752,83762,83773,83785,83797,83801,83805,83814,83824,83835,83839,83843,83849,83861,83873,83883,83893,83911,83923,83927,83931,83940,83952,83962,83972,83984,83988,83996,84004,84008,84016,84030,84038,84052,84080,84088,84096,84106,84110,84118,84126,84135,84143,84152,84162,84166,84170,84178,84186,84195,84203,84211,84224,84228,84232,84240,84248,84257,84265,84273,84288,84292,84296,84304,84312,84321,84329,84337,84351,84359,84363,84367,84372,84398,84403,84440,84445,84468,84473,84527,84532,84568,84572,84578,84583,84592,84606,84615,84634,84643,84653,84658,84663,84676,84681,84735,84761,84769,84777,84781],{"__ignoreMap":22},[105,83214,83215,83217,83219,83221],{"class":107,"line":108},[105,83216,51282],{"class":115},[105,83218,51286],{"class":51285},[105,83220,51289],{"class":1954},[105,83222,51292],{"class":115},[105,83224,83225,83227,83229,83231,83233,83235],{"class":107,"line":28},[105,83226,1026],{"class":115},[105,83228,50620],{"class":51285},[105,83230,51301],{"class":1954},[105,83232,161],{"class":115},[105,83234,51306],{"class":220},[105,83236,51292],{"class":115},[105,83238,83239],{"class":107,"line":1171},[105,83240,2391],{"emptyLinePlaceholder":32},[105,83242,83243,83245,83247],{"class":107,"line":1186},[105,83244,1026],{"class":115},[105,83246,51319],{"class":51285},[105,83248,51292],{"class":115},[105,83250,83251,83253,83255,83257,83259,83261],{"class":107,"line":1192},[105,83252,52129],{"class":115},[105,83254,51329],{"class":51285},[105,83256,51332],{"class":1954},[105,83258,161],{"class":115},[105,83260,51337],{"class":220},[105,83262,51292],{"class":115},[105,83264,83265,83267,83269,83271,83273,83275,83277,83279,83281],{"class":107,"line":1206},[105,83266,52129],{"class":115},[105,83268,51329],{"class":51285},[105,83270,14912],{"class":1954},[105,83272,161],{"class":115},[105,83274,51376],{"class":220},[105,83276,51356],{"class":1954},[105,83278,161],{"class":115},[105,83280,51383],{"class":220},[105,83282,51292],{"class":115},[105,83284,83285,83287,83289,83291,83293],{"class":107,"line":1212},[105,83286,52129],{"class":115},[105,83288,51392],{"class":51285},[105,83290,51395],{"class":115},[105,83292,51392],{"class":51285},[105,83294,51292],{"class":115},[105,83296,83297,83299,83301],{"class":107,"line":1303},[105,83298,52129],{"class":115},[105,83300,5118],{"class":51285},[105,83302,51292],{"class":115},[105,83304,83305,83307],{"class":107,"line":1309},[105,83306,6395],{"class":51285},[105,83308,15564],{"class":115},[105,83310,83311,83313,83315,83317],{"class":107,"line":1321},[105,83312,54680],{"class":164},[105,83314,51422],{"class":115},[105,83316,307],{"class":164},[105,83318,1282],{"class":115},[105,83320,83321,83323,83325,83327],{"class":107,"line":1603},[105,83322,54691],{"class":164},[105,83324,51422],{"class":115},[105,83326,307],{"class":164},[105,83328,1282],{"class":115},[105,83330,83331,83333,83335,83337],{"class":107,"line":1608},[105,83332,72581],{"class":164},[105,83334,51422],{"class":115},[105,83336,60490],{"class":164},[105,83338,1282],{"class":115},[105,83340,83341],{"class":107,"line":1614},[105,83342,2178],{"class":115},[105,83344,83345],{"class":107,"line":1619},[105,83346,2391],{"emptyLinePlaceholder":32},[105,83348,83349,83351],{"class":107,"line":1633},[105,83350,62108],{"class":1954},[105,83352,15564],{"class":115},[105,83354,83355,83357,83359,83361,83363],{"class":107,"line":1638},[105,83356,54756],{"class":164},[105,83358,51422],{"class":115},[105,83360,78559],{"class":164},[105,83362,51477],{"class":111},[105,83364,1282],{"class":115},[105,83366,83367,83369,83371,83373,83375,83377],{"class":107,"line":1644},[105,83368,54691],{"class":164},[105,83370,51422],{"class":115},[105,83372,427],{"class":164},[105,83374,51477],{"class":111},[105,83376,51541],{"class":164},[105,83378,1282],{"class":115},[105,83380,83381],{"class":107,"line":1665},[105,83382,2178],{"class":115},[105,83384,83385],{"class":107,"line":1670},[105,83386,2391],{"emptyLinePlaceholder":32},[105,83388,83389,83391],{"class":107,"line":1684},[105,83390,78610],{"class":1954},[105,83392,15564],{"class":115},[105,83394,83395,83397,83399,83401,83403],{"class":107,"line":1689},[105,83396,54680],{"class":164},[105,83398,51422],{"class":115},[105,83400,691],{"class":164},[105,83402,51477],{"class":111},[105,83404,1282],{"class":115},[105,83406,83407,83409,83411,83413,83415,83417,83419],{"class":107,"line":1718},[105,83408,61845],{"class":164},[105,83410,51422],{"class":115},[105,83412,28106],{"class":164},[105,83414,78665],{"class":164},[105,83416,78668],{"class":164},[105,83418,811],{"class":111},[105,83420,1282],{"class":115},[105,83422,83423,83425,83427,83429],{"class":107,"line":1723},[105,83424,54994],{"class":164},[105,83426,51422],{"class":115},[105,83428,51462],{"class":164},[105,83430,1282],{"class":115},[105,83432,83433,83435,83437,83439,83441,83443,83445],{"class":107,"line":1740},[105,83434,61962],{"class":164},[105,83436,51422],{"class":115},[105,83438,333],{"class":164},[105,83440,51477],{"class":111},[105,83442,51506],{"class":164},[105,83444,62229],{"class":164},[105,83446,1282],{"class":115},[105,83448,83449],{"class":107,"line":1745},[105,83450,2178],{"class":115},[105,83452,83453],{"class":107,"line":1750},[105,83454,2391],{"emptyLinePlaceholder":32},[105,83456,83457,83459],{"class":107,"line":1755},[105,83458,78728],{"class":1954},[105,83460,15564],{"class":115},[105,83462,83463,83465,83467,83469],{"class":107,"line":1769},[105,83464,62010],{"class":164},[105,83466,51422],{"class":115},[105,83468,62015],{"class":164},[105,83470,1282],{"class":115},[105,83472,83473,83475,83477,83479],{"class":107,"line":1774},[105,83474,54869],{"class":164},[105,83476,51422],{"class":115},[105,83478,61803],{"class":164},[105,83480,1282],{"class":115},[105,83482,83483],{"class":107,"line":2568},[105,83484,2178],{"class":115},[105,83486,83487],{"class":107,"line":2582},[105,83488,2391],{"emptyLinePlaceholder":32},[105,83490,83491,83493,83495],{"class":107,"line":2590},[105,83492,78610],{"class":1954},[105,83494,55600],{"class":51285},[105,83496,15564],{"class":115},[105,83498,83499,83501,83503,83505,83507],{"class":107,"line":2595},[105,83500,54756],{"class":164},[105,83502,51422],{"class":115},[105,83504,728],{"class":164},[105,83506,51477],{"class":111},[105,83508,1282],{"class":115},[105,83510,83511,83513,83515,83517,83519],{"class":107,"line":2601},[105,83512,54770],{"class":164},[105,83514,51422],{"class":115},[105,83516,728],{"class":164},[105,83518,51477],{"class":111},[105,83520,1282],{"class":115},[105,83522,83523,83525,83527,83529,83531],{"class":107,"line":2607},[105,83524,61735],{"class":164},[105,83526,51422],{"class":115},[105,83528,435],{"class":164},[105,83530,51477],{"class":111},[105,83532,1282],{"class":115},[105,83534,83535],{"class":107,"line":2612},[105,83536,2178],{"class":115},[105,83538,83539],{"class":107,"line":7940},[105,83540,2391],{"emptyLinePlaceholder":32},[105,83542,83543,83545,83547],{"class":107,"line":7964},[105,83544,78610],{"class":1954},[105,83546,62289],{"class":1954},[105,83548,15564],{"class":115},[105,83550,83551,83553,83555,83557,83559],{"class":107,"line":7969},[105,83552,54756],{"class":164},[105,83554,51422],{"class":115},[105,83556,1713],{"class":164},[105,83558,51477],{"class":111},[105,83560,1282],{"class":115},[105,83562,83563],{"class":107,"line":7975},[105,83564,2178],{"class":115},[105,83566,83567],{"class":107,"line":8002},[105,83568,2391],{"emptyLinePlaceholder":32},[105,83570,83571,83573,83575,83578],{"class":107,"line":8007},[105,83572,78610],{"class":1954},[105,83574,62289],{"class":1954},[105,83576,83577],{"class":1954}," .tag",[105,83579,15564],{"class":115},[105,83581,83582,83584,83586,83588],{"class":107,"line":8013},[105,83583,54994],{"class":164},[105,83585,51422],{"class":115},[105,83587,60854],{"class":164},[105,83589,1282],{"class":115},[105,83591,83592,83594,83596,83598,83600],{"class":107,"line":8025},[105,83593,54680],{"class":164},[105,83595,51422],{"class":115},[105,83597,193],{"class":164},[105,83599,51477],{"class":111},[105,83601,1282],{"class":115},[105,83603,83604,83606,83608,83610,83612],{"class":107,"line":8037},[105,83605,54907],{"class":164},[105,83607,51422],{"class":115},[105,83609,614],{"class":164},[105,83611,51477],{"class":111},[105,83613,1282],{"class":115},[105,83615,83616,83618,83620,83622],{"class":107,"line":8049},[105,83617,57401],{"class":164},[105,83619,51422],{"class":115},[105,83621,62055],{"class":164},[105,83623,1282],{"class":115},[105,83625,83626],{"class":107,"line":9708},[105,83627,2178],{"class":115},[105,83629,83630],{"class":107,"line":9733},[105,83631,2391],{"emptyLinePlaceholder":32},[105,83633,83634,83636,83638],{"class":107,"line":9756},[105,83635,78610],{"class":1954},[105,83637,78902],{"class":1954},[105,83639,31451],{"class":115},[105,83641,83642,83644,83647],{"class":107,"line":9780},[105,83643,78610],{"class":1954},[105,83645,83646],{"class":1954}," .sub-total",[105,83648,15564],{"class":115},[105,83650,83651,83653,83655,83657,83659],{"class":107,"line":9785},[105,83652,54907],{"class":164},[105,83654,51422],{"class":115},[105,83656,766],{"class":164},[105,83658,51477],{"class":111},[105,83660,1282],{"class":115},[105,83662,83663,83665,83667,83669],{"class":107,"line":9790},[105,83664,57401],{"class":164},[105,83666,51422],{"class":115},[105,83668,78925],{"class":164},[105,83670,1282],{"class":115},[105,83672,83673,83675,83677,83679],{"class":107,"line":9795},[105,83674,61822],{"class":164},[105,83676,51422],{"class":115},[105,83678,333],{"class":164},[105,83680,1282],{"class":115},[105,83682,83683],{"class":107,"line":9804},[105,83684,2178],{"class":115},[105,83686,83687],{"class":107,"line":9809},[105,83688,2391],{"emptyLinePlaceholder":32},[105,83690,83691,83693,83695],{"class":107,"line":9815},[105,83692,78610],{"class":1954},[105,83694,78942],{"class":1954},[105,83696,31451],{"class":115},[105,83698,83699,83701,83704],{"class":107,"line":9836},[105,83700,78610],{"class":1954},[105,83702,83703],{"class":1954}," .sub-total::before",[105,83705,31451],{"class":115},[105,83707,83708,83711],{"class":107,"line":9842},[105,83709,83710],{"class":1954},"    .amount::before",[105,83712,15564],{"class":115},[105,83714,83715,83717,83719,83721],{"class":107,"line":9856},[105,83716,78949],{"class":164},[105,83718,51422],{"class":115},[105,83720,78954],{"class":220},[105,83722,1282],{"class":115},[105,83724,83725,83727,83729,83731,83733],{"class":107,"line":9862},[105,83726,54907],{"class":164},[105,83728,51422],{"class":115},[105,83730,614],{"class":164},[105,83732,51477],{"class":111},[105,83734,1282],{"class":115},[105,83736,83737],{"class":107,"line":9889},[105,83738,2178],{"class":115},[105,83740,83741],{"class":107,"line":9898},[105,83742,2391],{"emptyLinePlaceholder":32},[105,83744,83745,83747,83750],{"class":107,"line":9904},[105,83746,78610],{"class":1954},[105,83748,83749],{"class":1954}," .spec",[105,83751,15564],{"class":115},[105,83753,83754,83756,83758,83760],{"class":107,"line":9912},[105,83755,61822],{"class":164},[105,83757,51422],{"class":115},[105,83759,193],{"class":164},[105,83761,1282],{"class":115},[105,83763,83764,83766,83768,83771],{"class":107,"line":9917},[105,83765,57401],{"class":164},[105,83767,51422],{"class":115},[105,83769,83770],{"class":164},"#888",[105,83772,1282],{"class":115},[105,83774,83775,83777,83779,83781,83783],{"class":107,"line":16596},[105,83776,54907],{"class":164},[105,83778,51422],{"class":115},[105,83780,665],{"class":164},[105,83782,51477],{"class":111},[105,83784,1282],{"class":115},[105,83786,83787,83789,83791,83793,83795],{"class":107,"line":16602},[105,83788,61985],{"class":164},[105,83790,51422],{"class":115},[105,83792,816],{"class":164},[105,83794,51477],{"class":111},[105,83796,1282],{"class":115},[105,83798,83799],{"class":107,"line":16625},[105,83800,2178],{"class":115},[105,83802,83803],{"class":107,"line":16631},[105,83804,2391],{"emptyLinePlaceholder":32},[105,83806,83807,83809,83812],{"class":107,"line":16654},[105,83808,78610],{"class":1954},[105,83810,83811],{"class":1954}," .count",[105,83813,15564],{"class":115},[105,83815,83816,83818,83820,83822],{"class":107,"line":16668},[105,83817,61822],{"class":164},[105,83819,51422],{"class":115},[105,83821,333],{"class":164},[105,83823,1282],{"class":115},[105,83825,83826,83828,83830,83833],{"class":107,"line":16688},[105,83827,57401],{"class":164},[105,83829,51422],{"class":115},[105,83831,83832],{"class":164},"#aaa",[105,83834,1282],{"class":115},[105,83836,83837],{"class":107,"line":16694},[105,83838,2178],{"class":115},[105,83840,83841],{"class":107,"line":16705},[105,83842,2391],{"emptyLinePlaceholder":32},[105,83844,83845,83847],{"class":107,"line":16728},[105,83846,72460],{"class":1954},[105,83848,15564],{"class":115},[105,83850,83851,83853,83855,83857,83859],{"class":107,"line":16750},[105,83852,54756],{"class":164},[105,83854,51422],{"class":115},[105,83856,78559],{"class":164},[105,83858,51477],{"class":111},[105,83860,1282],{"class":115},[105,83862,83863,83865,83867,83869,83871],{"class":107,"line":16755},[105,83864,54691],{"class":164},[105,83866,51422],{"class":115},[105,83868,307],{"class":164},[105,83870,51541],{"class":164},[105,83872,1282],{"class":115},[105,83874,83875,83877,83879,83881],{"class":107,"line":16761},[105,83876,54994],{"class":164},[105,83878,51422],{"class":115},[105,83880,51462],{"class":164},[105,83882,1282],{"class":115},[105,83884,83885,83887,83889,83891],{"class":107,"line":16775},[105,83886,55005],{"class":164},[105,83888,51422],{"class":115},[105,83890,51565],{"class":164},[105,83892,1282],{"class":115},[105,83894,83895,83898,83900,83902,83904,83906,83909],{"class":107,"line":16788},[105,83896,83897],{"class":164},"      border-top",[105,83899,51422],{"class":115},[105,83901,333],{"class":164},[105,83903,51477],{"class":111},[105,83905,51506],{"class":164},[105,83907,83908],{"class":164}," #4e4e4e",[105,83910,1282],{"class":115},[105,83912,83913,83915,83917,83919,83921],{"class":107,"line":16793},[105,83914,54680],{"class":164},[105,83916,51422],{"class":115},[105,83918,816],{"class":164},[105,83920,51477],{"class":111},[105,83922,1282],{"class":115},[105,83924,83925],{"class":107,"line":16807},[105,83926,2178],{"class":115},[105,83928,83929],{"class":107,"line":16812},[105,83930,2391],{"emptyLinePlaceholder":32},[105,83932,83933,83935,83938],{"class":107,"line":16818},[105,83934,72460],{"class":1954},[105,83936,83937],{"class":1954}," .amount",[105,83939,15564],{"class":115},[105,83941,83942,83944,83946,83948,83950],{"class":107,"line":16823},[105,83943,54907],{"class":164},[105,83945,51422],{"class":115},[105,83947,766],{"class":164},[105,83949,51477],{"class":111},[105,83951,1282],{"class":115},[105,83953,83954,83956,83958,83960],{"class":107,"line":16837},[105,83955,57401],{"class":164},[105,83957,51422],{"class":115},[105,83959,78925],{"class":164},[105,83961,1282],{"class":115},[105,83963,83964,83966,83968,83970],{"class":107,"line":16842},[105,83965,62319],{"class":164},[105,83967,51422],{"class":115},[105,83969,51474],{"class":164},[105,83971,1282],{"class":115},[105,83973,83974,83976,83978,83980,83982],{"class":107,"line":16847},[105,83975,61735],{"class":164},[105,83977,51422],{"class":115},[105,83979,772],{"class":164},[105,83981,51477],{"class":111},[105,83983,1282],{"class":115},[105,83985,83986],{"class":107,"line":16861},[105,83987,2178],{"class":115},[105,83989,83990,83992,83994],{"class":107,"line":16873},[105,83991,52402],{"class":115},[105,83993,5118],{"class":51285},[105,83995,51292],{"class":115},[105,83997,83998,84000,84002],{"class":107,"line":16878},[105,83999,51770],{"class":115},[105,84001,51319],{"class":51285},[105,84003,51292],{"class":115},[105,84005,84006],{"class":107,"line":16891},[105,84007,2391],{"emptyLinePlaceholder":32},[105,84009,84010,84012,84014],{"class":107,"line":16896},[105,84011,1026],{"class":115},[105,84013,51785],{"class":51285},[105,84015,51292],{"class":115},[105,84017,84018,84020,84022,84024,84026,84028],{"class":107,"line":16901},[105,84019,52129],{"class":115},[105,84021,51596],{"class":51285},[105,84023,53471],{"class":1954},[105,84025,161],{"class":115},[105,84027,62593],{"class":220},[105,84029,51292],{"class":115},[105,84031,84032,84034,84036],{"class":107,"line":16906},[105,84033,52402],{"class":115},[105,84035,51596],{"class":51285},[105,84037,51292],{"class":115},[105,84039,84040,84042,84044,84046,84048,84050],{"class":107,"line":16919},[105,84041,52129],{"class":115},[105,84043,51596],{"class":51285},[105,84045,53471],{"class":1954},[105,84047,161],{"class":115},[105,84049,62565],{"class":220},[105,84051,51292],{"class":115},[105,84053,84054,84056,84058,84061,84063,84065,84067,84070,84072,84074,84076,84078],{"class":107,"line":16924},[105,84055,51326],{"class":115},[105,84057,51596],{"class":51285},[105,84059,84060],{"class":115},">合计：\u003C",[105,84062,105],{"class":51285},[105,84064,53471],{"class":1954},[105,84066,161],{"class":115},[105,84068,84069],{"class":220},"\"amount\"",[105,84071,55299],{"class":115},[105,84073,105],{"class":51285},[105,84075,55299],{"class":115},[105,84077,51596],{"class":51285},[105,84079,51292],{"class":115},[105,84081,84082,84084,84086],{"class":107,"line":32618},[105,84083,52402],{"class":115},[105,84085,51596],{"class":51285},[105,84087,51292],{"class":115},[105,84089,84090,84092,84094],{"class":107,"line":32624},[105,84091,52129],{"class":115},[105,84093,51798],{"class":51285},[105,84095,51292],{"class":115},[105,84097,84098,84100,84102,84104],{"class":107,"line":32630},[105,84099,11213],{"class":111},[105,84101,79362],{"class":164},[105,84103,13556],{"class":111},[105,84105,55432],{"class":115},[105,84107,84108],{"class":107,"line":32636},[105,84109,79371],{"class":115},[105,84111,84112,84114,84116],{"class":107,"line":32642},[105,84113,79376],{"class":115},[105,84115,79379],{"class":220},[105,84117,31451],{"class":115},[105,84119,84120,84122,84124],{"class":107,"line":32653},[105,84121,79386],{"class":115},[105,84123,79389],{"class":220},[105,84125,31451],{"class":115},[105,84127,84128,84130,84133],{"class":107,"line":32659},[105,84129,79396],{"class":115},[105,84131,84132],{"class":164},"289.9",[105,84134,31451],{"class":115},[105,84136,84137,84139,84141],{"class":107,"line":32679},[105,84138,79406],{"class":115},[105,84140,79409],{"class":220},[105,84142,31451],{"class":115},[105,84144,84145,84148,84150],{"class":107,"line":32685},[105,84146,84147],{"class":115},"        count: ",[105,84149,193],{"class":164},[105,84151,31451],{"class":115},[105,84153,84154,84157,84160],{"class":107,"line":32696},[105,84155,84156],{"class":115},"        spec: { color: ",[105,84158,84159],{"class":220},"'白色'",[105,84161,55589],{"class":115},[105,84163,84164],{"class":107,"line":32702},[105,84165,77877],{"class":115},[105,84167,84168],{"class":107,"line":32708},[105,84169,79371],{"class":115},[105,84171,84172,84174,84176],{"class":107,"line":32714},[105,84173,79376],{"class":115},[105,84175,79470],{"class":220},[105,84177,31451],{"class":115},[105,84179,84180,84182,84184],{"class":107,"line":32720},[105,84181,79386],{"class":115},[105,84183,79479],{"class":220},[105,84185,31451],{"class":115},[105,84187,84188,84190,84193],{"class":107,"line":32726},[105,84189,79396],{"class":115},[105,84191,84192],{"class":164},"109.8",[105,84194,31451],{"class":115},[105,84196,84197,84199,84201],{"class":107,"line":32732},[105,84198,79406],{"class":115},[105,84200,79497],{"class":220},[105,84202,31451],{"class":115},[105,84204,84205,84207,84209],{"class":107,"line":32738},[105,84206,84147],{"class":115},[105,84208,187],{"class":164},[105,84210,31451],{"class":115},[105,84212,84213,84216,84218,84220,84222],{"class":107,"line":32758},[105,84214,84215],{"class":115},"        spec: { size: ",[105,84217,81888],{"class":220},[105,84219,55449],{"class":115},[105,84221,81893],{"class":220},[105,84223,55589],{"class":115},[105,84225,84226],{"class":107,"line":32764},[105,84227,77877],{"class":115},[105,84229,84230],{"class":107,"line":32780},[105,84231,79371],{"class":115},[105,84233,84234,84236,84238],{"class":107,"line":32786},[105,84235,79376],{"class":115},[105,84237,79514],{"class":220},[105,84239,31451],{"class":115},[105,84241,84242,84244,84246],{"class":107,"line":32800},[105,84243,79386],{"class":115},[105,84245,79523],{"class":220},[105,84247,31451],{"class":115},[105,84249,84250,84252,84255],{"class":107,"line":32806},[105,84251,79396],{"class":115},[105,84253,84254],{"class":164},"488",[105,84256,31451],{"class":115},[105,84258,84259,84261,84263],{"class":107,"line":32821},[105,84260,79406],{"class":115},[105,84262,79541],{"class":220},[105,84264,31451],{"class":115},[105,84266,84267,84269,84271],{"class":107,"line":32827},[105,84268,84147],{"class":115},[105,84270,333],{"class":164},[105,84272,31451],{"class":115},[105,84274,84275,84277,84280,84283,84286],{"class":107,"line":32836},[105,84276,84156],{"class":115},[105,84278,84279],{"class":220},"'青色'",[105,84281,84282],{"class":115},", sum: ",[105,84284,84285],{"class":220},"'一大四小'",[105,84287,55589],{"class":115},[105,84289,84290],{"class":107,"line":32842},[105,84291,77877],{"class":115},[105,84293,84294],{"class":107,"line":32851},[105,84295,79371],{"class":115},[105,84297,84298,84300,84302],{"class":107,"line":32857},[105,84299,79376],{"class":115},[105,84301,79558],{"class":220},[105,84303,31451],{"class":115},[105,84305,84306,84308,84310],{"class":107,"line":32863},[105,84307,79386],{"class":115},[105,84309,79567],{"class":220},[105,84311,31451],{"class":115},[105,84313,84314,84316,84319],{"class":107,"line":32872},[105,84315,79396],{"class":115},[105,84317,84318],{"class":164},"139",[105,84320,31451],{"class":115},[105,84322,84323,84325,84327],{"class":107,"line":32878},[105,84324,79406],{"class":115},[105,84326,79585],{"class":220},[105,84328,31451],{"class":115},[105,84330,84331,84333,84335],{"class":107,"line":32889},[105,84332,84147],{"class":115},[105,84334,333],{"class":164},[105,84336,31451],{"class":115},[105,84338,84339,84341,84344,84346,84349],{"class":107,"line":32895},[105,84340,84215],{"class":115},[105,84342,84343],{"class":220},"'小号'",[105,84345,55449],{"class":115},[105,84347,84348],{"class":220},"'紫色'",[105,84350,55455],{"class":115},[105,84352,84353,84356],{"class":107,"line":32914},[105,84354,84355],{"class":115},"        gift: ",[105,84357,84358],{"class":220},"'50g茶叶,清洗球'\n",[105,84360,84361],{"class":107,"line":32920},[105,84362,52383],{"class":115},[105,84364,84365],{"class":107,"line":32931},[105,84366,53094],{"class":115},[105,84368,84369],{"class":107,"line":32937},[105,84370,84371],{"class":174},"    \u002F\u002F  1.根据数据渲染页面\n",[105,84373,84374,84376,84378,84380,84382,84384,84386,84388,84390,84392,84394,84396],{"class":107,"line":32957},[105,84375,52392],{"class":115},[105,84377,54384],{"class":1954},[105,84379,116],{"class":115},[105,84381,79886],{"class":220},[105,84383,74234],{"class":115},[105,84385,161],{"class":111},[105,84387,80033],{"class":115},[105,84389,74029],{"class":1954},[105,84391,116],{"class":115},[105,84393,79780],{"class":5208},[105,84395,79783],{"class":111},[105,84397,15564],{"class":115},[105,84399,84400],{"class":107,"line":32973},[105,84401,84402],{"class":174},"      \u002F\u002F 对象解构\n",[105,84404,84405,84407,84409,84411,84413,84415,84417,84420,84422,84424,84426,84429,84431,84434,84436,84438],{"class":107,"line":32979},[105,84406,58213],{"class":111},[105,84408,79792],{"class":115},[105,84410,79805],{"class":164},[105,84412,12427],{"class":115},[105,84414,79795],{"class":164},[105,84416,12427],{"class":115},[105,84418,84419],{"class":164},"count",[105,84421,12427],{"class":115},[105,84423,79800],{"class":164},[105,84425,12427],{"class":115},[105,84427,84428],{"class":164},"spec",[105,84430,12427],{"class":115},[105,84432,84433],{"class":164},"gift",[105,84435,79808],{"class":115},[105,84437,161],{"class":111},[105,84439,79813],{"class":115},[105,84441,84442],{"class":107,"line":32993},[105,84443,84444],{"class":174},"      \u002F\u002F 规格文字模块处理\n",[105,84446,84447,84449,84452,84454,84456,84458,84460,84462,84464,84466],{"class":107,"line":32999},[105,84448,58213],{"class":111},[105,84450,84451],{"class":164}," text",[105,84453,13556],{"class":111},[105,84455,81923],{"class":115},[105,84457,81926],{"class":1954},[105,84459,81929],{"class":115},[105,84461,74208],{"class":1954},[105,84463,116],{"class":115},[105,84465,81936],{"class":220},[105,84467,122],{"class":115},[105,84469,84470],{"class":107,"line":33005},[105,84471,84472],{"class":174},"      \u002F\u002F 处理赠品模块\n",[105,84474,84475,84477,84479,84481,84484,84486,84488,84490,84492,84495,84497,84499,84501,84503,84505,84508,84510,84513,84515,84517,84519,84521,84523,84525],{"class":107,"line":33016},[105,84476,58213],{"class":111},[105,84478,73904],{"class":164},[105,84480,13556],{"class":111},[105,84482,84483],{"class":115}," gift ",[105,84485,1102],{"class":111},[105,84487,83097],{"class":115},[105,84489,83100],{"class":1954},[105,84491,116],{"class":115},[105,84493,84494],{"class":220},"','",[105,84496,30811],{"class":115},[105,84498,74029],{"class":1954},[105,84500,116],{"class":115},[105,84502,79780],{"class":5208},[105,84504,79783],{"class":111},[105,84506,84507],{"class":220}," `\u003Cspan class=\"tag\">【赠品】${",[105,84509,79780],{"class":115},[105,84511,84512],{"class":220},"}\u003C\u002Fspan>`",[105,84514,30811],{"class":115},[105,84516,74208],{"class":1954},[105,84518,116],{"class":115},[105,84520,74213],{"class":220},[105,84522,13706],{"class":115},[105,84524,975],{"class":111},[105,84526,70089],{"class":220},[105,84528,84529],{"class":107,"line":33022},[105,84530,84531],{"class":174},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[105,84533,84534,84536,84539,84541,84544,84546,84548,84550,84553,84555,84557,84559,84562,84564,84566],{"class":107,"line":33028},[105,84535,58213],{"class":111},[105,84537,84538],{"class":164}," subtotal",[105,84540,13556],{"class":111},[105,84542,84543],{"class":115}," ((price ",[105,84545,571],{"class":111},[105,84547,5746],{"class":164},[105,84549,6510],{"class":111},[105,84551,84552],{"class":115}," count) ",[105,84554,700],{"class":111},[105,84556,5746],{"class":164},[105,84558,30811],{"class":115},[105,84560,84561],{"class":1954},"toFixed",[105,84563,116],{"class":115},[105,84565,193],{"class":164},[105,84567,122],{"class":115},[105,84569,84570],{"class":107,"line":33038},[105,84571,2391],{"emptyLinePlaceholder":32},[105,84573,84574,84576],{"class":107,"line":33044},[105,84575,73967],{"class":111},[105,84577,70153],{"class":220},[105,84579,84580],{"class":107,"line":33055},[105,84581,84582],{"class":220},"        \u003Cdiv class=\"item\">\n",[105,84584,84585,84588,84590],{"class":107,"line":33061},[105,84586,84587],{"class":220},"          \u003Cimg src=\"${",[105,84589,79805],{"class":115},[105,84591,79837],{"class":220},[105,84593,84594,84597,84599,84602,84604],{"class":107,"line":33071},[105,84595,84596],{"class":220},"          \u003Cp class=\"name\">${",[105,84598,79795],{"class":115},[105,84600,84601],{"class":220},"}${",[105,84603,1291],{"class":115},[105,84605,79847],{"class":220},[105,84607,84608,84611,84613],{"class":107,"line":33076},[105,84609,84610],{"class":220},"          \u003Cp class=\"spec\">${",[105,84612,5179],{"class":115},[105,84614,79847],{"class":220},[105,84616,84617,84620,84622,84624,84626,84628,84630,84632],{"class":107,"line":33082},[105,84618,84619],{"class":220},"          \u003Cp class=\"price\">${",[105,84621,79800],{"class":115},[105,84623,674],{"class":220},[105,84625,84561],{"class":1954},[105,84627,116],{"class":220},[105,84629,193],{"class":164},[105,84631,545],{"class":220},[105,84633,79847],{"class":220},[105,84635,84636,84639,84641],{"class":107,"line":33131},[105,84637,84638],{"class":220},"          \u003Cp class=\"count\">x${",[105,84640,84419],{"class":115},[105,84642,79847],{"class":220},[105,84644,84645,84648,84651],{"class":107,"line":33178},[105,84646,84647],{"class":220},"          \u003Cp class=\"sub-total\">${",[105,84649,84650],{"class":115},"subtotal",[105,84652,79847],{"class":220},[105,84654,84655],{"class":107,"line":33183},[105,84656,84657],{"class":220},"        \u003C\u002Fdiv> \n",[105,84659,84660],{"class":107,"line":33189},[105,84661,84662],{"class":220},"             `\n",[105,84664,84665,84668,84670,84672,84674],{"class":107,"line":33208},[105,84666,84667],{"class":115},"    }).",[105,84669,74208],{"class":1954},[105,84671,116],{"class":115},[105,84673,74213],{"class":220},[105,84675,122],{"class":115},[105,84677,84678],{"class":107,"line":33214},[105,84679,84680],{"class":174},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[105,84682,84683,84685,84687,84689,84691,84694,84696,84699,84701,84703,84705,84708,84711,84713,84716,84718,84720,84722,84725,84727,84729,84731,84733],{"class":107,"line":33234},[105,84684,11213],{"class":111},[105,84686,62770],{"class":164},[105,84688,13556],{"class":111},[105,84690,80033],{"class":115},[105,84692,84693],{"class":1954},"reduce",[105,84695,2367],{"class":115},[105,84697,84698],{"class":5208},"prev",[105,84700,12427],{"class":115},[105,84702,79780],{"class":5208},[105,84704,13706],{"class":115},[105,84706,84707],{"class":111},"=>",[105,84709,84710],{"class":115}," prev ",[105,84712,597],{"class":111},[105,84714,84715],{"class":115}," (item.price ",[105,84717,571],{"class":111},[105,84719,5746],{"class":164},[105,84721,6510],{"class":111},[105,84723,84724],{"class":115}," item.count) ",[105,84726,700],{"class":111},[105,84728,5746],{"class":164},[105,84730,12427],{"class":115},[105,84732,307],{"class":164},[105,84734,122],{"class":115},[105,84736,84737,84739,84741,84743,84746,84748,84750,84753,84755,84757,84759],{"class":107,"line":33240},[105,84738,52392],{"class":115},[105,84740,54384],{"class":1954},[105,84742,116],{"class":115},[105,84744,84745],{"class":220},"'.amount'",[105,84747,74234],{"class":115},[105,84749,161],{"class":111},[105,84751,84752],{"class":115}," total.",[105,84754,84561],{"class":1954},[105,84756,116],{"class":115},[105,84758,193],{"class":164},[105,84760,122],{"class":115},[105,84762,84763,84765,84767],{"class":107,"line":33246},[105,84764,52402],{"class":115},[105,84766,51798],{"class":51285},[105,84768,51292],{"class":115},[105,84770,84771,84773,84775],{"class":107,"line":33256},[105,84772,51770],{"class":115},[105,84774,51785],{"class":51285},[105,84776,51292],{"class":115},[105,84778,84779],{"class":107,"line":33261},[105,84780,2391],{"emptyLinePlaceholder":32},[105,84782,84783,84785,84787],{"class":107,"line":33267},[105,84784,51770],{"class":115},[105,84786,50620],{"class":51285},[105,84788,51292],{"class":115},[47,84790,84792],{"id":84791},"_411-编程思想","4.11 编程思想",[76,84794,84796],{"id":84795},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84798,84799,84802],{},[265,84800,84801],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84804,84805],{},"调用就可以了",[14,84807,84808],{},[20,84809],{"alt":22,"src":84810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[76,84812,84814],{"id":84813},"_4112-面向对象","4.11.2 面向对象",[14,84816,84817],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84819,84820],{},[20,84821],{"alt":22,"src":84822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84824,84825],{},"面向对象的特性：",[1123,84827,84828,84831,84834],{},[62,84829,84830],{},"封装性",[62,84832,84833],{},"继承性",[62,84835,84836],{},"多态性",[76,84838,84840],{"id":84839},"_4113-两者比较","4.11.3 两者比较",[14,84842,84843],{},[20,84844],{"alt":22,"src":84845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[47,84847,84849],{"id":84848},"_412-构造函数回顾","4.12 构造函数回顾",[14,84851,84852],{},[20,84853],{"alt":22,"src":84854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84856,84857],{},[20,84858],{"alt":22,"src":84859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84861,84862],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84864,84865],{},[20,84866],{"alt":22,"src":84867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[47,84869,84871],{"id":84870},"_413-原型","4.13 原型",[76,84873,84875],{"id":84874},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84877,84878],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84880,84881],{},[20,84882],{"alt":22,"src":84883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84885,84886],{},[20,84887],{"alt":22,"src":84888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84890,84891],{},"原型是构造函数的属性，它也是一个对象",[14,84893,84894],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84896,84897],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[96,84899,84901],{"className":53052,"code":84900,"language":53054,"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",[102,84902,84903,84911,84916,84924,84929,84934,84939,84944,84949,84953,84957,84961,84966,84971,84975,84980,84985,84990,84995,85000,85004,85012],{"__ignoreMap":22},[105,84904,84905,84907,84909],{"class":107,"line":108},[105,84906,1026],{"class":115},[105,84908,51785],{"class":51285},[105,84910,51292],{"class":115},[105,84912,84913],{"class":107,"line":28},[105,84914,84915],{"class":174},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[105,84917,84918,84920,84922],{"class":107,"line":1171},[105,84919,52129],{"class":115},[105,84921,51798],{"class":51285},[105,84923,51292],{"class":115},[105,84925,84926],{"class":107,"line":1186},[105,84927,84928],{"class":115},"    function Star(uname, age) {\n",[105,84930,84931],{"class":107,"line":1192},[105,84932,84933],{"class":115},"      this.uname = uname,\n",[105,84935,84936],{"class":107,"line":1206},[105,84937,84938],{"class":115},"        this.age = age\n",[105,84940,84941],{"class":107,"line":1212},[105,84942,84943],{"class":115},"      \u002F\u002F this.sing = function () {\n",[105,84945,84946],{"class":107,"line":1303},[105,84947,84948],{"class":115},"      \u002F\u002F   console.log('唱歌')\n",[105,84950,84951],{"class":107,"line":1309},[105,84952,2391],{"emptyLinePlaceholder":32},[105,84954,84955],{"class":107,"line":1321},[105,84956,60022],{"class":115},[105,84958,84959],{"class":107,"line":1603},[105,84960,2178],{"class":115},[105,84962,84963],{"class":107,"line":1608},[105,84964,84965],{"class":115},"    Star.prototype.sing = function () {\n",[105,84967,84968],{"class":107,"line":1614},[105,84969,84970],{"class":115},"      console.log('唱歌')\n",[105,84972,84973],{"class":107,"line":1619},[105,84974,2178],{"class":115},[105,84976,84977],{"class":107,"line":1633},[105,84978,84979],{"class":115},"    \u002F\u002F console.dir(Star.prototype)\n",[105,84981,84982],{"class":107,"line":1638},[105,84983,84984],{"class":115},"    const pink = new Star('pink', 18)\n",[105,84986,84987],{"class":107,"line":1644},[105,84988,84989],{"class":115},"    const red = new Star('red', 20)\n",[105,84991,84992],{"class":107,"line":1665},[105,84993,84994],{"class":115},"    pink.sing()\n",[105,84996,84997],{"class":107,"line":1670},[105,84998,84999],{"class":115},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[105,85001,85002],{"class":107,"line":1684},[105,85003,2391],{"emptyLinePlaceholder":32},[105,85005,85006,85008,85010],{"class":107,"line":1689},[105,85007,52402],{"class":115},[105,85009,51798],{"class":51285},[105,85011,51292],{"class":115},[105,85013,85014,85016,85018],{"class":107,"line":1718},[105,85015,51770],{"class":115},[105,85017,51785],{"class":51285},[105,85019,51292],{"class":115},[14,85021,85022],{},[20,85023],{"alt":22,"src":85024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[96,85026,85028],{"className":53052,"code":85027,"language":53054,"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",[102,85029,85030,85038,85046,85051,85056,85061,85066,85070,85075,85080,85085,85089,85094,85098,85102,85107,85111,85119],{"__ignoreMap":22},[105,85031,85032,85034,85036],{"class":107,"line":108},[105,85033,1026],{"class":115},[105,85035,51785],{"class":51285},[105,85037,51292],{"class":115},[105,85039,85040,85042,85044],{"class":107,"line":28},[105,85041,52129],{"class":115},[105,85043,51798],{"class":51285},[105,85045,51292],{"class":115},[105,85047,85048],{"class":107,"line":1171},[105,85049,85050],{"class":115},"    let that\n",[105,85052,85053],{"class":107,"line":1186},[105,85054,85055],{"class":115},"    function Star(uname) {\n",[105,85057,85058],{"class":107,"line":1192},[105,85059,85060],{"class":115},"      this.uname = uname\n",[105,85062,85063],{"class":107,"line":1206},[105,85064,85065],{"class":115},"      that = this\n",[105,85067,85068],{"class":107,"line":1212},[105,85069,2178],{"class":115},[105,85071,85072],{"class":107,"line":1303},[105,85073,85074],{"class":115},"    \u002F\u002F 实例对象是 ldh\n",[105,85076,85077],{"class":107,"line":1309},[105,85078,85079],{"class":115},"    const ldh = new Star('刘德华')\n",[105,85081,85082],{"class":107,"line":1321},[105,85083,85084],{"class":115},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[105,85086,85087],{"class":107,"line":1603},[105,85088,2391],{"emptyLinePlaceholder":32},[105,85090,85091],{"class":107,"line":1608},[105,85092,85093],{"class":115},"    Star.sing = function () {\n",[105,85095,85096],{"class":107,"line":1614},[105,85097,84970],{"class":115},[105,85099,85100],{"class":107,"line":1619},[105,85101,2178],{"class":115},[105,85103,85104],{"class":107,"line":1633},[105,85105,85106],{"class":115},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[105,85108,85109],{"class":107,"line":1638},[105,85110,2391],{"emptyLinePlaceholder":32},[105,85112,85113,85115,85117],{"class":107,"line":1644},[105,85114,52402],{"class":115},[105,85116,51798],{"class":51285},[105,85118,51292],{"class":115},[105,85120,85121,85123,85125],{"class":107,"line":1665},[105,85122,51770],{"class":115},[105,85124,51785],{"class":51285},[105,85126,51292],{"class":115},[14,85128,85129],{},"构造函数的this指向的是实例对象；",[14,85131,85132],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[76,85134,85136],{"id":85135},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85138,85139],{},[20,85140],{"alt":22,"src":85141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[96,85143,85145],{"className":53052,"code":85144,"language":53054,"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",[102,85146,85147,85155,85163,85168,85173,85178,85183,85188,85193,85198,85203,85208,85213,85217,85222,85227,85232,85237,85241,85246,85251,85256,85261,85265,85270,85275,85280,85285,85289,85294,85298,85306],{"__ignoreMap":22},[105,85148,85149,85151,85153],{"class":107,"line":108},[105,85150,1026],{"class":115},[105,85152,51785],{"class":51285},[105,85154,51292],{"class":115},[105,85156,85157,85159,85161],{"class":107,"line":28},[105,85158,52129],{"class":115},[105,85160,51798],{"class":51285},[105,85162,51292],{"class":115},[105,85164,85165],{"class":107,"line":1171},[105,85166,85167],{"class":115},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[105,85169,85170],{"class":107,"line":1186},[105,85171,85172],{"class":115},"    const arr = [1, 2, 3]\n",[105,85174,85175],{"class":107,"line":1192},[105,85176,85177],{"class":115},"    \u002F\u002F 自己定义数组的扩展方法\n",[105,85179,85180],{"class":107,"line":1206},[105,85181,85182],{"class":115},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[105,85184,85185],{"class":107,"line":1212},[105,85186,85187],{"class":115},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[105,85189,85190],{"class":107,"line":1303},[105,85191,85192],{"class":115},"    \u002F\u002F ①.最大值\n",[105,85194,85195],{"class":107,"line":1309},[105,85196,85197],{"class":115},"    Array.prototype.max = function () {\n",[105,85199,85200],{"class":107,"line":1321},[105,85201,85202],{"class":115},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[105,85204,85205],{"class":107,"line":1603},[105,85206,85207],{"class":115},"      return Math.max(...this)\n",[105,85209,85210],{"class":107,"line":1608},[105,85211,85212],{"class":115},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[105,85214,85215],{"class":107,"line":1614},[105,85216,2178],{"class":115},[105,85218,85219],{"class":107,"line":1619},[105,85220,85221],{"class":115},"    console.log(arr.max())\n",[105,85223,85224],{"class":107,"line":1633},[105,85225,85226],{"class":115},"    \u002F\u002F ②最小值\n",[105,85228,85229],{"class":107,"line":1638},[105,85230,85231],{"class":115},"    Array.prototype.min = function () {\n",[105,85233,85234],{"class":107,"line":1644},[105,85235,85236],{"class":115},"      return Math.min(...this)\n",[105,85238,85239],{"class":107,"line":1665},[105,85240,2178],{"class":115},[105,85242,85243],{"class":107,"line":1670},[105,85244,85245],{"class":115},"    console.log(arr.min())\n",[105,85247,85248],{"class":107,"line":1684},[105,85249,85250],{"class":115},"    \u002F\u002F③求和\n",[105,85252,85253],{"class":107,"line":1689},[105,85254,85255],{"class":115},"    Array.prototype.sum = function () {\n",[105,85257,85258],{"class":107,"line":1718},[105,85259,85260],{"class":115},"      return this.reduce((prev, current) => prev + current, 0)\n",[105,85262,85263],{"class":107,"line":1723},[105,85264,2178],{"class":115},[105,85266,85267],{"class":107,"line":1740},[105,85268,85269],{"class":115},"    console.log(arr.sum())\n",[105,85271,85272],{"class":107,"line":1745},[105,85273,85274],{"class":115},"    \u002F\u002F ③排序\n",[105,85276,85277],{"class":107,"line":1750},[105,85278,85279],{"class":115},"    Array.prototype.rever = function () {\n",[105,85281,85282],{"class":107,"line":1755},[105,85283,85284],{"class":115},"      return this.reverse()\n",[105,85286,85287],{"class":107,"line":1769},[105,85288,2178],{"class":115},[105,85290,85291],{"class":107,"line":1774},[105,85292,85293],{"class":115},"    console.log(arr.rever())\n",[105,85295,85296],{"class":107,"line":2568},[105,85297,2391],{"emptyLinePlaceholder":32},[105,85299,85300,85302,85304],{"class":107,"line":2582},[105,85301,52402],{"class":115},[105,85303,51798],{"class":51285},[105,85305,51292],{"class":115},[105,85307,85308,85310,85312],{"class":107,"line":2590},[105,85309,51770],{"class":115},[105,85311,51785],{"class":51285},[105,85313,51292],{"class":115},[14,85315,85316],{},[20,85317],{"alt":22,"src":85318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[76,85320,85322],{"id":85321},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85324,85325],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85327,85328],{},[20,85329],{"alt":22,"src":85330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[96,85332,85334],{"className":53052,"code":85333,"language":53054,"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",[102,85335,85336,85344,85352,85357,85362,85366,85371,85376,85381,85389],{"__ignoreMap":22},[105,85337,85338,85340,85342],{"class":107,"line":108},[105,85339,1026],{"class":115},[105,85341,51785],{"class":51285},[105,85343,51292],{"class":115},[105,85345,85346,85348,85350],{"class":107,"line":28},[105,85347,52129],{"class":115},[105,85349,51798],{"class":51285},[105,85351,51292],{"class":115},[105,85353,85354],{"class":107,"line":1171},[105,85355,85356],{"class":115},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[105,85358,85359],{"class":107,"line":1186},[105,85360,85361],{"class":115},"    function Star() {\n",[105,85363,85364],{"class":107,"line":1192},[105,85365,2178],{"class":115},[105,85367,85368],{"class":107,"line":1206},[105,85369,85370],{"class":115},"    const ldh = new Star()\n",[105,85372,85373],{"class":107,"line":1212},[105,85374,85375],{"class":115},"    console.log(Star.prototype)\n",[105,85377,85378],{"class":107,"line":1303},[105,85379,85380],{"class":115},"    console.log(Star.prototype.constructor === Star)\n",[105,85382,85383,85385,85387],{"class":107,"line":1309},[105,85384,52402],{"class":115},[105,85386,51798],{"class":51285},[105,85388,51292],{"class":115},[105,85390,85391,85393,85395],{"class":107,"line":1321},[105,85392,51770],{"class":115},[105,85394,51785],{"class":51285},[105,85396,51292],{"class":115},[14,85398,85399],{},[20,85400],{"alt":22,"src":85401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85403,85404],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[96,85406,85408],{"className":53052,"code":85407,"language":53054,"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",[102,85409,85410,85418,85422,85426,85430,85435,85440,85445,85449,85454,85459,85464,85469,85474,85479,85483,85487,85492,85497,85502,85506,85511,85516,85520,85524,85528],{"__ignoreMap":22},[105,85411,85412,85414,85416],{"class":107,"line":108},[105,85413,52129],{"class":115},[105,85415,51798],{"class":51285},[105,85417,51292],{"class":115},[105,85419,85420],{"class":107,"line":28},[105,85421,85356],{"class":115},[105,85423,85424],{"class":107,"line":1171},[105,85425,85361],{"class":115},[105,85427,85428],{"class":107,"line":1186},[105,85429,2178],{"class":115},[105,85431,85432],{"class":107,"line":1192},[105,85433,85434],{"class":115},"    \u002F\u002F const ldh = new Star()\n",[105,85436,85437],{"class":107,"line":1206},[105,85438,85439],{"class":115},"    \u002F\u002F console.log(Star.prototype)\n",[105,85441,85442],{"class":107,"line":1212},[105,85443,85444],{"class":115},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[105,85446,85447],{"class":107,"line":1303},[105,85448,2391],{"emptyLinePlaceholder":32},[105,85450,85451],{"class":107,"line":1309},[105,85452,85453],{"class":115},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[105,85455,85456],{"class":107,"line":1321},[105,85457,85458],{"class":115},"    \u002F\u002F Star.prototype.sing = function () {\n",[105,85460,85461],{"class":107,"line":1603},[105,85462,85463],{"class":115},"    \u002F\u002F   console.log('唱歌')\n",[105,85465,85466],{"class":107,"line":1608},[105,85467,85468],{"class":115},"    \u002F\u002F }\n",[105,85470,85471],{"class":107,"line":1614},[105,85472,85473],{"class":115},"    \u002F\u002F Star.prototype.dance = function () {\n",[105,85475,85476],{"class":107,"line":1619},[105,85477,85478],{"class":115},"    \u002F\u002F   console.log('跳舞')\n",[105,85480,85481],{"class":107,"line":1633},[105,85482,85468],{"class":115},[105,85484,85485],{"class":107,"line":1638},[105,85486,85375],{"class":115},[105,85488,85489],{"class":107,"line":1644},[105,85490,85491],{"class":115},"    Star.prototype = {\n",[105,85493,85494],{"class":107,"line":1665},[105,85495,85496],{"class":115},"      sing: function () {\n",[105,85498,85499],{"class":107,"line":1670},[105,85500,85501],{"class":115},"        console.log('唱歌')\n",[105,85503,85504],{"class":107,"line":1684},[105,85505,77877],{"class":115},[105,85507,85508],{"class":107,"line":1689},[105,85509,85510],{"class":115},"      dance: function () {\n",[105,85512,85513],{"class":107,"line":1718},[105,85514,85515],{"class":115},"        console.log('跳舞')\n",[105,85517,85518],{"class":107,"line":1723},[105,85519,52383],{"class":115},[105,85521,85522],{"class":107,"line":1740},[105,85523,2178],{"class":115},[105,85525,85526],{"class":107,"line":1745},[105,85527,85375],{"class":115},[105,85529,85530,85532,85534],{"class":107,"line":1750},[105,85531,52402],{"class":115},[105,85533,51798],{"class":51285},[105,85535,51292],{"class":115},[14,85537,85538],{},"进行输出结果后会发现：",[14,85540,85541],{},[20,85542],{"alt":22,"src":85543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85545,85546],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85548,85549],{},"所以，要重新指回创造这个原型对象的构造函数",[96,85551,85553],{"className":71198,"code":85552,"language":71200,"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",[102,85554,85555,85569,85574,85579,85590,85603,85608,85619,85633,85637],{"__ignoreMap":22},[105,85556,85557,85560,85562,85565,85567],{"class":107,"line":108},[105,85558,85559],{"class":164},"Star",[105,85561,674],{"class":115},[105,85563,85564],{"class":164},"prototype",[105,85566,13556],{"class":111},[105,85568,15564],{"class":115},[105,85570,85571],{"class":107,"line":28},[105,85572,85573],{"class":174},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[105,85575,85576],{"class":107,"line":1171},[105,85577,85578],{"class":115},"  constructor: Star,\n",[105,85580,85581,85584,85586,85588],{"class":107,"line":1186},[105,85582,85583],{"class":1954},"  sing",[105,85585,51422],{"class":115},[105,85587,54434],{"class":111},[105,85589,54437],{"class":115},[105,85591,85592,85594,85596,85598,85601],{"class":107,"line":1192},[105,85593,73738],{"class":115},[105,85595,58232],{"class":1954},[105,85597,116],{"class":115},[105,85599,85600],{"class":220},"'唱歌'",[105,85602,122],{"class":115},[105,85604,85605],{"class":107,"line":1206},[105,85606,85607],{"class":115},"   },\n",[105,85609,85610,85613,85615,85617],{"class":107,"line":1212},[105,85611,85612],{"class":1954},"   dance",[105,85614,51422],{"class":115},[105,85616,54434],{"class":111},[105,85618,54437],{"class":115},[105,85620,85621,85624,85626,85628,85631],{"class":107,"line":1303},[105,85622,85623],{"class":115},"     console.",[105,85625,58232],{"class":1954},[105,85627,116],{"class":115},[105,85629,85630],{"class":220},"'跳舞'",[105,85632,122],{"class":115},[105,85634,85635],{"class":107,"line":1309},[105,85636,4300],{"class":115},[105,85638,85639],{"class":107,"line":1321},[105,85640,1556],{"class":115},[14,85642,85643],{},[20,85644],{"alt":22,"src":85645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85647,85648],{},"总结1：",[14,85650,85651],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85653,85654],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85656,85657],{},"constructor指的是他的来源",[14,85659,85660],{},[20,85661],{"alt":22,"src":85662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85664,85665],{},[20,85666],{"alt":22,"src":85667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85669,85670],{},"总结2：",[14,85672,85673],{},[20,85674],{"alt":22,"src":85675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85677,85678],{},[20,85679],{"alt":22,"src":85680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85682,85683],{},[20,85684],{"alt":22,"src":85685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[76,85687,85689],{"id":85688},"_4134-对象原型","4.13.4 对象原型",[14,85691,85692],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85694,85695],{},"对象原型就是__proto__这个属性",[14,85697,85698],{},[20,85699],{"alt":22,"src":85700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85702,85703],{},[20,85704],{"alt":22,"src":85705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85707,85708],{},[20,85709],{"alt":22,"src":85710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85712,85713],{},[20,85714],{"alt":22,"src":85715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[96,85717,85719],{"className":53052,"code":85718,"language":53054,"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",[102,85720,85721,85729,85737,85741,85745,85749,85754,85762],{"__ignoreMap":22},[105,85722,85723,85725,85727],{"class":107,"line":108},[105,85724,1026],{"class":115},[105,85726,51785],{"class":51285},[105,85728,51292],{"class":115},[105,85730,85731,85733,85735],{"class":107,"line":28},[105,85732,52129],{"class":115},[105,85734,51798],{"class":51285},[105,85736,51292],{"class":115},[105,85738,85739],{"class":107,"line":1171},[105,85740,85361],{"class":115},[105,85742,85743],{"class":107,"line":1186},[105,85744,2178],{"class":115},[105,85746,85747],{"class":107,"line":1192},[105,85748,85370],{"class":115},[105,85750,85751],{"class":107,"line":1206},[105,85752,85753],{"class":115},"    console.log(ldh)\n",[105,85755,85756,85758,85760],{"class":107,"line":1212},[105,85757,52402],{"class":115},[105,85759,51798],{"class":51285},[105,85761,51292],{"class":115},[105,85763,85764,85766,85768],{"class":107,"line":1303},[105,85765,51770],{"class":115},[105,85767,51785],{"class":51285},[105,85769,51292],{"class":115},[14,85771,85772],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85774,85775],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85777,85778],{},[20,85779],{"alt":22,"src":85780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85782,85783],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85785,85786],{},"对象原型指向原型对象",[14,85788,85789],{},[20,85790],{"alt":22,"src":85791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85793,85794],{},[20,85795],{"alt":22,"src":85796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85798,85799],{},[20,85800],{"alt":22,"src":85801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[76,85803,85805],{"id":85804},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85807,85808],{},[20,85809],{"alt":22,"src":85810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[59,85812,85813,85816,85819,85822],{},[62,85814,85815],{},"构造函数通过new的形式实例化得到实例对象",[62,85817,85818],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[62,85820,85821],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[62,85823,85824],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85826,85827],{},[20,85828],{"alt":22,"src":85829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85831,85832],{},"题目梳理：",[14,85834,85835],{},[20,85836],{"alt":22,"src":85837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[76,85839,85841],{"id":85840},"_4136-原型继承","4.13.6 原型继承",[14,85843,85844],{},[20,85845],{"alt":22,"src":85846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85848,85849],{},[20,85850],{"alt":22,"src":85851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85853,85854],{},[20,85855],{"alt":22,"src":85856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85858,85859],{},[20,85860],{"alt":22,"src":85861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85863,85864],{},[20,85865],{"alt":22,"src":85866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85868,85869],{},[20,85870],{"alt":22,"src":85871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85873,85874],{},[20,85875],{"alt":22,"src":85876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85878,85879],{},[20,85880],{"alt":22,"src":85881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85883,85884],{},"回顾：构造函数每次new得到对象都是不同的",[76,85886,85888],{"id":85887},"_4137-原型链","4.13.7 原型链",[14,85890,85891],{},[20,85892],{"alt":22,"src":85893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85895,85896],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85898,85899],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85901,85902],{},"大哥是Object",[14,85904,85905],{},[20,85906],{"alt":22,"src":85907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85909,85910],{},[20,85911],{"alt":22,"src":85912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85914,85915],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,85917,85918],{},"万物皆对象",[76,85920,85922],{"id":85921},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,85924,85925],{},"模态框",[14,85927,85928],{},"以后遇见这个效果直接使用这个就行",[14,85930,85931],{},[20,85932],{"alt":22,"src":85933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,85935,85936],{},[20,85937],{"alt":22,"src":85938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,85940,85941],{},[20,85942],{"alt":22,"src":85943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,85945,85946],{},[20,85947],{"alt":22,"src":85948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,85950,85951],{},"补充知识点：",[59,85953,85954],{},[62,85955,85956],{},"append()",[14,85958,85959],{},[20,85960],{"alt":22,"src":85961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[96,85963,85965],{"className":50618,"code":85964,"language":50620,"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",[102,85966,85967,85972,85977,85982,85986,85990,85994,85999,86004,86009,86013],{"__ignoreMap":22},[105,85968,85969],{"class":107,"line":108},[105,85970,85971],{"class":115},"append(param1)\n",[105,85973,85974],{"class":107,"line":28},[105,85975,85976],{"class":115},"append(param1, param2)\n",[105,85978,85979],{"class":107,"line":1171},[105,85980,85981],{"class":115},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[105,85983,85984],{"class":107,"line":1186},[105,85985,2391],{"emptyLinePlaceholder":32},[105,85987,85988],{"class":107,"line":1192},[105,85989,2391],{"emptyLinePlaceholder":32},[105,85991,85992],{"class":107,"line":1206},[105,85993,2391],{"emptyLinePlaceholder":32},[105,85995,85996],{"class":107,"line":1212},[105,85997,85998],{"class":115},"let div = document.createElement(\"div\");\n",[105,86000,86001],{"class":107,"line":1303},[105,86002,86003],{"class":115},"let p = document.createElement(\"p\");\n",[105,86005,86006],{"class":107,"line":1309},[105,86007,86008],{"class":115},"div.append(p);\n",[105,86010,86011],{"class":107,"line":1321},[105,86012,2391],{"emptyLinePlaceholder":32},[105,86014,86015,86018,86020],{"class":107,"line":1603},[105,86016,86017],{"class":115},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[105,86019,14],{"class":51285},[105,86021,86022],{"class":115},"> ]\n",[59,86024,86025],{"start":28},[62,86026,86027],{},"remove()",[14,86029,86030],{},"自己删自己",[14,86032,86033],{},[20,86034],{"alt":22,"src":86035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[96,86037,86039],{"className":50618,"code":86038,"language":50620,"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",[102,86040,86041,86051,86065,86069,86077,86091,86111,86123,86131,86138,86150,86163,86198,86210,86221,86233,86245,86257,86284,86294,86298,86302,86311,86323,86337,86347,86359,86363,86367,86377,86388,86398,86408,86421,86434,86444,86448,86452,86461,86471,86483,86487,86491,86500,86510,86520,86532,86536,86540,86550,86566,86577,86587,86597,86609,86621,86633,86637,86641,86654,86665,86669,86677,86685,86689,86697,86717,86737,86745,86750,86776,86781,86786,86805,86810,86822,86827,86838,86848,86858,86863,86868,86872,86877,86882,86887,86907,86912,86932,86937,86951,86956,86961,86966,86982,86986,86991,87020,87025,87030,87035,87046,87050,87054,87058,87063,87088,87093,87118,87123,87132,87136,87141,87166,87170,87195,87199,87208,87212,87217,87235,87245,87249,87257,87265,87269],{"__ignoreMap":22},[105,86042,86043,86045,86047,86049],{"class":107,"line":108},[105,86044,51282],{"class":115},[105,86046,51286],{"class":51285},[105,86048,51289],{"class":1954},[105,86050,51292],{"class":115},[105,86052,86053,86055,86057,86059,86061,86063],{"class":107,"line":28},[105,86054,1026],{"class":115},[105,86056,50620],{"class":51285},[105,86058,51301],{"class":1954},[105,86060,161],{"class":115},[105,86062,51306],{"class":220},[105,86064,51292],{"class":115},[105,86066,86067],{"class":107,"line":1171},[105,86068,2391],{"emptyLinePlaceholder":32},[105,86070,86071,86073,86075],{"class":107,"line":1186},[105,86072,1026],{"class":115},[105,86074,51319],{"class":51285},[105,86076,51292],{"class":115},[105,86078,86079,86081,86083,86085,86087,86089],{"class":107,"line":1192},[105,86080,52129],{"class":115},[105,86082,51329],{"class":51285},[105,86084,51332],{"class":1954},[105,86086,161],{"class":115},[105,86088,51337],{"class":220},[105,86090,51292],{"class":115},[105,86092,86093,86095,86097,86099,86101,86103,86105,86107,86109],{"class":107,"line":1206},[105,86094,52129],{"class":115},[105,86096,51329],{"class":51285},[105,86098,14912],{"class":1954},[105,86100,161],{"class":115},[105,86102,51376],{"class":220},[105,86104,51356],{"class":1954},[105,86106,161],{"class":115},[105,86108,51383],{"class":220},[105,86110,51292],{"class":115},[105,86112,86113,86115,86117,86119,86121],{"class":107,"line":1212},[105,86114,52129],{"class":115},[105,86116,51392],{"class":51285},[105,86118,51395],{"class":115},[105,86120,51392],{"class":51285},[105,86122,51292],{"class":115},[105,86124,86125,86127,86129],{"class":107,"line":1303},[105,86126,52129],{"class":115},[105,86128,5118],{"class":51285},[105,86130,51292],{"class":115},[105,86132,86133,86136],{"class":107,"line":1309},[105,86134,86135],{"class":1954},"    .modal",[105,86137,15564],{"class":115},[105,86139,86140,86142,86144,86146,86148],{"class":107,"line":1321},[105,86141,54756],{"class":164},[105,86143,51422],{"class":115},[105,86145,3964],{"class":164},[105,86147,51477],{"class":111},[105,86149,1282],{"class":115},[105,86151,86152,86155,86157,86159,86161],{"class":107,"line":1603},[105,86153,86154],{"class":164},"      min-height",[105,86156,51422],{"class":115},[105,86158,427],{"class":164},[105,86160,51477],{"class":111},[105,86162,1282],{"class":115},[105,86164,86165,86167,86169,86171,86173,86175,86177,86179,86181,86183,86185,86187,86189,86191,86193,86196],{"class":107,"line":1608},[105,86166,78735],{"class":164},[105,86168,51422],{"class":115},[105,86170,307],{"class":164},[105,86172,4084],{"class":164},[105,86174,2029],{"class":164},[105,86176,51477],{"class":111},[105,86178,78752],{"class":164},[105,86180,116],{"class":115},[105,86182,307],{"class":164},[105,86184,12427],{"class":115},[105,86186,307],{"class":164},[105,86188,12427],{"class":115},[105,86190,307],{"class":164},[105,86192,12427],{"class":115},[105,86194,86195],{"class":164},"0.1",[105,86197,2710],{"class":115},[105,86199,86200,86202,86204,86206,86208],{"class":107,"line":1614},[105,86201,55119],{"class":164},[105,86203,51422],{"class":115},[105,86205,409],{"class":164},[105,86207,51477],{"class":111},[105,86209,1282],{"class":115},[105,86211,86212,86214,86216,86219],{"class":107,"line":1619},[105,86213,54744],{"class":164},[105,86215,51422],{"class":115},[105,86217,86218],{"class":164},"fixed",[105,86220,1282],{"class":115},[105,86222,86223,86226,86228,86231],{"class":107,"line":1633},[105,86224,86225],{"class":164},"      z-index",[105,86227,51422],{"class":115},[105,86229,86230],{"class":164},"999",[105,86232,1282],{"class":115},[105,86234,86235,86237,86239,86241,86243],{"class":107,"line":1638},[105,86236,54823],{"class":164},[105,86238,51422],{"class":115},[105,86240,772],{"class":164},[105,86242,444],{"class":111},[105,86244,1282],{"class":115},[105,86246,86247,86249,86251,86253,86255],{"class":107,"line":1644},[105,86248,54932],{"class":164},[105,86250,51422],{"class":115},[105,86252,772],{"class":164},[105,86254,444],{"class":111},[105,86256,1282],{"class":115},[105,86258,86259,86261,86263,86265,86267,86270,86272,86274,86276,86278,86280,86282],{"class":107,"line":1665},[105,86260,78776],{"class":164},[105,86262,51422],{"class":115},[105,86264,78781],{"class":164},[105,86266,116],{"class":115},[105,86268,86269],{"class":164},"-50",[105,86271,444],{"class":111},[105,86273,12427],{"class":115},[105,86275,86269],{"class":164},[105,86277,444],{"class":111},[105,86279,12427],{"class":115},[105,86281,307],{"class":164},[105,86283,2710],{"class":115},[105,86285,86286,86288,86290,86292],{"class":107,"line":1670},[105,86287,54869],{"class":164},[105,86289,51422],{"class":115},[105,86291,60827],{"class":164},[105,86293,1282],{"class":115},[105,86295,86296],{"class":107,"line":1684},[105,86297,2178],{"class":115},[105,86299,86300],{"class":107,"line":1689},[105,86301,2391],{"emptyLinePlaceholder":32},[105,86303,86304,86306,86309],{"class":107,"line":1718},[105,86305,86135],{"class":1954},[105,86307,86308],{"class":1954}," .header",[105,86310,15564],{"class":115},[105,86312,86313,86315,86317,86319,86321],{"class":107,"line":1723},[105,86314,57344],{"class":164},[105,86316,51422],{"class":115},[105,86318,517],{"class":164},[105,86320,51477],{"class":111},[105,86322,1282],{"class":115},[105,86324,86325,86327,86329,86331,86333,86335],{"class":107,"line":1740},[105,86326,54680],{"class":164},[105,86328,51422],{"class":115},[105,86330,307],{"class":164},[105,86332,2029],{"class":164},[105,86334,51477],{"class":111},[105,86336,1282],{"class":115},[105,86338,86339,86341,86343,86345],{"class":107,"line":1745},[105,86340,54744],{"class":164},[105,86342,51422],{"class":115},[105,86344,54749],{"class":164},[105,86346,1282],{"class":115},[105,86348,86349,86351,86353,86355,86357],{"class":107,"line":1750},[105,86350,54907],{"class":164},[105,86352,51422],{"class":115},[105,86354,816],{"class":164},[105,86356,51477],{"class":111},[105,86358,1282],{"class":115},[105,86360,86361],{"class":107,"line":1755},[105,86362,2178],{"class":115},[105,86364,86365],{"class":107,"line":1769},[105,86366,2391],{"emptyLinePlaceholder":32},[105,86368,86369,86371,86373,86375],{"class":107,"line":1774},[105,86370,86135],{"class":1954},[105,86372,86308],{"class":1954},[105,86374,3023],{"class":51285},[105,86376,15564],{"class":115},[105,86378,86379,86382,86384,86386],{"class":107,"line":2568},[105,86380,86381],{"class":164},"      font-style",[105,86383,51422],{"class":115},[105,86385,63826],{"class":164},[105,86387,1282],{"class":115},[105,86389,86390,86392,86394,86396],{"class":107,"line":2582},[105,86391,57401],{"class":164},[105,86393,51422],{"class":115},[105,86395,62055],{"class":164},[105,86397,1282],{"class":115},[105,86399,86400,86402,86404,86406],{"class":107,"line":2590},[105,86401,54744],{"class":164},[105,86403,51422],{"class":115},[105,86405,54816],{"class":164},[105,86407,1282],{"class":115},[105,86409,86410,86413,86415,86417,86419],{"class":107,"line":2595},[105,86411,86412],{"class":164},"      right",[105,86414,51422],{"class":115},[105,86416,691],{"class":164},[105,86418,51477],{"class":111},[105,86420,1282],{"class":115},[105,86422,86423,86425,86427,86430,86432],{"class":107,"line":2601},[105,86424,54932],{"class":164},[105,86426,51422],{"class":115},[105,86428,86429],{"class":164},"-2",[105,86431,51477],{"class":111},[105,86433,1282],{"class":115},[105,86435,86436,86438,86440,86442],{"class":107,"line":2607},[105,86437,62010],{"class":164},[105,86439,51422],{"class":115},[105,86441,62015],{"class":164},[105,86443,1282],{"class":115},[105,86445,86446],{"class":107,"line":2612},[105,86447,2178],{"class":115},[105,86449,86450],{"class":107,"line":7940},[105,86451,2391],{"emptyLinePlaceholder":32},[105,86453,86454,86456,86459],{"class":107,"line":7964},[105,86455,86135],{"class":1954},[105,86457,86458],{"class":1954}," .body",[105,86460,15564],{"class":115},[105,86462,86463,86465,86467,86469],{"class":107,"line":7969},[105,86464,57271],{"class":164},[105,86466,51422],{"class":115},[105,86468,51577],{"class":164},[105,86470,1282],{"class":115},[105,86472,86473,86475,86477,86479,86481],{"class":107,"line":7975},[105,86474,54680],{"class":164},[105,86476,51422],{"class":115},[105,86478,562],{"class":164},[105,86480,51477],{"class":111},[105,86482,1282],{"class":115},[105,86484,86485],{"class":107,"line":8002},[105,86486,2178],{"class":115},[105,86488,86489],{"class":107,"line":8007},[105,86490,2391],{"emptyLinePlaceholder":32},[105,86492,86493,86495,86498],{"class":107,"line":8013},[105,86494,86135],{"class":1954},[105,86496,86497],{"class":1954}," .footer",[105,86499,15564],{"class":115},[105,86501,86502,86504,86506,86508],{"class":107,"line":8025},[105,86503,54994],{"class":164},[105,86505,51422],{"class":115},[105,86507,51462],{"class":164},[105,86509,1282],{"class":115},[105,86511,86512,86514,86516,86518],{"class":107,"line":8037},[105,86513,55005],{"class":164},[105,86515,51422],{"class":115},[105,86517,51565],{"class":164},[105,86519,1282],{"class":115},[105,86521,86522,86524,86526,86528,86530],{"class":107,"line":8049},[105,86523,54680],{"class":164},[105,86525,51422],{"class":115},[105,86527,562],{"class":164},[105,86529,51477],{"class":111},[105,86531,1282],{"class":115},[105,86533,86534],{"class":107,"line":9708},[105,86535,2178],{"class":115},[105,86537,86538],{"class":107,"line":9733},[105,86539,2391],{"emptyLinePlaceholder":32},[105,86541,86542,86544,86546,86548],{"class":107,"line":9756},[105,86543,86135],{"class":1954},[105,86545,86497],{"class":1954},[105,86547,1390],{"class":51285},[105,86549,15564],{"class":115},[105,86551,86552,86554,86556,86558,86560,86562,86564],{"class":107,"line":9780},[105,86553,54680],{"class":164},[105,86555,51422],{"class":115},[105,86557,187],{"class":164},[105,86559,51477],{"class":111},[105,86561,2074],{"class":164},[105,86563,51477],{"class":111},[105,86565,1282],{"class":115},[105,86567,86568,86570,86572,86575],{"class":107,"line":9785},[105,86569,61706],{"class":164},[105,86571,51422],{"class":115},[105,86573,86574],{"class":164},"#ccc",[105,86576,1282],{"class":115},[105,86578,86579,86581,86583,86585],{"class":107,"line":9790},[105,86580,63955],{"class":164},[105,86582,51422],{"class":115},[105,86584,54722],{"class":164},[105,86586,1282],{"class":115},[105,86588,86589,86591,86593,86595],{"class":107,"line":9795},[105,86590,57401],{"class":164},[105,86592,51422],{"class":115},[105,86594,60827],{"class":164},[105,86596,1282],{"class":115},[105,86598,86599,86601,86603,86605,86607],{"class":107,"line":9804},[105,86600,55119],{"class":164},[105,86602,51422],{"class":115},[105,86604,193],{"class":164},[105,86606,51477],{"class":111},[105,86608,1282],{"class":115},[105,86610,86611,86613,86615,86617,86619],{"class":107,"line":9809},[105,86612,61735],{"class":164},[105,86614,51422],{"class":115},[105,86616,562],{"class":164},[105,86618,51477],{"class":111},[105,86620,1282],{"class":115},[105,86622,86623,86625,86627,86629,86631],{"class":107,"line":9815},[105,86624,54907],{"class":164},[105,86626,51422],{"class":115},[105,86628,665],{"class":164},[105,86630,51477],{"class":111},[105,86632,1282],{"class":115},[105,86634,86635],{"class":107,"line":9836},[105,86636,2178],{"class":115},[105,86638,86639],{"class":107,"line":9842},[105,86640,2391],{"emptyLinePlaceholder":32},[105,86642,86643,86645,86647,86649,86652],{"class":107,"line":9856},[105,86644,86135],{"class":1954},[105,86646,86497],{"class":1954},[105,86648,1390],{"class":51285},[105,86650,86651],{"class":1954},".submit",[105,86653,15564],{"class":115},[105,86655,86656,86658,86660,86663],{"class":107,"line":9862},[105,86657,54869],{"class":164},[105,86659,51422],{"class":115},[105,86661,86662],{"class":164},"#369",[105,86664,1282],{"class":115},[105,86666,86667],{"class":107,"line":9889},[105,86668,2178],{"class":115},[105,86670,86671,86673,86675],{"class":107,"line":9898},[105,86672,52402],{"class":115},[105,86674,5118],{"class":51285},[105,86676,51292],{"class":115},[105,86678,86679,86681,86683],{"class":107,"line":9904},[105,86680,51770],{"class":115},[105,86682,51319],{"class":51285},[105,86684,51292],{"class":115},[105,86686,86687],{"class":107,"line":9912},[105,86688,2391],{"emptyLinePlaceholder":32},[105,86690,86691,86693,86695],{"class":107,"line":9917},[105,86692,1026],{"class":115},[105,86694,51785],{"class":51285},[105,86696,51292],{"class":115},[105,86698,86699,86701,86703,86705,86707,86710,86713,86715],{"class":107,"line":16596},[105,86700,52129],{"class":115},[105,86702,53872],{"class":51285},[105,86704,14951],{"class":1954},[105,86706,161],{"class":115},[105,86708,86709],{"class":220},"\"delete\"",[105,86711,86712],{"class":115},">删除\u003C\u002F",[105,86714,53872],{"class":51285},[105,86716,51292],{"class":115},[105,86718,86719,86721,86723,86725,86727,86730,86733,86735],{"class":107,"line":16602},[105,86720,52129],{"class":115},[105,86722,53872],{"class":51285},[105,86724,14951],{"class":1954},[105,86726,161],{"class":115},[105,86728,86729],{"class":220},"\"login\"",[105,86731,86732],{"class":115},">登录\u003C\u002F",[105,86734,53872],{"class":51285},[105,86736,51292],{"class":115},[105,86738,86739,86741,86743],{"class":107,"line":16625},[105,86740,52129],{"class":115},[105,86742,51798],{"class":51285},[105,86744,51292],{"class":115},[105,86746,86747],{"class":107,"line":16631},[105,86748,86749],{"class":174},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[105,86751,86752,86754,86757,86759,86761,86763,86765,86767,86770,86772,86774],{"class":107,"line":16654},[105,86753,70069],{"class":111},[105,86755,86756],{"class":1954}," Modal",[105,86758,116],{"class":115},[105,86760,51392],{"class":5208},[105,86762,13556],{"class":111},[105,86764,69915],{"class":220},[105,86766,12427],{"class":115},[105,86768,86769],{"class":5208},"message",[105,86771,13556],{"class":111},[105,86773,69915],{"class":220},[105,86775,12434],{"class":115},[105,86777,86778],{"class":107,"line":16668},[105,86779,86780],{"class":174},"      \u002F\u002F 创建Model 模态框盒子\n",[105,86782,86783],{"class":107,"line":16688},[105,86784,86785],{"class":174},"      \u002F\u002F 1.1 创建div标签\n",[105,86787,86788,86790,86793,86795,86797,86799,86801,86803],{"class":107,"line":16694},[105,86789,70036],{"class":164},[105,86791,86792],{"class":115},".modalBox ",[105,86794,161],{"class":111},[105,86796,54381],{"class":115},[105,86798,70136],{"class":1954},[105,86800,116],{"class":115},[105,86802,81916],{"class":220},[105,86804,122],{"class":115},[105,86806,86807],{"class":107,"line":16705},[105,86808,86809],{"class":174},"      \u002F\u002F 1.2 给div 添加类名为model\n",[105,86811,86812,86814,86817,86819],{"class":107,"line":16728},[105,86813,70036],{"class":164},[105,86815,86816],{"class":115},".modalBox.className ",[105,86818,161],{"class":111},[105,86820,86821],{"class":220}," 'modal'\n",[105,86823,86824],{"class":107,"line":16750},[105,86825,86826],{"class":174},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[105,86828,86829,86831,86834,86836],{"class":107,"line":16755},[105,86830,70036],{"class":164},[105,86832,86833],{"class":115},".modalBox.innerHTML ",[105,86835,161],{"class":111},[105,86837,70153],{"class":220},[105,86839,86840,86843,86845],{"class":107,"line":16761},[105,86841,86842],{"class":220},"        \u003Cdiv class=\"header\">${",[105,86844,51392],{"class":115},[105,86846,86847],{"class":220},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[105,86849,86850,86853,86855],{"class":107,"line":16775},[105,86851,86852],{"class":220},"        \u003Cdiv class=\"body\">${",[105,86854,86769],{"class":115},[105,86856,86857],{"class":220},"}\u003C\u002Fdiv>\n",[105,86859,86860],{"class":107,"line":16788},[105,86861,86862],{"class":220},"      `\n",[105,86864,86865],{"class":107,"line":16793},[105,86866,86867],{"class":174},"      \u002F\u002F console.log(this.modalBox)\n",[105,86869,86870],{"class":107,"line":16807},[105,86871,2178],{"class":115},[105,86873,86874],{"class":107,"line":16812},[105,86875,86876],{"class":174},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[105,86878,86879],{"class":107,"line":16818},[105,86880,86881],{"class":174},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[105,86883,86884],{"class":107,"line":16823},[105,86885,86886],{"class":174},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[105,86888,86889,86892,86894,86896,86898,86901,86903,86905],{"class":107,"line":16837},[105,86890,86891],{"class":164},"    Modal",[105,86893,674],{"class":115},[105,86895,85564],{"class":164},[105,86897,674],{"class":115},[105,86899,86900],{"class":1954},"open",[105,86902,13556],{"class":111},[105,86904,58903],{"class":111},[105,86906,54437],{"class":115},[105,86908,86909],{"class":107,"line":16842},[105,86910,86911],{"class":174},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[105,86913,86914,86916,86919,86921,86923,86925,86927,86930],{"class":107,"line":16847},[105,86915,58213],{"class":111},[105,86917,86918],{"class":164}," box",[105,86920,13556],{"class":111},[105,86922,54381],{"class":115},[105,86924,54384],{"class":1954},[105,86926,116],{"class":115},[105,86928,86929],{"class":220},"'.modal'",[105,86931,122],{"class":115},[105,86933,86934],{"class":107,"line":16861},[105,86935,86936],{"class":174},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[105,86938,86939,86942,86944,86947,86949],{"class":107,"line":16873},[105,86940,86941],{"class":115},"      box ",[105,86943,1706],{"class":111},[105,86945,86946],{"class":115}," box.",[105,86948,56991],{"class":1954},[105,86950,1967],{"class":115},[105,86952,86953],{"class":107,"line":16878},[105,86954,86955],{"class":174},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[105,86957,86958],{"class":107,"line":16891},[105,86959,86960],{"class":174},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[105,86962,86963],{"class":107,"line":16896},[105,86964,86965],{"class":174},"      \u002F\u002F append可以增加对象\n",[105,86967,86968,86971,86974,86976,86979],{"class":107,"line":16901},[105,86969,86970],{"class":115},"      document.body.",[105,86972,86973],{"class":1954},"append",[105,86975,116],{"class":115},[105,86977,86978],{"class":164},"this",[105,86980,86981],{"class":115},".modalBox)\n",[105,86983,86984],{"class":107,"line":16906},[105,86985,2391],{"emptyLinePlaceholder":32},[105,86987,86988],{"class":107,"line":16919},[105,86989,86990],{"class":174},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[105,86992,86993,86995,86998,87000,87002,87005,87007,87009,87011,87013,87016,87018],{"class":107,"line":16924},[105,86994,70036],{"class":164},[105,86996,86997],{"class":115},".modalBox.",[105,86999,54384],{"class":1954},[105,87001,116],{"class":115},[105,87003,87004],{"class":220},"'i'",[105,87006,30811],{"class":115},[105,87008,57798],{"class":1954},[105,87010,116],{"class":115},[105,87012,57803],{"class":220},[105,87014,87015],{"class":115},", () ",[105,87017,84707],{"class":111},[105,87019,15564],{"class":115},[105,87021,87022],{"class":107,"line":32618},[105,87023,87024],{"class":174},"        \u002F\u002F 这个地方需要用到箭头函数\n",[105,87026,87027],{"class":107,"line":32624},[105,87028,87029],{"class":174},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[105,87031,87032],{"class":107,"line":32630},[105,87033,87034],{"class":174},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[105,87036,87037,87039,87041,87044],{"class":107,"line":32636},[105,87038,64711],{"class":164},[105,87040,674],{"class":115},[105,87042,87043],{"class":1954},"close",[105,87045,1967],{"class":115},[105,87047,87048],{"class":107,"line":32642},[105,87049,64800],{"class":115},[105,87051,87052],{"class":107,"line":32653},[105,87053,2178],{"class":115},[105,87055,87056],{"class":107,"line":32659},[105,87057,2391],{"emptyLinePlaceholder":32},[105,87059,87060],{"class":107,"line":32679},[105,87061,87062],{"class":174},"    \u002F\u002F 测试一下 点击 删除按钮\n",[105,87064,87065,87067,87069,87071,87074,87076,87078,87080,87082,87084,87086],{"class":107,"line":32685},[105,87066,52392],{"class":115},[105,87068,54384],{"class":1954},[105,87070,116],{"class":115},[105,87072,87073],{"class":220},"'#delete'",[105,87075,30811],{"class":115},[105,87077,57798],{"class":1954},[105,87079,116],{"class":115},[105,87081,57803],{"class":220},[105,87083,87015],{"class":115},[105,87085,84707],{"class":111},[105,87087,15564],{"class":115},[105,87089,87090],{"class":107,"line":32696},[105,87091,87092],{"class":174},"      \u002F\u002F 先调用Model构造函数\n",[105,87094,87095,87097,87100,87102,87104,87106,87108,87111,87113,87116],{"class":107,"line":32702},[105,87096,58213],{"class":111},[105,87098,87099],{"class":164}," del",[105,87101,13556],{"class":111},[105,87103,11570],{"class":111},[105,87105,86756],{"class":1954},[105,87107,116],{"class":115},[105,87109,87110],{"class":220},"'温馨的提示'",[105,87112,12427],{"class":115},[105,87114,87115],{"class":220},"'您没有删除权限操作'",[105,87117,122],{"class":115},[105,87119,87120],{"class":107,"line":32708},[105,87121,87122],{"class":174},"      \u002F\u002F 实例对象调用open方法\n",[105,87124,87125,87128,87130],{"class":107,"line":32714},[105,87126,87127],{"class":115},"      del.",[105,87129,86900],{"class":1954},[105,87131,1967],{"class":115},[105,87133,87134],{"class":107,"line":32720},[105,87135,33446],{"class":115},[105,87137,87138],{"class":107,"line":32726},[105,87139,87140],{"class":174},"    \u002F\u002F 测试一下 点击 登录按钮\n",[105,87142,87143,87145,87147,87149,87152,87154,87156,87158,87160,87162,87164],{"class":107,"line":32732},[105,87144,52392],{"class":115},[105,87146,54384],{"class":1954},[105,87148,116],{"class":115},[105,87150,87151],{"class":220},"'#login'",[105,87153,30811],{"class":115},[105,87155,57798],{"class":1954},[105,87157,116],{"class":115},[105,87159,57803],{"class":220},[105,87161,87015],{"class":115},[105,87163,84707],{"class":111},[105,87165,15564],{"class":115},[105,87167,87168],{"class":107,"line":32738},[105,87169,87092],{"class":174},[105,87171,87172,87174,87177,87179,87181,87183,87185,87188,87190,87193],{"class":107,"line":32758},[105,87173,58213],{"class":111},[105,87175,87176],{"class":164}," log",[105,87178,13556],{"class":111},[105,87180,11570],{"class":111},[105,87182,86756],{"class":1954},[105,87184,116],{"class":115},[105,87186,87187],{"class":220},"'友情提示'",[105,87189,12427],{"class":115},[105,87191,87192],{"class":220},"'您还没有登录呢'",[105,87194,122],{"class":115},[105,87196,87197],{"class":107,"line":32764},[105,87198,87122],{"class":174},[105,87200,87201,87204,87206],{"class":107,"line":32780},[105,87202,87203],{"class":115},"      log.",[105,87205,86900],{"class":1954},[105,87207,1967],{"class":115},[105,87209,87210],{"class":107,"line":32786},[105,87211,33446],{"class":115},[105,87213,87214],{"class":107,"line":32800},[105,87215,87216],{"class":174},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[105,87218,87219,87221,87223,87225,87227,87229,87231,87233],{"class":107,"line":32806},[105,87220,86891],{"class":164},[105,87222,674],{"class":115},[105,87224,85564],{"class":164},[105,87226,674],{"class":115},[105,87228,87043],{"class":1954},[105,87230,13556],{"class":111},[105,87232,58903],{"class":111},[105,87234,54437],{"class":115},[105,87236,87237,87239,87241,87243],{"class":107,"line":32821},[105,87238,70036],{"class":164},[105,87240,86997],{"class":115},[105,87242,56991],{"class":1954},[105,87244,1967],{"class":115},[105,87246,87247],{"class":107,"line":32827},[105,87248,2178],{"class":115},[105,87250,87251,87253,87255],{"class":107,"line":32836},[105,87252,52402],{"class":115},[105,87254,51798],{"class":51285},[105,87256,51292],{"class":115},[105,87258,87259,87261,87263],{"class":107,"line":32842},[105,87260,51770],{"class":115},[105,87262,51785],{"class":51285},[105,87264,51292],{"class":115},[105,87266,87267],{"class":107,"line":32851},[105,87268,2391],{"emptyLinePlaceholder":32},[105,87270,87271,87273,87275],{"class":107,"line":32857},[105,87272,51770],{"class":115},[105,87274,50620],{"class":51285},[105,87276,51292],{"class":115},[14,87278,87279],{},[20,87280],{"alt":22,"src":87281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[47,87283,87285],{"id":87284},"_414-深浅拷贝","4.14 深浅拷贝",[76,87287,87289],{"id":87288},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87291,87292],{},[20,87293],{"alt":22,"src":87294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87296,87297],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87299,87300],{},[20,87301],{"alt":22,"src":87302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87304,87305],{},[20,87306],{"alt":22,"src":87307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87309,87310],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87312,87313],{},[20,87314],{"alt":22,"src":87315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87317,11324],{},[14,87319,87320],{},[20,87321],{"alt":22,"src":87322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[76,87324,87326],{"id":87325},"_4142-深拷贝","4.14.2 深拷贝",[14,87328,87329],{},"深拷贝：拷贝的是对象，不是地址",[14,87331,87332],{},"常用的三种方法：",[59,87334,87335,87338,87341],{},[62,87336,87337],{},"通过递归实现深拷贝",[62,87339,87340],{},"lodash\u002FcloneDeep",[62,87342,87343],{},"通过JSON.stringify()实现",[21990,87345,87347],{"id":87346},"_41421-递归函数","4.14.2.1 递归函数",[14,87349,87350],{},[20,87351],{"alt":22,"src":87352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[59,87354,87355],{},[62,87356,87357],{},"死递归占溢出：",[96,87359,87361],{"className":53052,"code":87360,"language":53054,"meta":22,"style":22},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[102,87362,87363,87371,87379,87383,87388,87392,87397,87405],{"__ignoreMap":22},[105,87364,87365,87367,87369],{"class":107,"line":108},[105,87366,1026],{"class":115},[105,87368,51785],{"class":51285},[105,87370,51292],{"class":115},[105,87372,87373,87375,87377],{"class":107,"line":28},[105,87374,52129],{"class":115},[105,87376,51798],{"class":51285},[105,87378,51292],{"class":115},[105,87380,87381],{"class":107,"line":1171},[105,87382,77128],{"class":115},[105,87384,87385],{"class":107,"line":1186},[105,87386,87387],{"class":115},"      fn()\n",[105,87389,87390],{"class":107,"line":1192},[105,87391,2178],{"class":115},[105,87393,87394],{"class":107,"line":1206},[105,87395,87396],{"class":115},"    fn()\n",[105,87398,87399,87401,87403],{"class":107,"line":1212},[105,87400,52402],{"class":115},[105,87402,51798],{"class":51285},[105,87404,51292],{"class":115},[105,87406,87407,87409,87411],{"class":107,"line":1303},[105,87408,51770],{"class":115},[105,87410,51785],{"class":51285},[105,87412,51292],{"class":115},[59,87414,87415],{"start":28},[62,87416,87417],{},"递归函数要加判断条件：",[14,87419,87420],{},[20,87421],{"alt":22,"src":87422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[59,87424,87425],{"start":1171},[62,87426,87427],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[96,87429,87431],{"className":50618,"code":87430,"language":50620,"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",[102,87432,87433,87443,87457,87461,87469,87483,87503,87515,87523,87527,87535,87547,87555,87563,87588,87600,87604,87611,87619,87627,87631],{"__ignoreMap":22},[105,87434,87435,87437,87439,87441],{"class":107,"line":108},[105,87436,51282],{"class":115},[105,87438,51286],{"class":51285},[105,87440,51289],{"class":1954},[105,87442,51292],{"class":115},[105,87444,87445,87447,87449,87451,87453,87455],{"class":107,"line":28},[105,87446,1026],{"class":115},[105,87448,50620],{"class":51285},[105,87450,51301],{"class":1954},[105,87452,161],{"class":115},[105,87454,51306],{"class":220},[105,87456,51292],{"class":115},[105,87458,87459],{"class":107,"line":1171},[105,87460,2391],{"emptyLinePlaceholder":32},[105,87462,87463,87465,87467],{"class":107,"line":1186},[105,87464,1026],{"class":115},[105,87466,51319],{"class":51285},[105,87468,51292],{"class":115},[105,87470,87471,87473,87475,87477,87479,87481],{"class":107,"line":1192},[105,87472,52129],{"class":115},[105,87474,51329],{"class":51285},[105,87476,51332],{"class":1954},[105,87478,161],{"class":115},[105,87480,51337],{"class":220},[105,87482,51292],{"class":115},[105,87484,87485,87487,87489,87491,87493,87495,87497,87499,87501],{"class":107,"line":1206},[105,87486,52129],{"class":115},[105,87488,51329],{"class":51285},[105,87490,14912],{"class":1954},[105,87492,161],{"class":115},[105,87494,51376],{"class":220},[105,87496,51356],{"class":1954},[105,87498,161],{"class":115},[105,87500,51383],{"class":220},[105,87502,51292],{"class":115},[105,87504,87505,87507,87509,87511,87513],{"class":107,"line":1212},[105,87506,52129],{"class":115},[105,87508,51392],{"class":51285},[105,87510,51395],{"class":115},[105,87512,51392],{"class":51285},[105,87514,51292],{"class":115},[105,87516,87517,87519,87521],{"class":107,"line":1303},[105,87518,51770],{"class":115},[105,87520,51319],{"class":51285},[105,87522,51292],{"class":115},[105,87524,87525],{"class":107,"line":1309},[105,87526,2391],{"emptyLinePlaceholder":32},[105,87528,87529,87531,87533],{"class":107,"line":1321},[105,87530,1026],{"class":115},[105,87532,51785],{"class":51285},[105,87534,51292],{"class":115},[105,87536,87537,87539,87541,87543,87545],{"class":107,"line":1603},[105,87538,52129],{"class":115},[105,87540,51596],{"class":51285},[105,87542,55299],{"class":115},[105,87544,51596],{"class":51285},[105,87546,51292],{"class":115},[105,87548,87549,87551,87553],{"class":107,"line":1608},[105,87550,52129],{"class":115},[105,87552,51798],{"class":51285},[105,87554,51292],{"class":115},[105,87556,87557,87559,87561],{"class":107,"line":1614},[105,87558,70069],{"class":111},[105,87560,73758],{"class":1954},[105,87562,10845],{"class":115},[105,87564,87565,87567,87569,87571,87573,87575,87577,87579,87581,87583,87586],{"class":107,"line":1619},[105,87566,55756],{"class":115},[105,87568,54384],{"class":1954},[105,87570,116],{"class":115},[105,87572,81916],{"class":220},[105,87574,74234],{"class":115},[105,87576,161],{"class":111},[105,87578,11570],{"class":111},[105,87580,73774],{"class":1954},[105,87582,17253],{"class":115},[105,87584,87585],{"class":1954},"toLocaleString",[105,87587,1967],{"class":115},[105,87589,87590,87593,87596,87598],{"class":107,"line":1633},[105,87591,87592],{"class":1954},"      setTimeout",[105,87594,87595],{"class":115},"(getTime, ",[105,87597,6402],{"class":164},[105,87599,122],{"class":115},[105,87601,87602],{"class":107,"line":1638},[105,87603,2178],{"class":115},[105,87605,87606,87609],{"class":107,"line":1644},[105,87607,87608],{"class":1954},"    getTime",[105,87610,1967],{"class":115},[105,87612,87613,87615,87617],{"class":107,"line":1665},[105,87614,52402],{"class":115},[105,87616,51798],{"class":51285},[105,87618,51292],{"class":115},[105,87620,87621,87623,87625],{"class":107,"line":1670},[105,87622,51770],{"class":115},[105,87624,51785],{"class":51285},[105,87626,51292],{"class":115},[105,87628,87629],{"class":107,"line":1684},[105,87630,2391],{"emptyLinePlaceholder":32},[105,87632,87633,87635,87637],{"class":107,"line":1689},[105,87634,51770],{"class":115},[105,87636,50620],{"class":51285},[105,87638,51292],{"class":115},[14,87640,87641],{},[20,87642],{"alt":22,"src":87643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[59,87645,87646],{"start":1186},[62,87647,87337],{},[14,87649,87650],{},[20,87651],{"alt":22,"src":87652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87654,87655],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87657,39174],{},[14,87659,87660],{},"这个是简易版的递归函数深拷贝",[14,87662,87663],{},"一定要注意先数组再对象，因为万物皆可对象",[96,87665,87667],{"className":50618,"code":87666,"language":50620,"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",[102,87668,87669,87679,87693,87697,87705,87719,87739,87751,87759,87763,87771,87779,87789,87798,87806,87822,87826,87834,87838,87842,87854,87859,87878,87894,87899,87904,87909,87924,87929,87934,87943,87951,87968,87976,87982,87990,87995,88000,88009,88013,88017,88021,88032,88041,88051,88065,88075,88083,88091,88099,88103],{"__ignoreMap":22},[105,87670,87671,87673,87675,87677],{"class":107,"line":108},[105,87672,51282],{"class":115},[105,87674,51286],{"class":51285},[105,87676,51289],{"class":1954},[105,87678,51292],{"class":115},[105,87680,87681,87683,87685,87687,87689,87691],{"class":107,"line":28},[105,87682,1026],{"class":115},[105,87684,50620],{"class":51285},[105,87686,51301],{"class":1954},[105,87688,161],{"class":115},[105,87690,51306],{"class":220},[105,87692,51292],{"class":115},[105,87694,87695],{"class":107,"line":1171},[105,87696,2391],{"emptyLinePlaceholder":32},[105,87698,87699,87701,87703],{"class":107,"line":1186},[105,87700,1026],{"class":115},[105,87702,51319],{"class":51285},[105,87704,51292],{"class":115},[105,87706,87707,87709,87711,87713,87715,87717],{"class":107,"line":1192},[105,87708,52129],{"class":115},[105,87710,51329],{"class":51285},[105,87712,51332],{"class":1954},[105,87714,161],{"class":115},[105,87716,51337],{"class":220},[105,87718,51292],{"class":115},[105,87720,87721,87723,87725,87727,87729,87731,87733,87735,87737],{"class":107,"line":1206},[105,87722,52129],{"class":115},[105,87724,51329],{"class":51285},[105,87726,14912],{"class":1954},[105,87728,161],{"class":115},[105,87730,51376],{"class":220},[105,87732,51356],{"class":1954},[105,87734,161],{"class":115},[105,87736,51383],{"class":220},[105,87738,51292],{"class":115},[105,87740,87741,87743,87745,87747,87749],{"class":107,"line":1212},[105,87742,52129],{"class":115},[105,87744,51392],{"class":51285},[105,87746,51395],{"class":115},[105,87748,51392],{"class":51285},[105,87750,51292],{"class":115},[105,87752,87753,87755,87757],{"class":107,"line":1303},[105,87754,51770],{"class":115},[105,87756,51319],{"class":51285},[105,87758,51292],{"class":115},[105,87760,87761],{"class":107,"line":1309},[105,87762,2391],{"emptyLinePlaceholder":32},[105,87764,87765,87767,87769],{"class":107,"line":1321},[105,87766,1026],{"class":115},[105,87768,51785],{"class":51285},[105,87770,51292],{"class":115},[105,87772,87773,87775,87777],{"class":107,"line":1603},[105,87774,52129],{"class":115},[105,87776,51798],{"class":51285},[105,87778,51292],{"class":115},[105,87780,87781,87783,87785,87787],{"class":107,"line":1608},[105,87782,11213],{"class":111},[105,87784,69956],{"class":164},[105,87786,13556],{"class":111},[105,87788,15564],{"class":115},[105,87790,87791,87793,87796],{"class":107,"line":1614},[105,87792,71601],{"class":115},[105,87794,87795],{"class":220},"'pink'",[105,87797,31451],{"class":115},[105,87799,87800,87802,87804],{"class":107,"line":1619},[105,87801,71611],{"class":115},[105,87803,766],{"class":164},[105,87805,31451],{"class":115},[105,87807,87808,87811,87814,87816,87819],{"class":107,"line":1633},[105,87809,87810],{"class":115},"      hobby: [",[105,87812,87813],{"class":220},"'乒乓球'",[105,87815,12427],{"class":115},[105,87817,87818],{"class":220},"'足球'",[105,87820,87821],{"class":115},"],\n",[105,87823,87824],{"class":107,"line":1638},[105,87825,77857],{"class":115},[105,87827,87828,87831],{"class":107,"line":1644},[105,87829,87830],{"class":115},"        baby: ",[105,87832,87833],{"class":220},"'小pink'\n",[105,87835,87836],{"class":107,"line":1665},[105,87837,52383],{"class":115},[105,87839,87840],{"class":107,"line":1670},[105,87841,2178],{"class":115},[105,87843,87844,87846,87849,87851],{"class":107,"line":1684},[105,87845,11213],{"class":111},[105,87847,87848],{"class":164}," o",[105,87850,13556],{"class":111},[105,87852,87853],{"class":115}," {}\n",[105,87855,87856],{"class":107,"line":1689},[105,87857,87858],{"class":174},"    \u002F\u002F 拷贝函数\n",[105,87860,87861,87863,87866,87868,87871,87873,87876],{"class":107,"line":1718},[105,87862,70069],{"class":111},[105,87864,87865],{"class":1954}," deepCopy",[105,87867,116],{"class":115},[105,87869,87870],{"class":5208},"newObj",[105,87872,12427],{"class":115},[105,87874,87875],{"class":5208},"oldObj",[105,87877,12434],{"class":115},[105,87879,87880,87882,87884,87886,87889,87891],{"class":107,"line":1723},[105,87881,52269],{"class":111},[105,87883,1649],{"class":115},[105,87885,51832],{"class":111},[105,87887,87888],{"class":115}," k ",[105,87890,26028],{"class":111},[105,87892,87893],{"class":115}," oldObj) {\n",[105,87895,87896],{"class":107,"line":1740},[105,87897,87898],{"class":174},"        \u002F\u002F 处理数组的问题\n",[105,87900,87901],{"class":107,"line":1745},[105,87902,87903],{"class":174},"        \u002F\u002F 判断是否属于数组\n",[105,87905,87906],{"class":107,"line":1750},[105,87907,87908],{"class":174},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[105,87910,87911,87913,87916,87919,87922],{"class":107,"line":1755},[105,87912,2488],{"class":111},[105,87914,87915],{"class":115}," (oldObj[k] ",[105,87917,87918],{"class":111},"instanceof",[105,87920,87921],{"class":1954}," Array",[105,87923,12434],{"class":115},[105,87925,87926],{"class":107,"line":1769},[105,87927,87928],{"class":174},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[105,87930,87931],{"class":107,"line":1774},[105,87932,87933],{"class":174},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[105,87935,87936,87939,87941],{"class":107,"line":2568},[105,87937,87938],{"class":115},"          newObj[k] ",[105,87940,161],{"class":111},[105,87942,51823],{"class":115},[105,87944,87945,87948],{"class":107,"line":2582},[105,87946,87947],{"class":1954},"          deepCopy",[105,87949,87950],{"class":115},"(newObj[k], oldObj[k])\n",[105,87952,87953,87955,87957,87959,87961,87963,87966],{"class":107,"line":2590},[105,87954,80065],{"class":115},[105,87956,1692],{"class":111},[105,87958,1695],{"class":111},[105,87960,87915],{"class":115},[105,87962,87918],{"class":111},[105,87964,87965],{"class":1954}," Object",[105,87967,12434],{"class":115},[105,87969,87970,87972,87974],{"class":107,"line":2595},[105,87971,87938],{"class":115},[105,87973,161],{"class":111},[105,87975,87853],{"class":115},[105,87977,87978,87980],{"class":107,"line":2601},[105,87979,87947],{"class":1954},[105,87981,87950],{"class":115},[105,87983,87984,87986,87988],{"class":107,"line":2607},[105,87985,80065],{"class":115},[105,87987,1692],{"class":111},[105,87989,15564],{"class":115},[105,87991,87992],{"class":107,"line":2612},[105,87993,87994],{"class":174},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[105,87996,87997],{"class":107,"line":7940},[105,87998,87999],{"class":174},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[105,88001,88002,88004,88006],{"class":107,"line":7964},[105,88003,87938],{"class":115},[105,88005,161],{"class":111},[105,88007,88008],{"class":115}," oldObj[k]\n",[105,88010,88011],{"class":107,"line":7969},[105,88012,2520],{"class":115},[105,88014,88015],{"class":107,"line":7975},[105,88016,52383],{"class":115},[105,88018,88019],{"class":107,"line":8002},[105,88020,2178],{"class":115},[105,88022,88023,88026,88029],{"class":107,"line":8007},[105,88024,88025],{"class":1954},"    deepCopy",[105,88027,88028],{"class":115},"(o, obj) ",[105,88030,88031],{"class":174},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[105,88033,88034,88036,88038],{"class":107,"line":8013},[105,88035,73738],{"class":115},[105,88037,58232],{"class":1954},[105,88039,88040],{"class":115},"(o)\n",[105,88042,88043,88046,88048],{"class":107,"line":8025},[105,88044,88045],{"class":115},"    o.age ",[105,88047,161],{"class":111},[105,88049,88050],{"class":164}," 20\n",[105,88052,88053,88056,88058,88060,88062],{"class":107,"line":8037},[105,88054,88055],{"class":115},"    o.hobby[",[105,88057,307],{"class":164},[105,88059,4434],{"class":115},[105,88061,161],{"class":111},[105,88063,88064],{"class":220}," '篮球'\n",[105,88066,88067,88070,88072],{"class":107,"line":8049},[105,88068,88069],{"class":115},"    o.family ",[105,88071,161],{"class":111},[105,88073,88074],{"class":220}," '老pink'\n",[105,88076,88077,88079,88081],{"class":107,"line":9708},[105,88078,73738],{"class":115},[105,88080,58232],{"class":1954},[105,88082,70021],{"class":115},[105,88084,88085,88087,88089],{"class":107,"line":9733},[105,88086,52402],{"class":115},[105,88088,51798],{"class":51285},[105,88090,51292],{"class":115},[105,88092,88093,88095,88097],{"class":107,"line":9756},[105,88094,51770],{"class":115},[105,88096,51785],{"class":51285},[105,88098,51292],{"class":115},[105,88100,88101],{"class":107,"line":9780},[105,88102,2391],{"emptyLinePlaceholder":32},[105,88104,88105,88107,88109],{"class":107,"line":9785},[105,88106,51770],{"class":115},[105,88108,50620],{"class":51285},[105,88110,51292],{"class":115},[14,88112,88113],{},[20,88114],{"alt":22,"src":88115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21990,88117,88119,88120],{"id":88118},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[265,88121,88122],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88124,88125],{},[354,88126,88127],{"href":88127,"rel":88128},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23858],[14,88130,88131],{},"lodash里边的方法都要加上一个下划线_",[14,88133,88134],{},"_.cloneDeep()",[96,88136,88138],{"className":50618,"code":88137,"language":50620,"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",[102,88139,88140,88150,88164,88168,88176,88190,88210,88222,88230,88234,88242,88247,88266,88274,88284,88292,88300,88312,88316,88322,88326,88330,88346,88354,88363,88371,88379,88387,88391],{"__ignoreMap":22},[105,88141,88142,88144,88146,88148],{"class":107,"line":108},[105,88143,51282],{"class":115},[105,88145,51286],{"class":51285},[105,88147,51289],{"class":1954},[105,88149,51292],{"class":115},[105,88151,88152,88154,88156,88158,88160,88162],{"class":107,"line":28},[105,88153,1026],{"class":115},[105,88155,50620],{"class":51285},[105,88157,51301],{"class":1954},[105,88159,161],{"class":115},[105,88161,51306],{"class":220},[105,88163,51292],{"class":115},[105,88165,88166],{"class":107,"line":1171},[105,88167,2391],{"emptyLinePlaceholder":32},[105,88169,88170,88172,88174],{"class":107,"line":1186},[105,88171,1026],{"class":115},[105,88173,51319],{"class":51285},[105,88175,51292],{"class":115},[105,88177,88178,88180,88182,88184,88186,88188],{"class":107,"line":1192},[105,88179,52129],{"class":115},[105,88181,51329],{"class":51285},[105,88183,51332],{"class":1954},[105,88185,161],{"class":115},[105,88187,51337],{"class":220},[105,88189,51292],{"class":115},[105,88191,88192,88194,88196,88198,88200,88202,88204,88206,88208],{"class":107,"line":1206},[105,88193,52129],{"class":115},[105,88195,51329],{"class":51285},[105,88197,14912],{"class":1954},[105,88199,161],{"class":115},[105,88201,51376],{"class":220},[105,88203,51356],{"class":1954},[105,88205,161],{"class":115},[105,88207,51383],{"class":220},[105,88209,51292],{"class":115},[105,88211,88212,88214,88216,88218,88220],{"class":107,"line":1212},[105,88213,52129],{"class":115},[105,88215,51392],{"class":51285},[105,88217,51395],{"class":115},[105,88219,51392],{"class":51285},[105,88221,51292],{"class":115},[105,88223,88224,88226,88228],{"class":107,"line":1303},[105,88225,51770],{"class":115},[105,88227,51319],{"class":51285},[105,88229,51292],{"class":115},[105,88231,88232],{"class":107,"line":1309},[105,88233,2391],{"emptyLinePlaceholder":32},[105,88235,88236,88238,88240],{"class":107,"line":1321},[105,88237,1026],{"class":115},[105,88239,51785],{"class":51285},[105,88241,51292],{"class":115},[105,88243,88244],{"class":107,"line":1603},[105,88245,88246],{"class":174},"  \u003C!-- 先引用这个库 -->\n",[105,88248,88249,88251,88253,88255,88257,88260,88262,88264],{"class":107,"line":1608},[105,88250,52129],{"class":115},[105,88252,51798],{"class":51285},[105,88254,55224],{"class":1954},[105,88256,161],{"class":115},[105,88258,88259],{"class":220},"\"lodash.min.js\"",[105,88261,55299],{"class":115},[105,88263,51798],{"class":51285},[105,88265,51292],{"class":115},[105,88267,88268,88270,88272],{"class":107,"line":1614},[105,88269,52129],{"class":115},[105,88271,51798],{"class":51285},[105,88273,51292],{"class":115},[105,88275,88276,88278,88280,88282],{"class":107,"line":1619},[105,88277,11213],{"class":111},[105,88279,69956],{"class":164},[105,88281,13556],{"class":111},[105,88283,15564],{"class":115},[105,88285,88286,88288,88290],{"class":107,"line":1633},[105,88287,71601],{"class":115},[105,88289,87795],{"class":220},[105,88291,31451],{"class":115},[105,88293,88294,88296,88298],{"class":107,"line":1638},[105,88295,71611],{"class":115},[105,88297,766],{"class":164},[105,88299,31451],{"class":115},[105,88301,88302,88304,88306,88308,88310],{"class":107,"line":1644},[105,88303,87810],{"class":115},[105,88305,87813],{"class":220},[105,88307,12427],{"class":115},[105,88309,87818],{"class":220},[105,88311,87821],{"class":115},[105,88313,88314],{"class":107,"line":1665},[105,88315,77857],{"class":115},[105,88317,88318,88320],{"class":107,"line":1670},[105,88319,87830],{"class":115},[105,88321,87833],{"class":220},[105,88323,88324],{"class":107,"line":1684},[105,88325,52383],{"class":115},[105,88327,88328],{"class":107,"line":1689},[105,88329,2178],{"class":115},[105,88331,88332,88334,88336,88338,88341,88344],{"class":107,"line":1718},[105,88333,11213],{"class":111},[105,88335,87848],{"class":164},[105,88337,13556],{"class":111},[105,88339,88340],{"class":115}," _.",[105,88342,88343],{"class":1954},"cloneDeep",[105,88345,70021],{"class":115},[105,88347,88348,88350,88352],{"class":107,"line":1723},[105,88349,73738],{"class":115},[105,88351,58232],{"class":1954},[105,88353,88040],{"class":115},[105,88355,88356,88359,88361],{"class":107,"line":1740},[105,88357,88358],{"class":115},"    o.family.baby ",[105,88360,161],{"class":111},[105,88362,88074],{"class":220},[105,88364,88365,88367,88369],{"class":107,"line":1745},[105,88366,73738],{"class":115},[105,88368,58232],{"class":1954},[105,88370,70021],{"class":115},[105,88372,88373,88375,88377],{"class":107,"line":1750},[105,88374,52402],{"class":115},[105,88376,51798],{"class":51285},[105,88378,51292],{"class":115},[105,88380,88381,88383,88385],{"class":107,"line":1755},[105,88382,51770],{"class":115},[105,88384,51785],{"class":51285},[105,88386,51292],{"class":115},[105,88388,88389],{"class":107,"line":1769},[105,88390,2391],{"emptyLinePlaceholder":32},[105,88392,88393,88395,88397],{"class":107,"line":1774},[105,88394,51770],{"class":115},[105,88396,50620],{"class":51285},[105,88398,51292],{"class":115},[14,88400,88401],{},[20,88402],{"alt":22,"src":88403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21990,88405,88407],{"id":88406},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[96,88409,88411],{"className":50618,"code":88410,"language":50620,"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",[102,88412,88413,88423,88437,88441,88449,88463,88483,88495,88503,88507,88515,88523,88533,88541,88549,88561,88565,88571,88575,88579,88584,88589,88594,88620,88628,88637,88645,88653,88661,88665],{"__ignoreMap":22},[105,88414,88415,88417,88419,88421],{"class":107,"line":108},[105,88416,51282],{"class":115},[105,88418,51286],{"class":51285},[105,88420,51289],{"class":1954},[105,88422,51292],{"class":115},[105,88424,88425,88427,88429,88431,88433,88435],{"class":107,"line":28},[105,88426,1026],{"class":115},[105,88428,50620],{"class":51285},[105,88430,51301],{"class":1954},[105,88432,161],{"class":115},[105,88434,51306],{"class":220},[105,88436,51292],{"class":115},[105,88438,88439],{"class":107,"line":1171},[105,88440,2391],{"emptyLinePlaceholder":32},[105,88442,88443,88445,88447],{"class":107,"line":1186},[105,88444,1026],{"class":115},[105,88446,51319],{"class":51285},[105,88448,51292],{"class":115},[105,88450,88451,88453,88455,88457,88459,88461],{"class":107,"line":1192},[105,88452,52129],{"class":115},[105,88454,51329],{"class":51285},[105,88456,51332],{"class":1954},[105,88458,161],{"class":115},[105,88460,51337],{"class":220},[105,88462,51292],{"class":115},[105,88464,88465,88467,88469,88471,88473,88475,88477,88479,88481],{"class":107,"line":1206},[105,88466,52129],{"class":115},[105,88468,51329],{"class":51285},[105,88470,14912],{"class":1954},[105,88472,161],{"class":115},[105,88474,51376],{"class":220},[105,88476,51356],{"class":1954},[105,88478,161],{"class":115},[105,88480,51383],{"class":220},[105,88482,51292],{"class":115},[105,88484,88485,88487,88489,88491,88493],{"class":107,"line":1212},[105,88486,52129],{"class":115},[105,88488,51392],{"class":51285},[105,88490,51395],{"class":115},[105,88492,51392],{"class":51285},[105,88494,51292],{"class":115},[105,88496,88497,88499,88501],{"class":107,"line":1303},[105,88498,51770],{"class":115},[105,88500,51319],{"class":51285},[105,88502,51292],{"class":115},[105,88504,88505],{"class":107,"line":1309},[105,88506,2391],{"emptyLinePlaceholder":32},[105,88508,88509,88511,88513],{"class":107,"line":1321},[105,88510,1026],{"class":115},[105,88512,51785],{"class":51285},[105,88514,51292],{"class":115},[105,88516,88517,88519,88521],{"class":107,"line":1603},[105,88518,52129],{"class":115},[105,88520,51798],{"class":51285},[105,88522,51292],{"class":115},[105,88524,88525,88527,88529,88531],{"class":107,"line":1608},[105,88526,11213],{"class":111},[105,88528,69956],{"class":164},[105,88530,13556],{"class":111},[105,88532,15564],{"class":115},[105,88534,88535,88537,88539],{"class":107,"line":1614},[105,88536,71601],{"class":115},[105,88538,87795],{"class":220},[105,88540,31451],{"class":115},[105,88542,88543,88545,88547],{"class":107,"line":1619},[105,88544,71611],{"class":115},[105,88546,766],{"class":164},[105,88548,31451],{"class":115},[105,88550,88551,88553,88555,88557,88559],{"class":107,"line":1633},[105,88552,87810],{"class":115},[105,88554,87813],{"class":220},[105,88556,12427],{"class":115},[105,88558,87818],{"class":220},[105,88560,87821],{"class":115},[105,88562,88563],{"class":107,"line":1638},[105,88564,77857],{"class":115},[105,88566,88567,88569],{"class":107,"line":1644},[105,88568,87830],{"class":115},[105,88570,87833],{"class":220},[105,88572,88573],{"class":107,"line":1665},[105,88574,52383],{"class":115},[105,88576,88577],{"class":107,"line":1670},[105,88578,2178],{"class":115},[105,88580,88581],{"class":107,"line":1684},[105,88582,88583],{"class":174},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[105,88585,88586],{"class":107,"line":1689},[105,88587,88588],{"class":174},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[105,88590,88591],{"class":107,"line":1718},[105,88592,88593],{"class":174},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[105,88595,88596,88598,88600,88602,88605,88607,88610,88612,88614,88616,88618],{"class":107,"line":1723},[105,88597,11213],{"class":111},[105,88599,87848],{"class":164},[105,88601,13556],{"class":111},[105,88603,88604],{"class":164}," JSON",[105,88606,674],{"class":115},[105,88608,88609],{"class":1954},"parse",[105,88611,116],{"class":115},[105,88613,71649],{"class":164},[105,88615,674],{"class":115},[105,88617,71654],{"class":1954},[105,88619,71657],{"class":115},[105,88621,88622,88624,88626],{"class":107,"line":1740},[105,88623,73738],{"class":115},[105,88625,58232],{"class":1954},[105,88627,88040],{"class":115},[105,88629,88630,88632,88634],{"class":107,"line":1745},[105,88631,88358],{"class":115},[105,88633,161],{"class":111},[105,88635,88636],{"class":220}," '123'\n",[105,88638,88639,88641,88643],{"class":107,"line":1750},[105,88640,73738],{"class":115},[105,88642,58232],{"class":1954},[105,88644,70021],{"class":115},[105,88646,88647,88649,88651],{"class":107,"line":1755},[105,88648,52402],{"class":115},[105,88650,51798],{"class":51285},[105,88652,51292],{"class":115},[105,88654,88655,88657,88659],{"class":107,"line":1769},[105,88656,51770],{"class":115},[105,88658,51785],{"class":51285},[105,88660,51292],{"class":115},[105,88662,88663],{"class":107,"line":1774},[105,88664,2391],{"emptyLinePlaceholder":32},[105,88666,88667,88669,88671],{"class":107,"line":2568},[105,88668,51770],{"class":115},[105,88670,50620],{"class":51285},[105,88672,51292],{"class":115},[14,88674,88675],{},[20,88676],{"alt":22,"src":88677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[47,88679,88681],{"id":88680},"_415-异常处理","4.15 异常处理",[59,88683,88684],{},[62,88685,88686],{},"throw抛异常",[14,88688,88689],{},[20,88690],{"alt":22,"src":88691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[59,88693,88694],{"start":28},[62,88695,88696],{},"try\u002Fcatch 捕获错误信息",[14,88698,88699],{},[20,88700],{"alt":22,"src":88701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[96,88703,88705],{"className":50618,"code":88704,"language":50620,"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",[102,88706,88707,88717,88731,88735,88743,88757,88777,88789,88797,88801,88809,88821,88829,88838,88845,88850,88869,88878,88889,88894,88904,88909,88914,88919,88936,88940,88945,88952,88964,88968,88980,88984,88988,88993,88998,89005,89013,89021,89025],{"__ignoreMap":22},[105,88708,88709,88711,88713,88715],{"class":107,"line":108},[105,88710,51282],{"class":115},[105,88712,51286],{"class":51285},[105,88714,51289],{"class":1954},[105,88716,51292],{"class":115},[105,88718,88719,88721,88723,88725,88727,88729],{"class":107,"line":28},[105,88720,1026],{"class":115},[105,88722,50620],{"class":51285},[105,88724,51301],{"class":1954},[105,88726,161],{"class":115},[105,88728,51306],{"class":220},[105,88730,51292],{"class":115},[105,88732,88733],{"class":107,"line":1171},[105,88734,2391],{"emptyLinePlaceholder":32},[105,88736,88737,88739,88741],{"class":107,"line":1186},[105,88738,1026],{"class":115},[105,88740,51319],{"class":51285},[105,88742,51292],{"class":115},[105,88744,88745,88747,88749,88751,88753,88755],{"class":107,"line":1192},[105,88746,52129],{"class":115},[105,88748,51329],{"class":51285},[105,88750,51332],{"class":1954},[105,88752,161],{"class":115},[105,88754,51337],{"class":220},[105,88756,51292],{"class":115},[105,88758,88759,88761,88763,88765,88767,88769,88771,88773,88775],{"class":107,"line":1206},[105,88760,52129],{"class":115},[105,88762,51329],{"class":51285},[105,88764,14912],{"class":1954},[105,88766,161],{"class":115},[105,88768,51376],{"class":220},[105,88770,51356],{"class":1954},[105,88772,161],{"class":115},[105,88774,51383],{"class":220},[105,88776,51292],{"class":115},[105,88778,88779,88781,88783,88785,88787],{"class":107,"line":1212},[105,88780,52129],{"class":115},[105,88782,51392],{"class":51285},[105,88784,51395],{"class":115},[105,88786,51392],{"class":51285},[105,88788,51292],{"class":115},[105,88790,88791,88793,88795],{"class":107,"line":1303},[105,88792,51770],{"class":115},[105,88794,51319],{"class":51285},[105,88796,51292],{"class":115},[105,88798,88799],{"class":107,"line":1309},[105,88800,2391],{"emptyLinePlaceholder":32},[105,88802,88803,88805,88807],{"class":107,"line":1321},[105,88804,1026],{"class":115},[105,88806,51785],{"class":51285},[105,88808,51292],{"class":115},[105,88810,88811,88813,88815,88817,88819],{"class":107,"line":1603},[105,88812,52129],{"class":115},[105,88814,14],{"class":51285},[105,88816,53479],{"class":115},[105,88818,14],{"class":51285},[105,88820,51292],{"class":115},[105,88822,88823,88825,88827],{"class":107,"line":1608},[105,88824,52129],{"class":115},[105,88826,51798],{"class":51285},[105,88828,51292],{"class":115},[105,88830,88831,88833,88836],{"class":107,"line":1614},[105,88832,70069],{"class":111},[105,88834,88835],{"class":1954}," fn",[105,88837,10845],{"class":115},[105,88839,88840,88843],{"class":107,"line":1619},[105,88841,88842],{"class":111},"      try",[105,88844,15564],{"class":115},[105,88846,88847],{"class":107,"line":1633},[105,88848,88849],{"class":174},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[105,88851,88852,88854,88856,88858,88860,88862,88864,88867],{"class":107,"line":1638},[105,88853,61255],{"class":111},[105,88855,6817],{"class":164},[105,88857,13556],{"class":111},[105,88859,54381],{"class":115},[105,88861,54384],{"class":1954},[105,88863,116],{"class":115},[105,88865,88866],{"class":220},"'.p'",[105,88868,122],{"class":115},[105,88870,88871,88874,88876],{"class":107,"line":1644},[105,88872,88873],{"class":115},"        p.style.color ",[105,88875,161],{"class":111},[105,88877,67036],{"class":220},[105,88879,88880,88883,88886],{"class":107,"line":1665},[105,88881,88882],{"class":115},"      } ",[105,88884,88885],{"class":111},"catch",[105,88887,88888],{"class":115}," (err) {\n",[105,88890,88891],{"class":107,"line":1670},[105,88892,88893],{"class":174},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[105,88895,88896,88899,88901],{"class":107,"line":1684},[105,88897,88898],{"class":115},"        console.",[105,88900,58232],{"class":1954},[105,88902,88903],{"class":115},"(err.message)\n",[105,88905,88906],{"class":107,"line":1689},[105,88907,88908],{"class":174},"        \u002F\u002F 想要中断程序，需要加return\n",[105,88910,88911],{"class":107,"line":1718},[105,88912,88913],{"class":174},"        \u002F\u002F return\n",[105,88915,88916],{"class":107,"line":1723},[105,88917,88918],{"class":174},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[105,88920,88921,88924,88926,88929,88931,88934],{"class":107,"line":1740},[105,88922,88923],{"class":111},"        throw",[105,88925,11570],{"class":111},[105,88927,88928],{"class":1954}," Error",[105,88930,116],{"class":115},[105,88932,88933],{"class":220},"'你看看，选择器错误了吧'",[105,88935,122],{"class":115},[105,88937,88938],{"class":107,"line":1745},[105,88939,52383],{"class":115},[105,88941,88942],{"class":107,"line":1750},[105,88943,88944],{"class":174},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[105,88946,88947,88950],{"class":107,"line":1755},[105,88948,88949],{"class":111},"      finally",[105,88951,15564],{"class":115},[105,88953,88954,88957,88959,88962],{"class":107,"line":1769},[105,88955,88956],{"class":1954},"        alert",[105,88958,116],{"class":115},[105,88960,88961],{"class":220},"'弹出对话框'",[105,88963,122],{"class":115},[105,88965,88966],{"class":107,"line":1774},[105,88967,52383],{"class":115},[105,88969,88970,88972,88974,88976,88978],{"class":107,"line":2568},[105,88971,58229],{"class":115},[105,88973,58232],{"class":1954},[105,88975,116],{"class":115},[105,88977,588],{"class":164},[105,88979,122],{"class":115},[105,88981,88982],{"class":107,"line":2582},[105,88983,2391],{"emptyLinePlaceholder":32},[105,88985,88986],{"class":107,"line":2590},[105,88987,2178],{"class":115},[105,88989,88990],{"class":107,"line":2595},[105,88991,88992],{"class":174},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[105,88994,88995],{"class":107,"line":2601},[105,88996,88997],{"class":174},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[105,88999,89000,89003],{"class":107,"line":2607},[105,89001,89002],{"class":1954},"    fn",[105,89004,1967],{"class":115},[105,89006,89007,89009,89011],{"class":107,"line":2612},[105,89008,52402],{"class":115},[105,89010,51798],{"class":51285},[105,89012,51292],{"class":115},[105,89014,89015,89017,89019],{"class":107,"line":7940},[105,89016,51770],{"class":115},[105,89018,51785],{"class":51285},[105,89020,51292],{"class":115},[105,89022,89023],{"class":107,"line":7964},[105,89024,2391],{"emptyLinePlaceholder":32},[105,89026,89027,89029,89031],{"class":107,"line":7969},[105,89028,51770],{"class":115},[105,89030,50620],{"class":51285},[105,89032,51292],{"class":115},[14,89034,89035],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[59,89037,89038],{"start":1171},[62,89039,89040],{},"debugger",[14,89042,89043],{},[20,89044],{"alt":22,"src":89045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89047,89048],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[47,89050,89052],{"id":89051},"_416-处理this","4.16 处理this",[76,89054,89056],{"id":89055},"_4161-this的指向","4.16.1 this的指向",[59,89058,89059],{},[62,89060,89061],{},"普通函数的this",[14,89063,89064],{},[20,89065],{"alt":22,"src":89066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[59,89068,89069],{"start":28},[62,89070,89071],{},"箭头函数的this",[14,89073,89074],{},[20,89075],{"alt":22,"src":89076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89078,89079],{},[20,89080],{"alt":22,"src":89081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89083,89084],{},[20,89085],{"alt":22,"src":89086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[76,89088,89090],{"id":89089},"_4162-this的改变","4.16.2 this的改变",[14,89092,89093],{},"call() apply() bind()",[59,89095,89096],{},[62,89097,89098],{},"call()",[14,89100,89101],{},[20,89102],{"alt":22,"src":89103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89105,89106],{},"两个作用：①调用函数；②改变this指向",[96,89108,89110],{"className":53052,"code":89109,"language":53054,"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",[102,89111,89112,89120,89128,89132,89137,89141,89146,89151,89156,89160,89165,89173],{"__ignoreMap":22},[105,89113,89114,89116,89118],{"class":107,"line":108},[105,89115,1026],{"class":115},[105,89117,51785],{"class":51285},[105,89119,51292],{"class":115},[105,89121,89122,89124,89126],{"class":107,"line":28},[105,89123,52129],{"class":115},[105,89125,51798],{"class":51285},[105,89127,51292],{"class":115},[105,89129,89130],{"class":107,"line":1171},[105,89131,71508],{"class":115},[105,89133,89134],{"class":107,"line":1186},[105,89135,89136],{"class":115},"      uname: 'pink'\n",[105,89138,89139],{"class":107,"line":1192},[105,89140,2178],{"class":115},[105,89142,89143],{"class":107,"line":1206},[105,89144,89145],{"class":115},"    function fn(x, y) {\n",[105,89147,89148],{"class":107,"line":1212},[105,89149,89150],{"class":115},"      console.log(this)  \u002F\u002Fwindow\n",[105,89152,89153],{"class":107,"line":1303},[105,89154,89155],{"class":115},"      console.log(x + y)\n",[105,89157,89158],{"class":107,"line":1309},[105,89159,2178],{"class":115},[105,89161,89162],{"class":107,"line":1321},[105,89163,89164],{"class":115},"    fn.call(obj, 1, 2)\n",[105,89166,89167,89169,89171],{"class":107,"line":1603},[105,89168,52402],{"class":115},[105,89170,51798],{"class":51285},[105,89172,51292],{"class":115},[105,89174,89175,89177,89179],{"class":107,"line":1608},[105,89176,51770],{"class":115},[105,89178,51785],{"class":51285},[105,89180,51292],{"class":115},[14,89182,89183],{},[20,89184],{"alt":22,"src":89185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[59,89187,89188],{"start":28},[62,89189,89190],{},"apply()",[14,89192,89193],{},[20,89194],{"alt":22,"src":89195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89197,89106],{},[14,89199,89200],{},"call传递的是普通参数，而apply必须传递的是数组",[96,89202,89204],{"className":50618,"code":89203,"language":50620,"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",[102,89205,89206,89216,89230,89234,89242,89256,89276,89288,89296,89300,89308,89316,89326,89333,89337,89342,89358,89370,89384,89388,89393,89412,89417,89421,89426,89431,89439,89444,89466,89471,89487,89503,89515,89519,89524,89543,89551,89559,89563],{"__ignoreMap":22},[105,89207,89208,89210,89212,89214],{"class":107,"line":108},[105,89209,51282],{"class":115},[105,89211,51286],{"class":51285},[105,89213,51289],{"class":1954},[105,89215,51292],{"class":115},[105,89217,89218,89220,89222,89224,89226,89228],{"class":107,"line":28},[105,89219,1026],{"class":115},[105,89221,50620],{"class":51285},[105,89223,51301],{"class":1954},[105,89225,161],{"class":115},[105,89227,51306],{"class":220},[105,89229,51292],{"class":115},[105,89231,89232],{"class":107,"line":1171},[105,89233,2391],{"emptyLinePlaceholder":32},[105,89235,89236,89238,89240],{"class":107,"line":1186},[105,89237,1026],{"class":115},[105,89239,51319],{"class":51285},[105,89241,51292],{"class":115},[105,89243,89244,89246,89248,89250,89252,89254],{"class":107,"line":1192},[105,89245,52129],{"class":115},[105,89247,51329],{"class":51285},[105,89249,51332],{"class":1954},[105,89251,161],{"class":115},[105,89253,51337],{"class":220},[105,89255,51292],{"class":115},[105,89257,89258,89260,89262,89264,89266,89268,89270,89272,89274],{"class":107,"line":1206},[105,89259,52129],{"class":115},[105,89261,51329],{"class":51285},[105,89263,14912],{"class":1954},[105,89265,161],{"class":115},[105,89267,51376],{"class":220},[105,89269,51356],{"class":1954},[105,89271,161],{"class":115},[105,89273,51383],{"class":220},[105,89275,51292],{"class":115},[105,89277,89278,89280,89282,89284,89286],{"class":107,"line":1212},[105,89279,52129],{"class":115},[105,89281,51392],{"class":51285},[105,89283,51395],{"class":115},[105,89285,51392],{"class":51285},[105,89287,51292],{"class":115},[105,89289,89290,89292,89294],{"class":107,"line":1303},[105,89291,51770],{"class":115},[105,89293,51319],{"class":51285},[105,89295,51292],{"class":115},[105,89297,89298],{"class":107,"line":1309},[105,89299,2391],{"emptyLinePlaceholder":32},[105,89301,89302,89304,89306],{"class":107,"line":1321},[105,89303,1026],{"class":115},[105,89305,51785],{"class":51285},[105,89307,51292],{"class":115},[105,89309,89310,89312,89314],{"class":107,"line":1603},[105,89311,52129],{"class":115},[105,89313,51798],{"class":51285},[105,89315,51292],{"class":115},[105,89317,89318,89320,89322,89324],{"class":107,"line":1608},[105,89319,11213],{"class":111},[105,89321,69956],{"class":164},[105,89323,13556],{"class":111},[105,89325,15564],{"class":115},[105,89327,89328,89330],{"class":107,"line":1614},[105,89329,71611],{"class":115},[105,89331,89332],{"class":164},"18\n",[105,89334,89335],{"class":107,"line":1619},[105,89336,2178],{"class":115},[105,89338,89339],{"class":107,"line":1633},[105,89340,89341],{"class":174},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[105,89343,89344,89346,89348,89350,89352,89354,89356],{"class":107,"line":1638},[105,89345,70069],{"class":111},[105,89347,88835],{"class":1954},[105,89349,116],{"class":115},[105,89351,936],{"class":5208},[105,89353,12427],{"class":115},[105,89355,961],{"class":5208},[105,89357,12434],{"class":115},[105,89359,89360,89362,89364,89366,89368],{"class":107,"line":1644},[105,89361,58229],{"class":115},[105,89363,58232],{"class":1954},[105,89365,116],{"class":115},[105,89367,86978],{"class":164},[105,89369,122],{"class":115},[105,89371,89372,89374,89376,89379,89381],{"class":107,"line":1665},[105,89373,58229],{"class":115},[105,89375,58232],{"class":1954},[105,89377,89378],{"class":115},"(x ",[105,89380,597],{"class":111},[105,89382,89383],{"class":115}," y)\n",[105,89385,89386],{"class":107,"line":1670},[105,89387,2178],{"class":115},[105,89389,89390],{"class":107,"line":1684},[105,89391,89392],{"class":174},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[105,89394,89395,89398,89401,89404,89406,89408,89410],{"class":107,"line":1689},[105,89396,89397],{"class":115},"    fn.",[105,89399,89400],{"class":1954},"apply",[105,89402,89403],{"class":115},"(obj, [",[105,89405,333],{"class":164},[105,89407,12427],{"class":115},[105,89409,193],{"class":164},[105,89411,4648],{"class":115},[105,89413,89414],{"class":107,"line":1718},[105,89415,89416],{"class":174},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[105,89418,89419],{"class":107,"line":1723},[105,89420,2391],{"emptyLinePlaceholder":32},[105,89422,89423],{"class":107,"line":1740},[105,89424,89425],{"class":174},"    \u002F\u002F 使用场景：求数组最大值\n",[105,89427,89428],{"class":107,"line":1745},[105,89429,89430],{"class":174},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[105,89432,89433,89436],{"class":107,"line":1750},[105,89434,89435],{"class":174},"    \u002F\u002F console.log(max)",[105,89437,89438],{"class":174},"   \u002F\u002F3\n",[105,89440,89441],{"class":107,"line":1755},[105,89442,89443],{"class":174},"    \u002F\u002F 指向空或者Math都是可以的\n",[105,89445,89446,89448,89450,89452,89454,89456,89458,89460,89462,89464],{"class":107,"line":1769},[105,89447,11213],{"class":111},[105,89449,57680],{"class":164},[105,89451,13556],{"class":111},[105,89453,52211],{"class":115},[105,89455,427],{"class":164},[105,89457,12427],{"class":115},[105,89459,620],{"class":164},[105,89461,12427],{"class":115},[105,89463,651],{"class":164},[105,89465,33231],{"class":115},[105,89467,89468],{"class":107,"line":1774},[105,89469,89470],{"class":174},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[105,89472,89473,89475,89477,89479,89482,89484],{"class":107,"line":2568},[105,89474,11213],{"class":111},[105,89476,5943],{"class":164},[105,89478,13556],{"class":111},[105,89480,89481],{"class":115}," Math.max.",[105,89483,89400],{"class":1954},[105,89485,89486],{"class":115},"(Math, arr)\n",[105,89488,89489,89491,89494,89496,89499,89501],{"class":107,"line":2582},[105,89490,11213],{"class":111},[105,89492,89493],{"class":164}," min",[105,89495,13556],{"class":111},[105,89497,89498],{"class":115}," Math.min.",[105,89500,89400],{"class":1954},[105,89502,89486],{"class":115},[105,89504,89505,89507,89509,89512],{"class":107,"line":2590},[105,89506,73738],{"class":115},[105,89508,58232],{"class":1954},[105,89510,89511],{"class":115},"(max, min)     ",[105,89513,89514],{"class":174},"\u002F\u002F100,4\n",[105,89516,89517],{"class":107,"line":2595},[105,89518,2391],{"emptyLinePlaceholder":32},[105,89520,89521],{"class":107,"line":2601},[105,89522,89523],{"class":174},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[105,89525,89526,89528,89530,89533,89535,89537,89540],{"class":107,"line":2607},[105,89527,73738],{"class":115},[105,89529,58232],{"class":1954},[105,89531,89532],{"class":115},"(Max.",[105,89534,6007],{"class":1954},[105,89536,116],{"class":115},[105,89538,89539],{"class":111},"...",[105,89541,89542],{"class":115},"arr))\n",[105,89544,89545,89547,89549],{"class":107,"line":2612},[105,89546,52402],{"class":115},[105,89548,51798],{"class":51285},[105,89550,51292],{"class":115},[105,89552,89553,89555,89557],{"class":107,"line":7940},[105,89554,51770],{"class":115},[105,89556,51785],{"class":51285},[105,89558,51292],{"class":115},[105,89560,89561],{"class":107,"line":7964},[105,89562,2391],{"emptyLinePlaceholder":32},[105,89564,89565,89567,89569],{"class":107,"line":7969},[105,89566,51770],{"class":115},[105,89568,50620],{"class":51285},[105,89570,51292],{"class":115},[14,89572,89573],{},[20,89574],{"alt":22,"src":89575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[59,89577,89578],{"start":1171},[62,89579,89580],{},"bind()",[14,89582,89583],{},[20,89584],{"alt":22,"src":89585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89587,89588],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89590,89591],{},"bind的语法跟call很相似",[96,89593,89595],{"className":53052,"code":89594,"language":53054,"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",[102,89596,89597,89605,89613,89617,89622,89626,89630,89635,89639,89644,89649,89654,89659,89664,89669,89674,89678,89686],{"__ignoreMap":22},[105,89598,89599,89601,89603],{"class":107,"line":108},[105,89600,1026],{"class":115},[105,89602,51785],{"class":51285},[105,89604,51292],{"class":115},[105,89606,89607,89609,89611],{"class":107,"line":28},[105,89608,52129],{"class":115},[105,89610,51798],{"class":51285},[105,89612,51292],{"class":115},[105,89614,89615],{"class":107,"line":1171},[105,89616,71508],{"class":115},[105,89618,89619],{"class":107,"line":1186},[105,89620,89621],{"class":115},"      age: 18\n",[105,89623,89624],{"class":107,"line":1192},[105,89625,2178],{"class":115},[105,89627,89628],{"class":107,"line":1206},[105,89629,77128],{"class":115},[105,89631,89632],{"class":107,"line":1212},[105,89633,89634],{"class":115},"      console.log(this)\n",[105,89636,89637],{"class":107,"line":1303},[105,89638,2178],{"class":115},[105,89640,89641],{"class":107,"line":1309},[105,89642,89643],{"class":115},"    \u002F\u002F 1.bind 不会调用函数\n",[105,89645,89646],{"class":107,"line":1321},[105,89647,89648],{"class":115},"    \u002F\u002F 2.bind能改变this的指向\n",[105,89650,89651],{"class":107,"line":1603},[105,89652,89653],{"class":115},"    fn.bind()\n",[105,89655,89656],{"class":107,"line":1608},[105,89657,89658],{"class":115},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[105,89660,89661],{"class":107,"line":1614},[105,89662,89663],{"class":115},"    const fun = fn.bind(obj)\n",[105,89665,89666],{"class":107,"line":1619},[105,89667,89668],{"class":115},"    \u002F\u002F console.log(fun)\n",[105,89670,89671],{"class":107,"line":1633},[105,89672,89673],{"class":115},"    \u002F\u002F 调用,查看this的指向\n",[105,89675,89676],{"class":107,"line":1638},[105,89677,52636],{"class":115},[105,89679,89680,89682,89684],{"class":107,"line":1644},[105,89681,52402],{"class":115},[105,89683,51798],{"class":51285},[105,89685,51292],{"class":115},[105,89687,89688,89690,89692],{"class":107,"line":1665},[105,89689,51770],{"class":115},[105,89691,51785],{"class":51285},[105,89693,51292],{"class":115},[14,89695,89696],{},[20,89697],{"alt":22,"src":89698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[59,89700,89701],{"start":1186},[62,89702,89703],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[96,89705,89707],{"className":53052,"code":89706,"language":53054,"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",[102,89708,89709,89717,89730,89738,89743,89747,89752,89757,89762,89767,89772,89777,89782,89787,89791,89799],{"__ignoreMap":22},[105,89710,89711,89713,89715],{"class":107,"line":108},[105,89712,1026],{"class":115},[105,89714,51785],{"class":51285},[105,89716,51292],{"class":115},[105,89718,89719,89721,89723,89726,89728],{"class":107,"line":28},[105,89720,52129],{"class":115},[105,89722,53872],{"class":51285},[105,89724,89725],{"class":115},">禁用\u003C\u002F",[105,89727,53872],{"class":51285},[105,89729,51292],{"class":115},[105,89731,89732,89734,89736],{"class":107,"line":1171},[105,89733,52129],{"class":115},[105,89735,51798],{"class":51285},[105,89737,51292],{"class":115},[105,89739,89740],{"class":107,"line":1186},[105,89741,89742],{"class":115},"    const btn = document.querySelector('button')\n",[105,89744,89745],{"class":107,"line":1192},[105,89746,59001],{"class":115},[105,89748,89749],{"class":107,"line":1206},[105,89750,89751],{"class":115},"      this.disabled = true\n",[105,89753,89754],{"class":107,"line":1212},[105,89755,89756],{"class":115},"      \u002F\u002F 定时器是window进行调用的\n",[105,89758,89759],{"class":107,"line":1303},[105,89760,89761],{"class":115},"      setTimeout(function () {\n",[105,89763,89764],{"class":107,"line":1309},[105,89765,89766],{"class":115},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[105,89768,89769],{"class":107,"line":1321},[105,89770,89771],{"class":115},"        this.disabled = false\n",[105,89773,89774],{"class":107,"line":1603},[105,89775,89776],{"class":115},"      }.bind(this), 2000)\n",[105,89778,89779],{"class":107,"line":1608},[105,89780,89781],{"class":115},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[105,89783,89784],{"class":107,"line":1614},[105,89785,89786],{"class":115},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[105,89788,89789],{"class":107,"line":1619},[105,89790,33446],{"class":115},[105,89792,89793,89795,89797],{"class":107,"line":1633},[105,89794,52402],{"class":115},[105,89796,51798],{"class":51285},[105,89798,51292],{"class":115},[105,89800,89801,89803,89805],{"class":107,"line":1638},[105,89802,51770],{"class":115},[105,89804,51785],{"class":51285},[105,89806,51292],{"class":115},[59,89808,89809],{"start":1192},[62,89810,21945],{},[14,89812,89813],{},[20,89814],{"alt":22,"src":89815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[47,89817,89819],{"id":89818},"_417-性能优化","4.17 性能优化",[76,89821,89823],{"id":89822},"_4171-防抖","4.17.1 防抖",[14,89825,89826],{},[20,89827],{"alt":22,"src":89828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89830,89831],{},[265,89832,89833],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89835,89836],{},"防抖实现方式：",[1123,89838,89839],{},[62,89840,89841],{},"lodash 提供了防抖处理",[14,89843,89844],{},"_.debounce(func,[wait=0],[options={}])",[14,89846,89847],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[96,89849,89851],{"className":50618,"code":89850,"language":50620,"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",[102,89852,89853,89863,89877,89881,89889,89903,89923,89935,89943,89949,89959,89971,89983,89994,90006,90016,90026,90039,90043,90051,90059,90063,90071,90089,90107,90115,90134,90144,90153,90164,90169,90173,90178,90183,90188,90213,90221,90229,90233],{"__ignoreMap":22},[105,89854,89855,89857,89859,89861],{"class":107,"line":108},[105,89856,51282],{"class":115},[105,89858,51286],{"class":51285},[105,89860,51289],{"class":1954},[105,89862,51292],{"class":115},[105,89864,89865,89867,89869,89871,89873,89875],{"class":107,"line":28},[105,89866,1026],{"class":115},[105,89868,50620],{"class":51285},[105,89870,51301],{"class":1954},[105,89872,161],{"class":115},[105,89874,51306],{"class":220},[105,89876,51292],{"class":115},[105,89878,89879],{"class":107,"line":1171},[105,89880,2391],{"emptyLinePlaceholder":32},[105,89882,89883,89885,89887],{"class":107,"line":1186},[105,89884,1026],{"class":115},[105,89886,51319],{"class":51285},[105,89888,51292],{"class":115},[105,89890,89891,89893,89895,89897,89899,89901],{"class":107,"line":1192},[105,89892,52129],{"class":115},[105,89894,51329],{"class":51285},[105,89896,51332],{"class":1954},[105,89898,161],{"class":115},[105,89900,51337],{"class":220},[105,89902,51292],{"class":115},[105,89904,89905,89907,89909,89911,89913,89915,89917,89919,89921],{"class":107,"line":1206},[105,89906,52129],{"class":115},[105,89908,51329],{"class":51285},[105,89910,14912],{"class":1954},[105,89912,161],{"class":115},[105,89914,51376],{"class":220},[105,89916,51356],{"class":1954},[105,89918,161],{"class":115},[105,89920,51383],{"class":220},[105,89922,51292],{"class":115},[105,89924,89925,89927,89929,89931,89933],{"class":107,"line":1212},[105,89926,52129],{"class":115},[105,89928,51392],{"class":51285},[105,89930,51395],{"class":115},[105,89932,51392],{"class":51285},[105,89934,51292],{"class":115},[105,89936,89937,89939,89941],{"class":107,"line":1303},[105,89938,52129],{"class":115},[105,89940,5118],{"class":51285},[105,89942,51292],{"class":115},[105,89944,89945,89947],{"class":107,"line":1309},[105,89946,54737],{"class":1954},[105,89948,15564],{"class":115},[105,89950,89951,89953,89955,89957],{"class":107,"line":1321},[105,89952,72581],{"class":164},[105,89954,51422],{"class":115},[105,89956,60490],{"class":164},[105,89958,1282],{"class":115},[105,89960,89961,89963,89965,89967,89969],{"class":107,"line":1603},[105,89962,54756],{"class":164},[105,89964,51422],{"class":115},[105,89966,1713],{"class":164},[105,89968,51477],{"class":111},[105,89970,1282],{"class":115},[105,89972,89973,89975,89977,89979,89981],{"class":107,"line":1608},[105,89974,54770],{"class":164},[105,89976,51422],{"class":115},[105,89978,1713],{"class":164},[105,89980,51477],{"class":111},[105,89982,1282],{"class":115},[105,89984,89985,89987,89989,89992],{"class":107,"line":1614},[105,89986,54869],{"class":164},[105,89988,51422],{"class":115},[105,89990,89991],{"class":164},"gray",[105,89993,1282],{"class":115},[105,89995,89996,89998,90000,90002,90004],{"class":107,"line":1619},[105,89997,54907],{"class":164},[105,89999,51422],{"class":115},[105,90001,941],{"class":164},[105,90003,51477],{"class":111},[105,90005,1282],{"class":115},[105,90007,90008,90010,90012,90014],{"class":107,"line":1633},[105,90009,57401],{"class":164},[105,90011,51422],{"class":115},[105,90013,60827],{"class":164},[105,90015,1282],{"class":115},[105,90017,90018,90020,90022,90024],{"class":107,"line":1638},[105,90019,57271],{"class":164},[105,90021,51422],{"class":115},[105,90023,51577],{"class":164},[105,90025,1282],{"class":115},[105,90027,90028,90031,90033,90035,90037],{"class":107,"line":1644},[105,90029,90030],{"class":164},"      padding-top",[105,90032,51422],{"class":115},[105,90034,435],{"class":164},[105,90036,51477],{"class":111},[105,90038,1282],{"class":115},[105,90040,90041],{"class":107,"line":1665},[105,90042,2178],{"class":115},[105,90044,90045,90047,90049],{"class":107,"line":1670},[105,90046,52402],{"class":115},[105,90048,5118],{"class":51285},[105,90050,51292],{"class":115},[105,90052,90053,90055,90057],{"class":107,"line":1684},[105,90054,51770],{"class":115},[105,90056,51319],{"class":51285},[105,90058,51292],{"class":115},[105,90060,90061],{"class":107,"line":1689},[105,90062,2391],{"emptyLinePlaceholder":32},[105,90064,90065,90067,90069],{"class":107,"line":1718},[105,90066,1026],{"class":115},[105,90068,51785],{"class":51285},[105,90070,51292],{"class":115},[105,90072,90073,90075,90077,90079,90081,90083,90085,90087],{"class":107,"line":1723},[105,90074,52129],{"class":115},[105,90076,51596],{"class":51285},[105,90078,53471],{"class":1954},[105,90080,161],{"class":115},[105,90082,53476],{"class":220},[105,90084,55299],{"class":115},[105,90086,51596],{"class":51285},[105,90088,51292],{"class":115},[105,90090,90091,90093,90095,90097,90099,90101,90103,90105],{"class":107,"line":1740},[105,90092,52129],{"class":115},[105,90094,51798],{"class":51285},[105,90096,55224],{"class":1954},[105,90098,161],{"class":115},[105,90100,88259],{"class":220},[105,90102,55299],{"class":115},[105,90104,51798],{"class":51285},[105,90106,51292],{"class":115},[105,90108,90109,90111,90113],{"class":107,"line":1745},[105,90110,52129],{"class":115},[105,90112,51798],{"class":51285},[105,90114,51292],{"class":115},[105,90116,90117,90119,90121,90123,90125,90127,90129,90132],{"class":107,"line":1750},[105,90118,11213],{"class":111},[105,90120,86918],{"class":164},[105,90122,13556],{"class":111},[105,90124,54381],{"class":115},[105,90126,54384],{"class":1954},[105,90128,116],{"class":115},[105,90130,90131],{"class":220},"'.box'",[105,90133,122],{"class":115},[105,90135,90136,90138,90140,90142],{"class":107,"line":1755},[105,90137,52204],{"class":111},[105,90139,9430],{"class":115},[105,90141,161],{"class":111},[105,90143,47318],{"class":164},[105,90145,90146,90148,90151],{"class":107,"line":1769},[105,90147,70069],{"class":111},[105,90149,90150],{"class":1954}," mouseMove",[105,90152,10845],{"class":115},[105,90154,90155,90158,90160,90162],{"class":107,"line":1774},[105,90156,90157],{"class":115},"      box.innerHTML ",[105,90159,161],{"class":111},[105,90161,3023],{"class":115},[105,90163,2693],{"class":111},[105,90165,90166],{"class":107,"line":2568},[105,90167,90168],{"class":174},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[105,90170,90171],{"class":107,"line":2582},[105,90172,2178],{"class":115},[105,90174,90175],{"class":107,"line":2590},[105,90176,90177],{"class":174},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[105,90179,90180],{"class":107,"line":2595},[105,90181,90182],{"class":174},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[105,90184,90185],{"class":107,"line":2601},[105,90186,90187],{"class":174},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[105,90189,90190,90193,90195,90197,90200,90203,90206,90209,90211],{"class":107,"line":2607},[105,90191,90192],{"class":115},"    box.",[105,90194,57798],{"class":1954},[105,90196,116],{"class":115},[105,90198,90199],{"class":220},"'mousemove'",[105,90201,90202],{"class":115},", _.",[105,90204,90205],{"class":1954},"debounce",[105,90207,90208],{"class":115},"(mouseMove, ",[105,90210,65059],{"class":164},[105,90212,30482],{"class":115},[105,90214,90215,90217,90219],{"class":107,"line":2612},[105,90216,52402],{"class":115},[105,90218,51798],{"class":51285},[105,90220,51292],{"class":115},[105,90222,90223,90225,90227],{"class":107,"line":7940},[105,90224,51770],{"class":115},[105,90226,51785],{"class":51285},[105,90228,51292],{"class":115},[105,90230,90231],{"class":107,"line":7964},[105,90232,2391],{"emptyLinePlaceholder":32},[105,90234,90235,90237,90239],{"class":107,"line":7969},[105,90236,51770],{"class":115},[105,90238,50620],{"class":51285},[105,90240,51292],{"class":115},[1123,90242,90243],{},[62,90244,90245],{},"手写一个防抖函数来处理",[14,90247,90248],{},"防抖的核心就是利用定时器来实现的：",[14,90250,90251],{},"①声明一个定时器变量",[14,90253,90254],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90256,90257],{},"③如果没有定时器则开启定时器，记得存到变量里面",[96,90259,90261],{"className":50618,"code":90260,"language":50620,"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",[102,90262,90263,90273,90287,90291,90299,90313,90333,90345,90353,90359,90369,90381,90393,90403,90415,90425,90435,90447,90451,90459,90467,90471,90479,90497,90515,90523,90541,90551,90559,90569,90573,90577,90581,90586,90591,90596,90601,90606,90611,90629,90636,90641,90649,90654,90667,90683,90693,90698,90702,90706,90726,90730,90735,90740,90745,90750,90758,90766,90770],{"__ignoreMap":22},[105,90264,90265,90267,90269,90271],{"class":107,"line":108},[105,90266,51282],{"class":115},[105,90268,51286],{"class":51285},[105,90270,51289],{"class":1954},[105,90272,51292],{"class":115},[105,90274,90275,90277,90279,90281,90283,90285],{"class":107,"line":28},[105,90276,1026],{"class":115},[105,90278,50620],{"class":51285},[105,90280,51301],{"class":1954},[105,90282,161],{"class":115},[105,90284,51306],{"class":220},[105,90286,51292],{"class":115},[105,90288,90289],{"class":107,"line":1171},[105,90290,2391],{"emptyLinePlaceholder":32},[105,90292,90293,90295,90297],{"class":107,"line":1186},[105,90294,1026],{"class":115},[105,90296,51319],{"class":51285},[105,90298,51292],{"class":115},[105,90300,90301,90303,90305,90307,90309,90311],{"class":107,"line":1192},[105,90302,52129],{"class":115},[105,90304,51329],{"class":51285},[105,90306,51332],{"class":1954},[105,90308,161],{"class":115},[105,90310,51337],{"class":220},[105,90312,51292],{"class":115},[105,90314,90315,90317,90319,90321,90323,90325,90327,90329,90331],{"class":107,"line":1206},[105,90316,52129],{"class":115},[105,90318,51329],{"class":51285},[105,90320,14912],{"class":1954},[105,90322,161],{"class":115},[105,90324,51376],{"class":220},[105,90326,51356],{"class":1954},[105,90328,161],{"class":115},[105,90330,51383],{"class":220},[105,90332,51292],{"class":115},[105,90334,90335,90337,90339,90341,90343],{"class":107,"line":1212},[105,90336,52129],{"class":115},[105,90338,51392],{"class":51285},[105,90340,51395],{"class":115},[105,90342,51392],{"class":51285},[105,90344,51292],{"class":115},[105,90346,90347,90349,90351],{"class":107,"line":1303},[105,90348,52129],{"class":115},[105,90350,5118],{"class":51285},[105,90352,51292],{"class":115},[105,90354,90355,90357],{"class":107,"line":1309},[105,90356,54737],{"class":1954},[105,90358,15564],{"class":115},[105,90360,90361,90363,90365,90367],{"class":107,"line":1321},[105,90362,72581],{"class":164},[105,90364,51422],{"class":115},[105,90366,60490],{"class":164},[105,90368,1282],{"class":115},[105,90370,90371,90373,90375,90377,90379],{"class":107,"line":1603},[105,90372,54756],{"class":164},[105,90374,51422],{"class":115},[105,90376,1713],{"class":164},[105,90378,51477],{"class":111},[105,90380,1282],{"class":115},[105,90382,90383,90385,90387,90389,90391],{"class":107,"line":1608},[105,90384,54770],{"class":164},[105,90386,51422],{"class":115},[105,90388,1713],{"class":164},[105,90390,51477],{"class":111},[105,90392,1282],{"class":115},[105,90394,90395,90397,90399,90401],{"class":107,"line":1614},[105,90396,54869],{"class":164},[105,90398,51422],{"class":115},[105,90400,89991],{"class":164},[105,90402,1282],{"class":115},[105,90404,90405,90407,90409,90411,90413],{"class":107,"line":1619},[105,90406,54907],{"class":164},[105,90408,51422],{"class":115},[105,90410,941],{"class":164},[105,90412,51477],{"class":111},[105,90414,1282],{"class":115},[105,90416,90417,90419,90421,90423],{"class":107,"line":1633},[105,90418,57401],{"class":164},[105,90420,51422],{"class":115},[105,90422,60827],{"class":164},[105,90424,1282],{"class":115},[105,90426,90427,90429,90431,90433],{"class":107,"line":1638},[105,90428,57271],{"class":164},[105,90430,51422],{"class":115},[105,90432,51577],{"class":164},[105,90434,1282],{"class":115},[105,90436,90437,90439,90441,90443,90445],{"class":107,"line":1644},[105,90438,90030],{"class":164},[105,90440,51422],{"class":115},[105,90442,435],{"class":164},[105,90444,51477],{"class":111},[105,90446,1282],{"class":115},[105,90448,90449],{"class":107,"line":1665},[105,90450,2178],{"class":115},[105,90452,90453,90455,90457],{"class":107,"line":1670},[105,90454,52402],{"class":115},[105,90456,5118],{"class":51285},[105,90458,51292],{"class":115},[105,90460,90461,90463,90465],{"class":107,"line":1684},[105,90462,51770],{"class":115},[105,90464,51319],{"class":51285},[105,90466,51292],{"class":115},[105,90468,90469],{"class":107,"line":1689},[105,90470,2391],{"emptyLinePlaceholder":32},[105,90472,90473,90475,90477],{"class":107,"line":1718},[105,90474,1026],{"class":115},[105,90476,51785],{"class":51285},[105,90478,51292],{"class":115},[105,90480,90481,90483,90485,90487,90489,90491,90493,90495],{"class":107,"line":1723},[105,90482,52129],{"class":115},[105,90484,51596],{"class":51285},[105,90486,53471],{"class":1954},[105,90488,161],{"class":115},[105,90490,53476],{"class":220},[105,90492,55299],{"class":115},[105,90494,51596],{"class":51285},[105,90496,51292],{"class":115},[105,90498,90499,90501,90503,90505,90507,90509,90511,90513],{"class":107,"line":1740},[105,90500,52129],{"class":115},[105,90502,51798],{"class":51285},[105,90504,55224],{"class":1954},[105,90506,161],{"class":115},[105,90508,88259],{"class":220},[105,90510,55299],{"class":115},[105,90512,51798],{"class":51285},[105,90514,51292],{"class":115},[105,90516,90517,90519,90521],{"class":107,"line":1745},[105,90518,52129],{"class":115},[105,90520,51798],{"class":51285},[105,90522,51292],{"class":115},[105,90524,90525,90527,90529,90531,90533,90535,90537,90539],{"class":107,"line":1750},[105,90526,11213],{"class":111},[105,90528,86918],{"class":164},[105,90530,13556],{"class":111},[105,90532,54381],{"class":115},[105,90534,54384],{"class":1954},[105,90536,116],{"class":115},[105,90538,90131],{"class":220},[105,90540,122],{"class":115},[105,90542,90543,90545,90547,90549],{"class":107,"line":1755},[105,90544,52204],{"class":111},[105,90546,9430],{"class":115},[105,90548,161],{"class":111},[105,90550,47318],{"class":164},[105,90552,90553,90555,90557],{"class":107,"line":1769},[105,90554,70069],{"class":111},[105,90556,90150],{"class":1954},[105,90558,10845],{"class":115},[105,90560,90561,90563,90565,90567],{"class":107,"line":1774},[105,90562,90157],{"class":115},[105,90564,161],{"class":111},[105,90566,3023],{"class":115},[105,90568,2693],{"class":111},[105,90570,90571],{"class":107,"line":2568},[105,90572,90168],{"class":174},[105,90574,90575],{"class":107,"line":2582},[105,90576,2178],{"class":115},[105,90578,90579],{"class":107,"line":2590},[105,90580,90177],{"class":174},[105,90582,90583],{"class":107,"line":2595},[105,90584,90585],{"class":174},"    \u002F\u002F 手写防抖函数\n",[105,90587,90588],{"class":107,"line":2601},[105,90589,90590],{"class":174},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[105,90592,90593],{"class":107,"line":2607},[105,90594,90595],{"class":174},"    \u002F\u002F 1.声明定时器变量\n",[105,90597,90598],{"class":107,"line":2612},[105,90599,90600],{"class":174},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[105,90602,90603],{"class":107,"line":7940},[105,90604,90605],{"class":174},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[105,90607,90608],{"class":107,"line":7964},[105,90609,90610],{"class":174},"    \u002F\u002F 4.定时器里面写函数调用\n",[105,90612,90613,90615,90618,90620,90623,90625,90627],{"class":107,"line":7969},[105,90614,70069],{"class":111},[105,90616,90617],{"class":1954}," debounce",[105,90619,116],{"class":115},[105,90621,90622],{"class":5208},"fn",[105,90624,12427],{"class":115},[105,90626,836],{"class":5208},[105,90628,12434],{"class":115},[105,90630,90631,90633],{"class":107,"line":7975},[105,90632,79757],{"class":111},[105,90634,90635],{"class":115}," timer\n",[105,90637,90638],{"class":107,"line":8002},[105,90639,90640],{"class":174},"      \u002F\u002F return 返回一个匿名函数\n",[105,90642,90643,90645,90647],{"class":107,"line":8007},[105,90644,73967],{"class":111},[105,90646,58903],{"class":111},[105,90648,54437],{"class":115},[105,90650,90651],{"class":107,"line":8013},[105,90652,90653],{"class":174},"        \u002F\u002F 这里边写第二三四步\n",[105,90655,90656,90658,90661,90664],{"class":107,"line":8025},[105,90657,2488],{"class":111},[105,90659,90660],{"class":115}," (timer) ",[105,90662,90663],{"class":1954},"clearTimeout",[105,90665,90666],{"class":115},"(timer)\n",[105,90668,90669,90672,90674,90677,90679,90681],{"class":107,"line":8037},[105,90670,90671],{"class":115},"        timer ",[105,90673,161],{"class":111},[105,90675,90676],{"class":1954}," setTimeout",[105,90678,116],{"class":115},[105,90680,54434],{"class":111},[105,90682,54437],{"class":115},[105,90684,90685,90688,90690],{"class":107,"line":8049},[105,90686,90687],{"class":1954},"          fn",[105,90689,13042],{"class":115},[105,90691,90692],{"class":174},"\u002F\u002F加小括号调用fn }, t)\n",[105,90694,90695],{"class":107,"line":9708},[105,90696,90697],{"class":115},"        }, t)\n",[105,90699,90700],{"class":107,"line":9733},[105,90701,52383],{"class":115},[105,90703,90704],{"class":107,"line":9756},[105,90705,2178],{"class":115},[105,90707,90708,90710,90712,90714,90716,90718,90720,90722,90724],{"class":107,"line":9780},[105,90709,90192],{"class":115},[105,90711,57798],{"class":1954},[105,90713,116],{"class":115},[105,90715,90199],{"class":220},[105,90717,12427],{"class":115},[105,90719,90205],{"class":1954},[105,90721,90208],{"class":115},[105,90723,65059],{"class":164},[105,90725,30482],{"class":115},[105,90727,90728],{"class":107,"line":9785},[105,90729,2391],{"emptyLinePlaceholder":32},[105,90731,90732],{"class":107,"line":9790},[105,90733,90734],{"class":174},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[105,90736,90737],{"class":107,"line":9795},[105,90738,90739],{"class":174},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[105,90741,90742],{"class":107,"line":9804},[105,90743,90744],{"class":174},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[105,90746,90747],{"class":107,"line":9809},[105,90748,90749],{"class":174},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[105,90751,90752,90754,90756],{"class":107,"line":9815},[105,90753,52402],{"class":115},[105,90755,51798],{"class":51285},[105,90757,51292],{"class":115},[105,90759,90760,90762,90764],{"class":107,"line":9836},[105,90761,51770],{"class":115},[105,90763,51785],{"class":51285},[105,90765,51292],{"class":115},[105,90767,90768],{"class":107,"line":9842},[105,90769,2391],{"emptyLinePlaceholder":32},[105,90771,90772,90774,90776],{"class":107,"line":9856},[105,90773,51770],{"class":115},[105,90775,50620],{"class":51285},[105,90777,51292],{"class":115},[76,90779,90781],{"id":90780},"_4172-节流","4.17.2 节流",[14,90783,90784],{},[20,90785],{"alt":22,"src":90786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90788,90789],{},[20,90790],{"alt":22,"src":90791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90793,90794],{},[265,90795,90796],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90798,90799],{},"实现方式：",[1123,90801,90802],{},[62,90803,90804],{},"lodash 提供的节流函数来处理",[14,90806,90807],{},"_.throttle(func,[wait=0],[options=])",[14,90809,90810],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[96,90812,90814],{"className":50618,"code":90813,"language":50620,"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",[102,90815,90816,90826,90840,90844,90852,90866,90886,90898,90906,90912,90922,90934,90946,90956,90968,90978,90988,91000,91004,91012,91020,91024,91032,91050,91068,91076,91094,91104,91112,91122,91126,91130,91134,91139,91144,91165,91173,91181,91185],{"__ignoreMap":22},[105,90817,90818,90820,90822,90824],{"class":107,"line":108},[105,90819,51282],{"class":115},[105,90821,51286],{"class":51285},[105,90823,51289],{"class":1954},[105,90825,51292],{"class":115},[105,90827,90828,90830,90832,90834,90836,90838],{"class":107,"line":28},[105,90829,1026],{"class":115},[105,90831,50620],{"class":51285},[105,90833,51301],{"class":1954},[105,90835,161],{"class":115},[105,90837,51306],{"class":220},[105,90839,51292],{"class":115},[105,90841,90842],{"class":107,"line":1171},[105,90843,2391],{"emptyLinePlaceholder":32},[105,90845,90846,90848,90850],{"class":107,"line":1186},[105,90847,1026],{"class":115},[105,90849,51319],{"class":51285},[105,90851,51292],{"class":115},[105,90853,90854,90856,90858,90860,90862,90864],{"class":107,"line":1192},[105,90855,52129],{"class":115},[105,90857,51329],{"class":51285},[105,90859,51332],{"class":1954},[105,90861,161],{"class":115},[105,90863,51337],{"class":220},[105,90865,51292],{"class":115},[105,90867,90868,90870,90872,90874,90876,90878,90880,90882,90884],{"class":107,"line":1206},[105,90869,52129],{"class":115},[105,90871,51329],{"class":51285},[105,90873,14912],{"class":1954},[105,90875,161],{"class":115},[105,90877,51376],{"class":220},[105,90879,51356],{"class":1954},[105,90881,161],{"class":115},[105,90883,51383],{"class":220},[105,90885,51292],{"class":115},[105,90887,90888,90890,90892,90894,90896],{"class":107,"line":1212},[105,90889,52129],{"class":115},[105,90891,51392],{"class":51285},[105,90893,51395],{"class":115},[105,90895,51392],{"class":51285},[105,90897,51292],{"class":115},[105,90899,90900,90902,90904],{"class":107,"line":1303},[105,90901,52129],{"class":115},[105,90903,5118],{"class":51285},[105,90905,51292],{"class":115},[105,90907,90908,90910],{"class":107,"line":1309},[105,90909,54737],{"class":1954},[105,90911,15564],{"class":115},[105,90913,90914,90916,90918,90920],{"class":107,"line":1321},[105,90915,72581],{"class":164},[105,90917,51422],{"class":115},[105,90919,60490],{"class":164},[105,90921,1282],{"class":115},[105,90923,90924,90926,90928,90930,90932],{"class":107,"line":1603},[105,90925,54756],{"class":164},[105,90927,51422],{"class":115},[105,90929,1713],{"class":164},[105,90931,51477],{"class":111},[105,90933,1282],{"class":115},[105,90935,90936,90938,90940,90942,90944],{"class":107,"line":1608},[105,90937,54770],{"class":164},[105,90939,51422],{"class":115},[105,90941,1713],{"class":164},[105,90943,51477],{"class":111},[105,90945,1282],{"class":115},[105,90947,90948,90950,90952,90954],{"class":107,"line":1614},[105,90949,54869],{"class":164},[105,90951,51422],{"class":115},[105,90953,89991],{"class":164},[105,90955,1282],{"class":115},[105,90957,90958,90960,90962,90964,90966],{"class":107,"line":1619},[105,90959,54907],{"class":164},[105,90961,51422],{"class":115},[105,90963,941],{"class":164},[105,90965,51477],{"class":111},[105,90967,1282],{"class":115},[105,90969,90970,90972,90974,90976],{"class":107,"line":1633},[105,90971,57401],{"class":164},[105,90973,51422],{"class":115},[105,90975,60827],{"class":164},[105,90977,1282],{"class":115},[105,90979,90980,90982,90984,90986],{"class":107,"line":1638},[105,90981,57271],{"class":164},[105,90983,51422],{"class":115},[105,90985,51577],{"class":164},[105,90987,1282],{"class":115},[105,90989,90990,90992,90994,90996,90998],{"class":107,"line":1644},[105,90991,90030],{"class":164},[105,90993,51422],{"class":115},[105,90995,435],{"class":164},[105,90997,51477],{"class":111},[105,90999,1282],{"class":115},[105,91001,91002],{"class":107,"line":1665},[105,91003,2178],{"class":115},[105,91005,91006,91008,91010],{"class":107,"line":1670},[105,91007,52402],{"class":115},[105,91009,5118],{"class":51285},[105,91011,51292],{"class":115},[105,91013,91014,91016,91018],{"class":107,"line":1684},[105,91015,51770],{"class":115},[105,91017,51319],{"class":51285},[105,91019,51292],{"class":115},[105,91021,91022],{"class":107,"line":1689},[105,91023,2391],{"emptyLinePlaceholder":32},[105,91025,91026,91028,91030],{"class":107,"line":1718},[105,91027,1026],{"class":115},[105,91029,51785],{"class":51285},[105,91031,51292],{"class":115},[105,91033,91034,91036,91038,91040,91042,91044,91046,91048],{"class":107,"line":1723},[105,91035,52129],{"class":115},[105,91037,51596],{"class":51285},[105,91039,53471],{"class":1954},[105,91041,161],{"class":115},[105,91043,53476],{"class":220},[105,91045,55299],{"class":115},[105,91047,51596],{"class":51285},[105,91049,51292],{"class":115},[105,91051,91052,91054,91056,91058,91060,91062,91064,91066],{"class":107,"line":1740},[105,91053,52129],{"class":115},[105,91055,51798],{"class":51285},[105,91057,55224],{"class":1954},[105,91059,161],{"class":115},[105,91061,88259],{"class":220},[105,91063,55299],{"class":115},[105,91065,51798],{"class":51285},[105,91067,51292],{"class":115},[105,91069,91070,91072,91074],{"class":107,"line":1745},[105,91071,52129],{"class":115},[105,91073,51798],{"class":51285},[105,91075,51292],{"class":115},[105,91077,91078,91080,91082,91084,91086,91088,91090,91092],{"class":107,"line":1750},[105,91079,11213],{"class":111},[105,91081,86918],{"class":164},[105,91083,13556],{"class":111},[105,91085,54381],{"class":115},[105,91087,54384],{"class":1954},[105,91089,116],{"class":115},[105,91091,90131],{"class":220},[105,91093,122],{"class":115},[105,91095,91096,91098,91100,91102],{"class":107,"line":1755},[105,91097,52204],{"class":111},[105,91099,9430],{"class":115},[105,91101,161],{"class":111},[105,91103,47318],{"class":164},[105,91105,91106,91108,91110],{"class":107,"line":1769},[105,91107,70069],{"class":111},[105,91109,90150],{"class":1954},[105,91111,10845],{"class":115},[105,91113,91114,91116,91118,91120],{"class":107,"line":1774},[105,91115,90157],{"class":115},[105,91117,161],{"class":111},[105,91119,3023],{"class":115},[105,91121,2693],{"class":111},[105,91123,91124],{"class":107,"line":2568},[105,91125,90168],{"class":174},[105,91127,91128],{"class":107,"line":2582},[105,91129,2178],{"class":115},[105,91131,91132],{"class":107,"line":2590},[105,91133,90177],{"class":174},[105,91135,91136],{"class":107,"line":2595},[105,91137,91138],{"class":174},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[105,91140,91141],{"class":107,"line":2601},[105,91142,91143],{"class":174},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[105,91145,91146,91148,91150,91152,91154,91156,91159,91161,91163],{"class":107,"line":2607},[105,91147,90192],{"class":115},[105,91149,57798],{"class":1954},[105,91151,116],{"class":115},[105,91153,90199],{"class":220},[105,91155,90202],{"class":115},[105,91157,91158],{"class":1954},"throttle",[105,91160,90208],{"class":115},[105,91162,65059],{"class":164},[105,91164,30482],{"class":115},[105,91166,91167,91169,91171],{"class":107,"line":2612},[105,91168,52402],{"class":115},[105,91170,51798],{"class":51285},[105,91172,51292],{"class":115},[105,91174,91175,91177,91179],{"class":107,"line":7940},[105,91176,51770],{"class":115},[105,91178,51785],{"class":51285},[105,91180,51292],{"class":115},[105,91182,91183],{"class":107,"line":7964},[105,91184,2391],{"emptyLinePlaceholder":32},[105,91186,91187,91189,91191],{"class":107,"line":7969},[105,91188,51770],{"class":115},[105,91190,50620],{"class":51285},[105,91192,51292],{"class":115},[1123,91194,91195],{},[62,91196,91197],{},"手写一个节流函数来处理",[14,91199,70937],{},[14,91201,90251],{},[14,91203,91204],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91206,91207],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[96,91209,91211],{"className":50618,"code":91210,"language":50620,"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",[102,91212,91213,91223,91237,91241,91249,91263,91283,91295,91303,91309,91319,91331,91343,91353,91365,91375,91385,91397,91401,91409,91417,91421,91429,91447,91465,91473,91491,91501,91509,91519,91523,91527,91531,91536,91541,91546,91551,91556,91561,91578,91584,91592,91603,91618,91625,91630,91635,91645,91650,91655,91660,91664,91668,91672,91692,91700,91708,91712],{"__ignoreMap":22},[105,91214,91215,91217,91219,91221],{"class":107,"line":108},[105,91216,51282],{"class":115},[105,91218,51286],{"class":51285},[105,91220,51289],{"class":1954},[105,91222,51292],{"class":115},[105,91224,91225,91227,91229,91231,91233,91235],{"class":107,"line":28},[105,91226,1026],{"class":115},[105,91228,50620],{"class":51285},[105,91230,51301],{"class":1954},[105,91232,161],{"class":115},[105,91234,51306],{"class":220},[105,91236,51292],{"class":115},[105,91238,91239],{"class":107,"line":1171},[105,91240,2391],{"emptyLinePlaceholder":32},[105,91242,91243,91245,91247],{"class":107,"line":1186},[105,91244,1026],{"class":115},[105,91246,51319],{"class":51285},[105,91248,51292],{"class":115},[105,91250,91251,91253,91255,91257,91259,91261],{"class":107,"line":1192},[105,91252,52129],{"class":115},[105,91254,51329],{"class":51285},[105,91256,51332],{"class":1954},[105,91258,161],{"class":115},[105,91260,51337],{"class":220},[105,91262,51292],{"class":115},[105,91264,91265,91267,91269,91271,91273,91275,91277,91279,91281],{"class":107,"line":1206},[105,91266,52129],{"class":115},[105,91268,51329],{"class":51285},[105,91270,14912],{"class":1954},[105,91272,161],{"class":115},[105,91274,51376],{"class":220},[105,91276,51356],{"class":1954},[105,91278,161],{"class":115},[105,91280,51383],{"class":220},[105,91282,51292],{"class":115},[105,91284,91285,91287,91289,91291,91293],{"class":107,"line":1212},[105,91286,52129],{"class":115},[105,91288,51392],{"class":51285},[105,91290,51395],{"class":115},[105,91292,51392],{"class":51285},[105,91294,51292],{"class":115},[105,91296,91297,91299,91301],{"class":107,"line":1303},[105,91298,52129],{"class":115},[105,91300,5118],{"class":51285},[105,91302,51292],{"class":115},[105,91304,91305,91307],{"class":107,"line":1309},[105,91306,54737],{"class":1954},[105,91308,15564],{"class":115},[105,91310,91311,91313,91315,91317],{"class":107,"line":1321},[105,91312,72581],{"class":164},[105,91314,51422],{"class":115},[105,91316,60490],{"class":164},[105,91318,1282],{"class":115},[105,91320,91321,91323,91325,91327,91329],{"class":107,"line":1603},[105,91322,54756],{"class":164},[105,91324,51422],{"class":115},[105,91326,1713],{"class":164},[105,91328,51477],{"class":111},[105,91330,1282],{"class":115},[105,91332,91333,91335,91337,91339,91341],{"class":107,"line":1608},[105,91334,54770],{"class":164},[105,91336,51422],{"class":115},[105,91338,1713],{"class":164},[105,91340,51477],{"class":111},[105,91342,1282],{"class":115},[105,91344,91345,91347,91349,91351],{"class":107,"line":1614},[105,91346,54869],{"class":164},[105,91348,51422],{"class":115},[105,91350,89991],{"class":164},[105,91352,1282],{"class":115},[105,91354,91355,91357,91359,91361,91363],{"class":107,"line":1619},[105,91356,54907],{"class":164},[105,91358,51422],{"class":115},[105,91360,941],{"class":164},[105,91362,51477],{"class":111},[105,91364,1282],{"class":115},[105,91366,91367,91369,91371,91373],{"class":107,"line":1633},[105,91368,57401],{"class":164},[105,91370,51422],{"class":115},[105,91372,60827],{"class":164},[105,91374,1282],{"class":115},[105,91376,91377,91379,91381,91383],{"class":107,"line":1638},[105,91378,57271],{"class":164},[105,91380,51422],{"class":115},[105,91382,51577],{"class":164},[105,91384,1282],{"class":115},[105,91386,91387,91389,91391,91393,91395],{"class":107,"line":1644},[105,91388,90030],{"class":164},[105,91390,51422],{"class":115},[105,91392,435],{"class":164},[105,91394,51477],{"class":111},[105,91396,1282],{"class":115},[105,91398,91399],{"class":107,"line":1665},[105,91400,2178],{"class":115},[105,91402,91403,91405,91407],{"class":107,"line":1670},[105,91404,52402],{"class":115},[105,91406,5118],{"class":51285},[105,91408,51292],{"class":115},[105,91410,91411,91413,91415],{"class":107,"line":1684},[105,91412,51770],{"class":115},[105,91414,51319],{"class":51285},[105,91416,51292],{"class":115},[105,91418,91419],{"class":107,"line":1689},[105,91420,2391],{"emptyLinePlaceholder":32},[105,91422,91423,91425,91427],{"class":107,"line":1718},[105,91424,1026],{"class":115},[105,91426,51785],{"class":51285},[105,91428,51292],{"class":115},[105,91430,91431,91433,91435,91437,91439,91441,91443,91445],{"class":107,"line":1723},[105,91432,52129],{"class":115},[105,91434,51596],{"class":51285},[105,91436,53471],{"class":1954},[105,91438,161],{"class":115},[105,91440,53476],{"class":220},[105,91442,55299],{"class":115},[105,91444,51596],{"class":51285},[105,91446,51292],{"class":115},[105,91448,91449,91451,91453,91455,91457,91459,91461,91463],{"class":107,"line":1740},[105,91450,52129],{"class":115},[105,91452,51798],{"class":51285},[105,91454,55224],{"class":1954},[105,91456,161],{"class":115},[105,91458,88259],{"class":220},[105,91460,55299],{"class":115},[105,91462,51798],{"class":51285},[105,91464,51292],{"class":115},[105,91466,91467,91469,91471],{"class":107,"line":1745},[105,91468,52129],{"class":115},[105,91470,51798],{"class":51285},[105,91472,51292],{"class":115},[105,91474,91475,91477,91479,91481,91483,91485,91487,91489],{"class":107,"line":1750},[105,91476,11213],{"class":111},[105,91478,86918],{"class":164},[105,91480,13556],{"class":111},[105,91482,54381],{"class":115},[105,91484,54384],{"class":1954},[105,91486,116],{"class":115},[105,91488,90131],{"class":220},[105,91490,122],{"class":115},[105,91492,91493,91495,91497,91499],{"class":107,"line":1755},[105,91494,52204],{"class":111},[105,91496,9430],{"class":115},[105,91498,161],{"class":111},[105,91500,47318],{"class":164},[105,91502,91503,91505,91507],{"class":107,"line":1769},[105,91504,70069],{"class":111},[105,91506,90150],{"class":1954},[105,91508,10845],{"class":115},[105,91510,91511,91513,91515,91517],{"class":107,"line":1774},[105,91512,90157],{"class":115},[105,91514,161],{"class":111},[105,91516,3023],{"class":115},[105,91518,2693],{"class":111},[105,91520,91521],{"class":107,"line":2568},[105,91522,90168],{"class":174},[105,91524,91525],{"class":107,"line":2582},[105,91526,2178],{"class":115},[105,91528,91529],{"class":107,"line":2590},[105,91530,90177],{"class":174},[105,91532,91533],{"class":107,"line":2595},[105,91534,91535],{"class":174},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[105,91537,91538],{"class":107,"line":2601},[105,91539,91540],{"class":174},"    \u002F\u002F 1.声明一个定时器变量\n",[105,91542,91543],{"class":107,"line":2607},[105,91544,91545],{"class":174},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[105,91547,91548],{"class":107,"line":2612},[105,91549,91550],{"class":174},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[105,91552,91553],{"class":107,"line":7940},[105,91554,91555],{"class":174},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[105,91557,91558],{"class":107,"line":7964},[105,91559,91560],{"class":174},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[105,91562,91563,91565,91568,91570,91572,91574,91576],{"class":107,"line":7969},[105,91564,70069],{"class":111},[105,91566,91567],{"class":1954}," throttle",[105,91569,116],{"class":115},[105,91571,90622],{"class":5208},[105,91573,12427],{"class":115},[105,91575,836],{"class":5208},[105,91577,12434],{"class":115},[105,91579,91580,91582],{"class":107,"line":7975},[105,91581,79757],{"class":111},[105,91583,90635],{"class":115},[105,91585,91586,91588,91590],{"class":107,"line":8002},[105,91587,73967],{"class":111},[105,91589,58903],{"class":111},[105,91591,54437],{"class":115},[105,91593,91594,91596,91598,91600],{"class":107,"line":8007},[105,91595,2488],{"class":111},[105,91597,1649],{"class":115},[105,91599,342],{"class":111},[105,91601,91602],{"class":115},"timer) {\n",[105,91604,91605,91608,91610,91612,91614,91616],{"class":107,"line":8013},[105,91606,91607],{"class":115},"          timer ",[105,91609,161],{"class":111},[105,91611,90676],{"class":1954},[105,91613,116],{"class":115},[105,91615,54434],{"class":111},[105,91617,54437],{"class":115},[105,91619,91620,91623],{"class":107,"line":8025},[105,91621,91622],{"class":1954},"            fn",[105,91624,1967],{"class":115},[105,91626,91627],{"class":107,"line":8037},[105,91628,91629],{"class":174},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[105,91631,91632],{"class":107,"line":8049},[105,91633,91634],{"class":174},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[105,91636,91637,91640,91642],{"class":107,"line":9708},[105,91638,91639],{"class":115},"            timer ",[105,91641,161],{"class":111},[105,91643,91644],{"class":164}," null\n",[105,91646,91647],{"class":107,"line":9733},[105,91648,91649],{"class":174},"            \u002F\u002F 不能用clearTimeout(timer)\n",[105,91651,91652],{"class":107,"line":9756},[105,91653,91654],{"class":174},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[105,91656,91657],{"class":107,"line":9780},[105,91658,91659],{"class":115},"          }, t)\n",[105,91661,91662],{"class":107,"line":9785},[105,91663,2520],{"class":115},[105,91665,91666],{"class":107,"line":9790},[105,91667,52383],{"class":115},[105,91669,91670],{"class":107,"line":9795},[105,91671,2178],{"class":115},[105,91673,91674,91676,91678,91680,91682,91684,91686,91688,91690],{"class":107,"line":9804},[105,91675,90192],{"class":115},[105,91677,57798],{"class":1954},[105,91679,116],{"class":115},[105,91681,90199],{"class":220},[105,91683,12427],{"class":115},[105,91685,91158],{"class":1954},[105,91687,90208],{"class":115},[105,91689,65059],{"class":164},[105,91691,30482],{"class":115},[105,91693,91694,91696,91698],{"class":107,"line":9809},[105,91695,52402],{"class":115},[105,91697,51798],{"class":51285},[105,91699,51292],{"class":115},[105,91701,91702,91704,91706],{"class":107,"line":9815},[105,91703,51770],{"class":115},[105,91705,51785],{"class":51285},[105,91707,51292],{"class":115},[105,91709,91710],{"class":107,"line":9836},[105,91711,2391],{"emptyLinePlaceholder":32},[105,91713,91714,91716,91718],{"class":107,"line":9842},[105,91715,51770],{"class":115},[105,91717,50620],{"class":51285},[105,91719,51292],{"class":115},[76,91721,91723],{"id":91722},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[96,91725,91727],{"className":53052,"code":91726,"language":53054,"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",[102,91728,91729,91737,91745,91750,91755,91760,91765,91769,91777],{"__ignoreMap":22},[105,91730,91731,91733,91735],{"class":107,"line":108},[105,91732,1026],{"class":115},[105,91734,51785],{"class":51285},[105,91736,51292],{"class":115},[105,91738,91739,91741,91743],{"class":107,"line":28},[105,91740,52129],{"class":115},[105,91742,51798],{"class":51285},[105,91744,51292],{"class":115},[105,91746,91747],{"class":107,"line":1171},[105,91748,91749],{"class":115},"    let timer = null\n",[105,91751,91752],{"class":107,"line":1186},[105,91753,91754],{"class":115},"    timer = setTimeout(() => {\n",[105,91756,91757],{"class":107,"line":1192},[105,91758,91759],{"class":115},"      clearTimeout(timer)\n",[105,91761,91762],{"class":107,"line":1206},[105,91763,91764],{"class":115},"      console.log(timer)\n",[105,91766,91767],{"class":107,"line":1212},[105,91768,60210],{"class":115},[105,91770,91771,91773,91775],{"class":107,"line":1303},[105,91772,52402],{"class":115},[105,91774,51798],{"class":51285},[105,91776,51292],{"class":115},[105,91778,91779,91781,91783],{"class":107,"line":1309},[105,91780,51770],{"class":115},[105,91782,51785],{"class":51285},[105,91784,51292],{"class":115},[14,91786,91787],{},"输出为1",[14,91789,91790],{},"在开启的定时器里边写清除定时器",[14,91792,91793],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[76,91795,91797],{"id":91796},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91799,91800],{},"页面打开，可以记录上一次的视频播放位置",[14,91802,91803],{},[20,91804],{"alt":22,"src":91805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91807,91808],{},[20,91809],{"alt":22,"src":91810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[96,91812,91814],{"className":50618,"code":91813,"language":50620,"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",[102,91815,91816,91826,91840,91844,91852,91866,91886,91906,91928,91941,91949,91955,91965,91975,91985,91989,91993,92000,92013,92025,92029,92033,92043,92055,92069,92073,92077,92084,92094,92107,92119,92129,92139,92155,92167,92171,92175,92183,92193,92205,92215,92225,92235,92239,92243,92253,92264,92268,92276,92284,92288,92296,92311,92326,92341,92362,92370,92378,92393,92415,92423,92438,92464,92490,92516,92524,92532,92551,92559,92564,92583,92588,92606,92611,92616,92624,92629,92643,92651,92656,92673,92677,92682,92704,92708,92716,92724,92728],{"__ignoreMap":22},[105,91817,91818,91820,91822,91824],{"class":107,"line":108},[105,91819,51282],{"class":115},[105,91821,51286],{"class":51285},[105,91823,51289],{"class":1954},[105,91825,51292],{"class":115},[105,91827,91828,91830,91832,91834,91836,91838],{"class":107,"line":28},[105,91829,1026],{"class":115},[105,91831,50620],{"class":51285},[105,91833,51301],{"class":1954},[105,91835,161],{"class":115},[105,91837,51306],{"class":220},[105,91839,51292],{"class":115},[105,91841,91842],{"class":107,"line":1171},[105,91843,2391],{"emptyLinePlaceholder":32},[105,91845,91846,91848,91850],{"class":107,"line":1186},[105,91847,1026],{"class":115},[105,91849,51319],{"class":51285},[105,91851,51292],{"class":115},[105,91853,91854,91856,91858,91860,91862,91864],{"class":107,"line":1192},[105,91855,52129],{"class":115},[105,91857,51329],{"class":51285},[105,91859,51332],{"class":1954},[105,91861,161],{"class":115},[105,91863,51337],{"class":220},[105,91865,59112],{"class":115},[105,91867,91868,91870,91872,91874,91876,91878,91880,91882,91884],{"class":107,"line":1206},[105,91869,52129],{"class":115},[105,91871,51329],{"class":51285},[105,91873,51348],{"class":1954},[105,91875,161],{"class":115},[105,91877,51353],{"class":220},[105,91879,51356],{"class":1954},[105,91881,161],{"class":115},[105,91883,51361],{"class":220},[105,91885,59112],{"class":115},[105,91887,91888,91890,91892,91894,91896,91898,91900,91902,91904],{"class":107,"line":1212},[105,91889,52129],{"class":115},[105,91891,51329],{"class":51285},[105,91893,14912],{"class":1954},[105,91895,161],{"class":115},[105,91897,51376],{"class":220},[105,91899,51356],{"class":1954},[105,91901,161],{"class":115},[105,91903,51383],{"class":220},[105,91905,59112],{"class":115},[105,91907,91908,91910,91912,91914,91916,91919,91921,91923,91926],{"class":107,"line":1303},[105,91909,52129],{"class":115},[105,91911,51329],{"class":51285},[105,91913,14912],{"class":1954},[105,91915,161],{"class":115},[105,91917,91918],{"class":220},"\"referrer\"",[105,91920,51356],{"class":1954},[105,91922,161],{"class":115},[105,91924,91925],{"class":220},"\"never\"",[105,91927,59112],{"class":115},[105,91929,91930,91932,91934,91937,91939],{"class":107,"line":1309},[105,91931,52129],{"class":115},[105,91933,51392],{"class":51285},[105,91935,91936],{"class":115},">综合案例\u003C\u002F",[105,91938,51392],{"class":51285},[105,91940,51292],{"class":115},[105,91942,91943,91945,91947],{"class":107,"line":1321},[105,91944,52129],{"class":115},[105,91946,5118],{"class":51285},[105,91948,51292],{"class":115},[105,91950,91951,91953],{"class":107,"line":1603},[105,91952,6395],{"class":51285},[105,91954,15564],{"class":115},[105,91956,91957,91959,91961,91963],{"class":107,"line":1608},[105,91958,54680],{"class":164},[105,91960,51422],{"class":115},[105,91962,307],{"class":164},[105,91964,1282],{"class":115},[105,91966,91967,91969,91971,91973],{"class":107,"line":1614},[105,91968,54691],{"class":164},[105,91970,51422],{"class":115},[105,91972,307],{"class":164},[105,91974,1282],{"class":115},[105,91976,91977,91979,91981,91983],{"class":107,"line":1619},[105,91978,72581],{"class":164},[105,91980,51422],{"class":115},[105,91982,60490],{"class":164},[105,91984,1282],{"class":115},[105,91986,91987],{"class":107,"line":1633},[105,91988,2178],{"class":115},[105,91990,91991],{"class":107,"line":1638},[105,91992,2391],{"emptyLinePlaceholder":32},[105,91994,91995,91998],{"class":107,"line":1644},[105,91996,91997],{"class":1954},"    .container",[105,91999,15564],{"class":115},[105,92001,92002,92004,92006,92009,92011],{"class":107,"line":1665},[105,92003,54756],{"class":164},[105,92005,51422],{"class":115},[105,92007,92008],{"class":164},"1200",[105,92010,51477],{"class":111},[105,92012,1282],{"class":115},[105,92014,92015,92017,92019,92021,92023],{"class":107,"line":1670},[105,92016,54691],{"class":164},[105,92018,51422],{"class":115},[105,92020,307],{"class":164},[105,92022,51541],{"class":164},[105,92024,1282],{"class":115},[105,92026,92027],{"class":107,"line":1684},[105,92028,2178],{"class":115},[105,92030,92031],{"class":107,"line":1689},[105,92032,2391],{"emptyLinePlaceholder":32},[105,92034,92035,92038,92041],{"class":107,"line":1718},[105,92036,92037],{"class":1954},"    .video",[105,92039,92040],{"class":51285}," video",[105,92042,15564],{"class":115},[105,92044,92045,92047,92049,92051,92053],{"class":107,"line":1723},[105,92046,54756],{"class":164},[105,92048,51422],{"class":115},[105,92050,427],{"class":164},[105,92052,444],{"class":111},[105,92054,1282],{"class":115},[105,92056,92057,92059,92061,92063,92065,92067],{"class":107,"line":1740},[105,92058,54680],{"class":164},[105,92060,51422],{"class":115},[105,92062,816],{"class":164},[105,92064,51477],{"class":111},[105,92066,4084],{"class":164},[105,92068,1282],{"class":115},[105,92070,92071],{"class":107,"line":1745},[105,92072,2178],{"class":115},[105,92074,92075],{"class":107,"line":1750},[105,92076,2391],{"emptyLinePlaceholder":32},[105,92078,92079,92082],{"class":107,"line":1755},[105,92080,92081],{"class":1954},"    .elevator",[105,92083,15564],{"class":115},[105,92085,92086,92088,92090,92092],{"class":107,"line":1769},[105,92087,54744],{"class":164},[105,92089,51422],{"class":115},[105,92091,86218],{"class":164},[105,92093,1282],{"class":115},[105,92095,92096,92098,92100,92103,92105],{"class":107,"line":1774},[105,92097,54932],{"class":164},[105,92099,51422],{"class":115},[105,92101,92102],{"class":164},"280",[105,92104,51477],{"class":111},[105,92106,1282],{"class":115},[105,92108,92109,92111,92113,92115,92117],{"class":107,"line":2568},[105,92110,86412],{"class":164},[105,92112,51422],{"class":115},[105,92114,816],{"class":164},[105,92116,51477],{"class":111},[105,92118,1282],{"class":115},[105,92120,92121,92123,92125,92127],{"class":107,"line":2582},[105,92122,86225],{"class":164},[105,92124,51422],{"class":115},[105,92126,86230],{"class":164},[105,92128,1282],{"class":115},[105,92130,92131,92133,92135,92137],{"class":107,"line":2590},[105,92132,61706],{"class":164},[105,92134,51422],{"class":115},[105,92136,60827],{"class":164},[105,92138,1282],{"class":115},[105,92140,92141,92143,92145,92147,92149,92151,92153],{"class":107,"line":2595},[105,92142,61962],{"class":164},[105,92144,51422],{"class":115},[105,92146,333],{"class":164},[105,92148,51477],{"class":111},[105,92150,51506],{"class":164},[105,92152,62229],{"class":164},[105,92154,1282],{"class":115},[105,92156,92157,92159,92161,92163,92165],{"class":107,"line":2601},[105,92158,54756],{"class":164},[105,92160,51422],{"class":115},[105,92162,1023],{"class":164},[105,92164,51477],{"class":111},[105,92166,1282],{"class":115},[105,92168,92169],{"class":107,"line":2607},[105,92170,2178],{"class":115},[105,92172,92173],{"class":107,"line":2612},[105,92174,2391],{"emptyLinePlaceholder":32},[105,92176,92177,92179,92181],{"class":107,"line":7940},[105,92178,92081],{"class":1954},[105,92180,1390],{"class":51285},[105,92182,15564],{"class":115},[105,92184,92185,92187,92189,92191],{"class":107,"line":7964},[105,92186,54994],{"class":164},[105,92188,51422],{"class":115},[105,92190,60854],{"class":164},[105,92192,1282],{"class":115},[105,92194,92195,92197,92199,92201,92203],{"class":107,"line":7969},[105,92196,54680],{"class":164},[105,92198,51422],{"class":115},[105,92200,562],{"class":164},[105,92202,51477],{"class":111},[105,92204,1282],{"class":115},[105,92206,92207,92209,92211,92213],{"class":107,"line":7975},[105,92208,63955],{"class":164},[105,92210,51422],{"class":115},[105,92212,54722],{"class":164},[105,92214,1282],{"class":115},[105,92216,92217,92219,92221,92223],{"class":107,"line":8002},[105,92218,57271],{"class":164},[105,92220,51422],{"class":115},[105,92222,51577],{"class":164},[105,92224,1282],{"class":115},[105,92226,92227,92229,92231,92233],{"class":107,"line":8007},[105,92228,57401],{"class":164},[105,92230,51422],{"class":115},[105,92232,62055],{"class":164},[105,92234,1282],{"class":115},[105,92236,92237],{"class":107,"line":8013},[105,92238,2178],{"class":115},[105,92240,92241],{"class":107,"line":8025},[105,92242,2391],{"emptyLinePlaceholder":32},[105,92244,92245,92247,92249,92251],{"class":107,"line":8037},[105,92246,92081],{"class":1954},[105,92248,1390],{"class":51285},[105,92250,64009],{"class":1954},[105,92252,15564],{"class":115},[105,92254,92255,92257,92259,92262],{"class":107,"line":8049},[105,92256,57401],{"class":164},[105,92258,51422],{"class":115},[105,92260,92261],{"class":164},"#1286ff",[105,92263,1282],{"class":115},[105,92265,92266],{"class":107,"line":9708},[105,92267,2178],{"class":115},[105,92269,92270,92272,92274],{"class":107,"line":9733},[105,92271,52402],{"class":115},[105,92273,5118],{"class":51285},[105,92275,51292],{"class":115},[105,92277,92278,92280,92282],{"class":107,"line":9756},[105,92279,51770],{"class":115},[105,92281,51319],{"class":51285},[105,92283,51292],{"class":115},[105,92285,92286],{"class":107,"line":9780},[105,92287,2391],{"emptyLinePlaceholder":32},[105,92289,92290,92292,92294],{"class":107,"line":9785},[105,92291,1026],{"class":115},[105,92293,51785],{"class":51285},[105,92295,51292],{"class":115},[105,92297,92298,92300,92302,92304,92306,92309],{"class":107,"line":9790},[105,92299,52129],{"class":115},[105,92301,51596],{"class":51285},[105,92303,53471],{"class":1954},[105,92305,161],{"class":115},[105,92307,92308],{"class":220},"\"container\"",[105,92310,51292],{"class":115},[105,92312,92313,92315,92317,92319,92321,92324],{"class":107,"line":9795},[105,92314,51326],{"class":115},[105,92316,51596],{"class":51285},[105,92318,53471],{"class":1954},[105,92320,161],{"class":115},[105,92322,92323],{"class":220},"\"header\"",[105,92325,51292],{"class":115},[105,92327,92328,92330,92332,92334,92336,92339],{"class":107,"line":9804},[105,92329,55219],{"class":115},[105,92331,354],{"class":51285},[105,92333,61042],{"class":1954},[105,92335,161],{"class":115},[105,92337,92338],{"class":220},"\"http:\u002F\u002Fpip.itcast.cn\"",[105,92340,51292],{"class":115},[105,92342,92343,92345,92347,92349,92351,92354,92356,92358,92360],{"class":107,"line":9809},[105,92344,55287],{"class":115},[105,92346,20],{"class":51285},[105,92348,55224],{"class":1954},[105,92350,161],{"class":115},[105,92352,92353],{"class":220},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[105,92355,55232],{"class":1954},[105,92357,161],{"class":115},[105,92359,7644],{"class":220},[105,92361,59112],{"class":115},[105,92363,92364,92366,92368],{"class":107,"line":9815},[105,92365,55392],{"class":115},[105,92367,354],{"class":51285},[105,92369,51292],{"class":115},[105,92371,92372,92374,92376],{"class":107,"line":9836},[105,92373,51761],{"class":115},[105,92375,51596],{"class":51285},[105,92377,51292],{"class":115},[105,92379,92380,92382,92384,92386,92388,92391],{"class":107,"line":9842},[105,92381,51326],{"class":115},[105,92383,51596],{"class":51285},[105,92385,53471],{"class":1954},[105,92387,161],{"class":115},[105,92389,92390],{"class":220},"\"video\"",[105,92392,51292],{"class":115},[105,92394,92395,92397,92399,92401,92403,92406,92409,92411,92413],{"class":107,"line":9856},[105,92396,55219],{"class":115},[105,92398,28168],{"class":51285},[105,92400,55224],{"class":1954},[105,92402,161],{"class":115},[105,92404,92405],{"class":220},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[105,92407,92408],{"class":1954}," controls",[105,92410,55299],{"class":115},[105,92412,28168],{"class":51285},[105,92414,51292],{"class":115},[105,92416,92417,92419,92421],{"class":107,"line":9862},[105,92418,51761],{"class":115},[105,92420,51596],{"class":51285},[105,92422,51292],{"class":115},[105,92424,92425,92427,92429,92431,92433,92436],{"class":107,"line":9889},[105,92426,51326],{"class":115},[105,92428,51596],{"class":51285},[105,92430,53471],{"class":1954},[105,92432,161],{"class":115},[105,92434,92435],{"class":220},"\"elevator\"",[105,92437,51292],{"class":115},[105,92439,92440,92442,92444,92446,92448,92450,92453,92455,92457,92460,92462],{"class":107,"line":9898},[105,92441,55219],{"class":115},[105,92443,354],{"class":51285},[105,92445,61042],{"class":1954},[105,92447,161],{"class":115},[105,92449,64221],{"class":220},[105,92451,92452],{"class":1954}," data-ref",[105,92454,161],{"class":115},[105,92456,92390],{"class":220},[105,92458,92459],{"class":115},">视频介绍\u003C\u002F",[105,92461,354],{"class":51285},[105,92463,51292],{"class":115},[105,92465,92466,92468,92470,92472,92474,92476,92478,92480,92483,92486,92488],{"class":107,"line":9904},[105,92467,55219],{"class":115},[105,92469,354],{"class":51285},[105,92471,61042],{"class":1954},[105,92473,161],{"class":115},[105,92475,64221],{"class":220},[105,92477,92452],{"class":1954},[105,92479,161],{"class":115},[105,92481,92482],{"class":220},"\"intro\"",[105,92484,92485],{"class":115},">课程简介\u003C\u002F",[105,92487,354],{"class":51285},[105,92489,51292],{"class":115},[105,92491,92492,92494,92496,92498,92500,92502,92504,92506,92509,92512,92514],{"class":107,"line":9912},[105,92493,55219],{"class":115},[105,92495,354],{"class":51285},[105,92497,61042],{"class":1954},[105,92499,161],{"class":115},[105,92501,64221],{"class":220},[105,92503,92452],{"class":1954},[105,92505,161],{"class":115},[105,92507,92508],{"class":220},"\"outline\"",[105,92510,92511],{"class":115},">评论列表\u003C\u002F",[105,92513,354],{"class":51285},[105,92515,51292],{"class":115},[105,92517,92518,92520,92522],{"class":107,"line":9917},[105,92519,51761],{"class":115},[105,92521,51596],{"class":51285},[105,92523,51292],{"class":115},[105,92525,92526,92528,92530],{"class":107,"line":16596},[105,92527,52402],{"class":115},[105,92529,51596],{"class":51285},[105,92531,51292],{"class":115},[105,92533,92534,92536,92538,92540,92542,92545,92547,92549],{"class":107,"line":16602},[105,92535,52129],{"class":115},[105,92537,51798],{"class":51285},[105,92539,55224],{"class":1954},[105,92541,161],{"class":115},[105,92543,92544],{"class":220},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[105,92546,55299],{"class":115},[105,92548,51798],{"class":51285},[105,92550,51292],{"class":115},[105,92552,92553,92555,92557],{"class":107,"line":16625},[105,92554,52129],{"class":115},[105,92556,51798],{"class":51285},[105,92558,51292],{"class":115},[105,92560,92561],{"class":107,"line":16631},[105,92562,92563],{"class":174},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[105,92565,92566,92568,92570,92572,92574,92576,92578,92581],{"class":107,"line":16654},[105,92567,11213],{"class":111},[105,92569,92040],{"class":164},[105,92571,13556],{"class":111},[105,92573,54381],{"class":115},[105,92575,54384],{"class":1954},[105,92577,116],{"class":115},[105,92579,92580],{"class":220},"'video'",[105,92582,122],{"class":115},[105,92584,92585],{"class":107,"line":16668},[105,92586,92587],{"class":174},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[105,92589,92590,92593,92595,92597,92599,92602,92604],{"class":107,"line":16688},[105,92591,92592],{"class":115},"    video.ontimeupdate ",[105,92594,161],{"class":111},[105,92596,88340],{"class":115},[105,92598,91158],{"class":1954},[105,92600,92601],{"class":115},"(() ",[105,92603,84707],{"class":111},[105,92605,15564],{"class":115},[105,92607,92608],{"class":107,"line":16694},[105,92609,92610],{"class":174},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[105,92612,92613],{"class":107,"line":16705},[105,92614,92615],{"class":174},"      \u002F\u002F 控制台输出当前的时间\n",[105,92617,92618,92621],{"class":107,"line":16728},[105,92619,92620],{"class":174},"      \u002F\u002F console.log(video.currentTime)",[105,92622,92623],{"class":174},"  \u002F\u002F获得当前的视频时间\n",[105,92625,92626],{"class":107,"line":16750},[105,92627,92628],{"class":174},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[105,92630,92631,92633,92635,92637,92640],{"class":107,"line":16755},[105,92632,74668],{"class":115},[105,92634,71639],{"class":1954},[105,92636,116],{"class":115},[105,92638,92639],{"class":220},"'currentTime'",[105,92641,92642],{"class":115},", video.currentTime)\n",[105,92644,92645,92647,92649],{"class":107,"line":16761},[105,92646,54520],{"class":115},[105,92648,6402],{"class":164},[105,92650,122],{"class":115},[105,92652,92653],{"class":107,"line":16775},[105,92654,92655],{"class":174},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[105,92657,92658,92661,92664,92666,92669,92671],{"class":107,"line":16788},[105,92659,92660],{"class":115},"    video.",[105,92662,92663],{"class":1954},"onloadeddata",[105,92665,13556],{"class":111},[105,92667,92668],{"class":115}," () ",[105,92670,84707],{"class":111},[105,92672,15564],{"class":115},[105,92674,92675],{"class":107,"line":16793},[105,92676,59997],{"class":174},[105,92678,92679],{"class":107,"line":16807},[105,92680,92681],{"class":174},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[105,92683,92684,92687,92689,92692,92694,92696,92698,92700,92702],{"class":107,"line":16812},[105,92685,92686],{"class":115},"      video.currentTime ",[105,92688,161],{"class":111},[105,92690,92691],{"class":115}," localStorage.",[105,92693,71670],{"class":1954},[105,92695,116],{"class":115},[105,92697,92639],{"class":220},[105,92699,13706],{"class":115},[105,92701,71342],{"class":111},[105,92703,47318],{"class":164},[105,92705,92706],{"class":107,"line":16818},[105,92707,2178],{"class":115},[105,92709,92710,92712,92714],{"class":107,"line":16823},[105,92711,52402],{"class":115},[105,92713,51798],{"class":51285},[105,92715,51292],{"class":115},[105,92717,92718,92720,92722],{"class":107,"line":16837},[105,92719,51770],{"class":115},[105,92721,51785],{"class":51285},[105,92723,51292],{"class":115},[105,92725,92726],{"class":107,"line":16842},[105,92727,2391],{"emptyLinePlaceholder":32},[105,92729,92730,92732,92734],{"class":107,"line":16847},[105,92731,51770],{"class":115},[105,92733,50620],{"class":51285},[105,92735,51292],{"class":115},[5118,92737,92738],{},"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":28,"depth":28,"links":92740},[92741,92746,92750,92751,92752,92757,92762,92763,92764,92765,92772,92777,92778,92788,92792,92793,92797],{"id":76676,"depth":28,"text":76677,"children":92742},[92743,92744,92745],{"id":76680,"depth":1171,"text":76681},{"id":76705,"depth":1171,"text":76706},{"id":76717,"depth":1171,"text":76718},{"id":76729,"depth":28,"text":76730,"children":92747},[92748,92749],{"id":76733,"depth":1171,"text":76734},{"id":76748,"depth":1171,"text":76749},{"id":76800,"depth":28,"text":76801},{"id":76844,"depth":28,"text":76845},{"id":76861,"depth":28,"text":76862,"children":92753},[92754,92755,92756],{"id":76865,"depth":1171,"text":76866},{"id":76878,"depth":1171,"text":76879},{"id":76983,"depth":1171,"text":76984},{"id":77272,"depth":28,"text":77273,"children":92758},[92759,92760,92761],{"id":77276,"depth":1171,"text":77277},{"id":77719,"depth":1171,"text":77720},{"id":78130,"depth":1171,"text":78131},{"id":78193,"depth":28,"text":78194},{"id":78272,"depth":28,"text":78273},{"id":78365,"depth":28,"text":78366},{"id":80210,"depth":28,"text":80211,"children":92766},[92767,92768,92769,92770,92771],{"id":80214,"depth":1171,"text":80215},{"id":80226,"depth":1171,"text":80227},{"id":80445,"depth":1171,"text":80446},{"id":80463,"depth":1171,"text":80464},{"id":80523,"depth":1171,"text":80524},{"id":84791,"depth":28,"text":84792,"children":92773},[92774,92775,92776],{"id":84795,"depth":1171,"text":84796},{"id":84813,"depth":1171,"text":84814},{"id":84839,"depth":1171,"text":84840},{"id":84848,"depth":28,"text":84849},{"id":84870,"depth":28,"text":84871,"children":92779},[92780,92781,92782,92783,92784,92785,92786,92787],{"id":84874,"depth":1171,"text":84875},{"id":85135,"depth":1171,"text":85136},{"id":85321,"depth":1171,"text":85322},{"id":85688,"depth":1171,"text":85689},{"id":85804,"depth":1171,"text":85805},{"id":85840,"depth":1171,"text":85841},{"id":85887,"depth":1171,"text":85888},{"id":85921,"depth":1171,"text":85922},{"id":87284,"depth":28,"text":87285,"children":92789},[92790,92791],{"id":87288,"depth":1171,"text":87289},{"id":87325,"depth":1171,"text":87326},{"id":88680,"depth":28,"text":88681},{"id":89051,"depth":28,"text":89052,"children":92794},[92795,92796],{"id":89055,"depth":1171,"text":89056},{"id":89089,"depth":1171,"text":89090},{"id":89818,"depth":28,"text":89819,"children":92798},[92799,92800,92801,92802],{"id":89822,"depth":1171,"text":89823},{"id":90780,"depth":1171,"text":90781},{"id":91722,"depth":1171,"text":91723},{"id":91796,"depth":1171,"text":91797},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76665,"description":23369},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92809,"title":92810,"body":92811,"description":92822,"extension":30,"meta":92823,"navigation":32,"path":92825,"seo":92826,"stem":92827,"__hash__":92828},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92812,"toc":92820},[92813],[14,92814,92815,92816],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[354,92817,92818],{"href":92818,"rel":92819},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23858],{"title":22,"searchDepth":28,"depth":28,"links":92821},[],"三件套第三套学习",{"category":92824},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92810,"description":92822},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92830,"title":92831,"body":92832,"description":23369,"extension":30,"meta":92937,"navigation":32,"path":92938,"seo":92939,"stem":92940,"__hash__":92941},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92833,"toc":92932},[92834,92841,92844,92847,92850,92854,92863,92866,92869,92873,92882,92885,92889,92892,92912,92915,92929],[14,92835,92836],{},[354,92837,92840],{"href":92838,"rel":92839},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23858],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92842,92831],{"id":92843},"_1安装",[14,92845,92846],{},"numpy是科学计算基础库,底层是C语言",[14,92848,92849],{},"三种方式：",[47,92851,92853],{"id":92852},"_11-通过pip安装","1.1 通过pip安装",[96,92855,92857],{"className":30363,"code":92856,"language":30365,"meta":22,"style":22},"pip install numpy\n",[102,92858,92859],{"__ignoreMap":22},[105,92860,92861],{"class":107,"line":108},[105,92862,92856],{"class":115},[14,92864,92865],{},"首选方式，自动处理依赖项",[14,92867,92868],{},"在提示系统命令符中使用cmd",[47,92870,92872],{"id":92871},"_12-通过anaconda安装","1.2 通过Anaconda安装",[96,92874,92876],{"className":30363,"code":92875,"language":30365,"meta":22,"style":22},"conda install numpy\n",[102,92877,92878],{"__ignoreMap":22},[105,92879,92880],{"class":107,"line":108},[105,92881,92875],{"class":115},[14,92883,92884],{},"自动解决环境依赖",[47,92886,92888],{"id":92887},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92890,92891],{},"对于Debian\u002FUbuntu",[96,92893,92895],{"className":30363,"code":92894,"language":30365,"meta":22,"style":22},"sudo apt-get install python3-numpy\n",[102,92896,92897],{"__ignoreMap":22},[105,92898,92899,92902,92904,92907,92909],{"class":107,"line":108},[105,92900,92901],{"class":115},"sudo apt",[105,92903,648],{"class":111},[105,92905,92906],{"class":115},"get install python3",[105,92908,648],{"class":111},[105,92910,92911],{"class":115},"numpy\n",[14,92913,92914],{},"对于Fedora:",[96,92916,92918],{"className":30363,"code":92917,"language":30365,"meta":22,"style":22},"sudo dnf install python3-numpy\n",[102,92919,92920],{"__ignoreMap":22},[105,92921,92922,92925,92927],{"class":107,"line":108},[105,92923,92924],{"class":115},"sudo dnf install python3",[105,92926,648],{"class":111},[105,92928,92911],{"class":115},[5118,92930,92931],{},"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":28,"depth":28,"links":92933},[92934,92935,92936],{"id":92852,"depth":28,"text":92853},{"id":92871,"depth":28,"text":92872},{"id":92887,"depth":28,"text":92888},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92831,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92943,"title":92944,"body":92945,"description":23369,"extension":30,"meta":93058,"navigation":32,"path":93059,"seo":93060,"stem":93061,"__hash__":93062},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92946,"toc":93056},[92947,92950,92953,92956,92959,92962,92965,92968,92971,92974,93050,93053],[10,92948,92944],{"id":92949},"_10算数函数",[14,92951,92952],{},"加减乘除运算跟python基础语法没区别",[14,92954,92955],{},"除了python那种方法外还可以使用函数",[14,92957,92958],{},"加：np.add(a,b)",[14,92960,92961],{},"减：np.subtract(a,b)",[14,92963,92964],{},"乘：np.multiply(a,b)",[14,92966,92967],{},"除：np.divide(a,b) == a\u002Fb",[14,92969,92970],{},"取余：np.mod(a,b) == a%b",[14,92972,92973],{},"必须会的用法：",[96,92975,92977],{"className":30363,"code":92976,"language":30365,"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",[102,92978,92979,93001,93022,93032,93045],{"__ignoreMap":22},[105,92980,92981,92983,92985,92988,92990,92993,92995,92997,92999],{"class":107,"line":108},[105,92982,354],{"class":115},[105,92984,161],{"class":111},[105,92986,92987],{"class":115},"np.arange(",[105,92989,536],{"class":164},[105,92991,92992],{"class":115},").reshape(",[105,92994,187],{"class":164},[105,92996,494],{"class":115},[105,92998,187],{"class":164},[105,93000,122],{"class":115},[105,93002,93003,93005,93007,93010,93012,93014,93016,93018,93020],{"class":107,"line":28},[105,93004,379],{"class":115},[105,93006,161],{"class":111},[105,93008,93009],{"class":115},"np.array([",[105,93011,562],{"class":164},[105,93013,494],{"class":115},[105,93015,562],{"class":164},[105,93017,494],{"class":115},[105,93019,562],{"class":164},[105,93021,4648],{"class":115},[105,93023,93024,93027,93029],{"class":107,"line":1171},[105,93025,93026],{"class":115},"result",[105,93028,161],{"class":111},[105,93030,93031],{"class":115},"np.empty_like(a)\n",[105,93033,93034,93037,93040,93042],{"class":107,"line":1186},[105,93035,93036],{"class":115},"np.add(a,b,",[105,93038,93039],{"class":5208},"out",[105,93041,161],{"class":111},[105,93043,93044],{"class":115},"result)\n",[105,93046,93047],{"class":107,"line":1192},[105,93048,93049],{"class":115},"result\n",[14,93051,93052],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5118,93054,93055],{},"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":28,"depth":28,"links":93057},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92944,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93064,"title":93065,"body":93066,"description":23369,"extension":30,"meta":93828,"navigation":32,"path":93829,"seo":93830,"stem":93831,"__hash__":93832},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93067,"toc":93815},[93068,93071,93074,93077,93081,93120,93124,93168,93228,93232,93235,93274,93277,93322,93326,93362,93366,93435,93439,93503,93507,93510,93513,93516,93519,93555,93559,93599,93603,93675,93678,93682,93745,93749,93812],[10,93069,93065],{"id":93070},"_11统计函数",[14,93072,93073],{},"sum max min mean",[14,93075,93076],{},"这些有axis参数，可以指定方向",[47,93078,93080],{"id":93079},"_111-sum求和函数","11.1 sum()求和函数",[96,93082,93084],{"className":30363,"code":93083,"language":30365,"meta":22,"style":22},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[102,93085,93086,93091,93112],{"__ignoreMap":22},[105,93087,93088],{"class":107,"line":108},[105,93089,93090],{"class":174},"#创建一维数组\n",[105,93092,93093,93095,93097,93100,93102,93104,93106,93108,93110],{"class":107,"line":28},[105,93094,354],{"class":115},[105,93096,161],{"class":111},[105,93098,93099],{"class":115},"np.random.randint(",[105,93101,333],{"class":164},[105,93103,494],{"class":115},[105,93105,427],{"class":164},[105,93107,494],{"class":115},[105,93109,816],{"class":164},[105,93111,122],{"class":115},[105,93113,93114,93117],{"class":107,"line":1171},[105,93115,93116],{"class":115},"np.sum(a)",[105,93118,93119],{"class":174},"#求和\n",[47,93121,93123],{"id":93122},"_112-max求最大值函数","11.2 max()求最大值函数",[96,93125,93127],{"className":30363,"code":93126,"language":30365,"meta":22,"style":22},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[102,93128,93129,93133,93153,93158,93163],{"__ignoreMap":22},[105,93130,93131],{"class":107,"line":108},[105,93132,93090],{"class":174},[105,93134,93135,93137,93139,93141,93143,93145,93147,93149,93151],{"class":107,"line":28},[105,93136,354],{"class":115},[105,93138,161],{"class":111},[105,93140,93099],{"class":115},[105,93142,333],{"class":164},[105,93144,494],{"class":115},[105,93146,427],{"class":164},[105,93148,494],{"class":115},[105,93150,816],{"class":164},[105,93152,122],{"class":115},[105,93154,93155],{"class":107,"line":1171},[105,93156,93157],{"class":115},"np.max(a)\n",[105,93159,93160],{"class":107,"line":1186},[105,93161,93162],{"class":174},"#最大索引(求最大元素的索引)arg\n",[105,93164,93165],{"class":107,"line":1192},[105,93166,93167],{"class":115},"np.argmax(a)\n",[96,93169,93171],{"className":30363,"code":93170,"language":30365,"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",[102,93172,93173,93194,93214,93218],{"__ignoreMap":22},[105,93174,93175,93177,93179,93182,93184,93186,93188,93190,93192],{"class":107,"line":108},[105,93176,10911],{"class":115},[105,93178,161],{"class":111},[105,93180,93181],{"class":115}," np.array([",[105,93183,333],{"class":164},[105,93185,12427],{"class":115},[105,93187,435],{"class":164},[105,93189,12427],{"class":115},[105,93191,187],{"class":164},[105,93193,4648],{"class":115},[105,93195,93196,93198,93200,93202,93204,93206,93208,93210,93212],{"class":107,"line":28},[105,93197,10937],{"class":115},[105,93199,161],{"class":111},[105,93201,93181],{"class":115},[105,93203,187],{"class":164},[105,93205,12427],{"class":115},[105,93207,193],{"class":164},[105,93209,12427],{"class":115},[105,93211,409],{"class":164},[105,93213,4648],{"class":115},[105,93215,93216],{"class":107,"line":1171},[105,93217,2391],{"emptyLinePlaceholder":32},[105,93219,93220,93222,93225],{"class":107,"line":1186},[105,93221,30400],{"class":164},[105,93223,93224],{"class":115},"(np.maximum(a, b))   ",[105,93226,93227],{"class":174},"# [3 5 4]，每个位置上取较大值\n",[47,93229,93231],{"id":93230},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93233,93234],{},"①一维数组：",[96,93236,93238],{"className":30363,"code":93237,"language":30365,"meta":22,"style":22},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[102,93239,93240,93244,93264,93269],{"__ignoreMap":22},[105,93241,93242],{"class":107,"line":108},[105,93243,93090],{"class":174},[105,93245,93246,93248,93250,93252,93254,93256,93258,93260,93262],{"class":107,"line":28},[105,93247,354],{"class":115},[105,93249,161],{"class":111},[105,93251,93099],{"class":115},[105,93253,333],{"class":164},[105,93255,494],{"class":115},[105,93257,427],{"class":164},[105,93259,494],{"class":115},[105,93261,816],{"class":164},[105,93263,122],{"class":115},[105,93265,93266],{"class":107,"line":1171},[105,93267,93268],{"class":174},"#求平均值\n",[105,93270,93271],{"class":107,"line":1186},[105,93272,93273],{"class":115},"np.mean(a)\n",[14,93275,93276],{},"②二维数组",[96,93278,93280],{"className":30363,"code":93279,"language":30365,"meta":22,"style":22},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[102,93281,93282,93287,93312,93317],{"__ignoreMap":22},[105,93283,93284],{"class":107,"line":108},[105,93285,93286],{"class":174},"#二维数组\n",[105,93288,93289,93292,93294,93296,93298,93300,93302,93304,93306,93308,93310],{"class":107,"line":28},[105,93290,93291],{"class":115},"aa",[105,93293,161],{"class":111},[105,93295,92987],{"class":115},[105,93297,333],{"class":164},[105,93299,494],{"class":115},[105,93301,639],{"class":164},[105,93303,92992],{"class":115},[105,93305,187],{"class":164},[105,93307,494],{"class":115},[105,93309,409],{"class":164},[105,93311,122],{"class":115},[105,93313,93314],{"class":107,"line":1171},[105,93315,93316],{"class":174},"#对数组中的所有数求平均\n",[105,93318,93319],{"class":107,"line":1186},[105,93320,93321],{"class":115},"np.mean(aa)\n",[47,93323,93325],{"id":93324},"_114-median求中位数函数","11.4 median()求中位数函数",[96,93327,93329],{"className":30363,"code":93328,"language":30365,"meta":22,"style":22},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[102,93330,93331,93336,93352,93357],{"__ignoreMap":22},[105,93332,93333],{"class":107,"line":108},[105,93334,93335],{"class":174},"#求中位数\n",[105,93337,93338,93340,93342,93344,93346,93348,93350],{"class":107,"line":28},[105,93339,379],{"class":115},[105,93341,161],{"class":111},[105,93343,92987],{"class":115},[105,93345,333],{"class":164},[105,93347,494],{"class":115},[105,93349,562],{"class":164},[105,93351,122],{"class":115},[105,93353,93354],{"class":107,"line":1171},[105,93355,93356],{"class":115},"np.median(b)\n",[105,93358,93359],{"class":107,"line":1186},[105,93360,93361],{"class":174},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[47,93363,93365],{"id":93364},"_115-power求幂运算函数","11.5 power()求幂运算函数",[96,93367,93369],{"className":30363,"code":93368,"language":30365,"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",[102,93370,93371,93387,93392,93397,93406,93411,93420],{"__ignoreMap":22},[105,93372,93373,93375,93377,93379,93381,93383,93385],{"class":107,"line":108},[105,93374,379],{"class":115},[105,93376,161],{"class":111},[105,93378,92987],{"class":115},[105,93380,333],{"class":164},[105,93382,494],{"class":115},[105,93384,562],{"class":164},[105,93386,122],{"class":115},[105,93388,93389],{"class":107,"line":28},[105,93390,93391],{"class":174},"#幂运算\n",[105,93393,93394],{"class":107,"line":1171},[105,93395,93396],{"class":174},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[105,93398,93399,93402,93404],{"class":107,"line":1186},[105,93400,93401],{"class":115},"np.power(b,",[105,93403,193],{"class":164},[105,93405,122],{"class":115},[105,93407,93408],{"class":107,"line":1192},[105,93409,93410],{"class":174},"#或者以下代码，将数据存储起来\n",[105,93412,93413,93415,93417],{"class":107,"line":1206},[105,93414,961],{"class":115},[105,93416,161],{"class":111},[105,93418,93419],{"class":115},"np.empty_like(b)\n",[105,93421,93422,93424,93426,93428,93430,93432],{"class":107,"line":1212},[105,93423,93401],{"class":115},[105,93425,193],{"class":164},[105,93427,494],{"class":115},[105,93429,93039],{"class":5208},[105,93431,161],{"class":111},[105,93433,93434],{"class":115},"y)\n",[47,93436,93438],{"id":93437},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[96,93440,93442],{"className":30363,"code":93441,"language":30365,"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",[102,93443,93444,93460,93465,93470,93474,93492],{"__ignoreMap":22},[105,93445,93446,93448,93450,93452,93454,93456,93458],{"class":107,"line":108},[105,93447,379],{"class":115},[105,93449,161],{"class":111},[105,93451,92987],{"class":115},[105,93453,333],{"class":164},[105,93455,494],{"class":115},[105,93457,562],{"class":164},[105,93459,122],{"class":115},[105,93461,93462],{"class":107,"line":28},[105,93463,93464],{"class":174},"#开方\n",[105,93466,93467],{"class":107,"line":1171},[105,93468,93469],{"class":115},"np.sqrt(b)\n",[105,93471,93472],{"class":107,"line":1186},[105,93473,93410],{"class":174},[105,93475,93476,93478,93480,93483,93486,93488,93490],{"class":107,"line":1192},[105,93477,961],{"class":115},[105,93479,161],{"class":111},[105,93481,93482],{"class":115},"np.empty_like(b,",[105,93484,93485],{"class":5208},"dtype",[105,93487,161],{"class":111},[105,93489,155],{"class":164},[105,93491,122],{"class":115},[105,93493,93494,93497,93499,93501],{"class":107,"line":1206},[105,93495,93496],{"class":115},"np.sqrt(b,",[105,93498,93039],{"class":5208},[105,93500,161],{"class":111},[105,93502,93434],{"class":115},[47,93504,93506],{"id":93505},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93508,93509],{},"对数组中的元素累计求和，可指定轴",[14,93511,93512],{},"#累计求和的意思是：",[14,93514,93515],{},"a = np.array([1, 2, 3, 4])",[14,93517,93518],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[96,93520,93522],{"className":30363,"code":93521,"language":30365,"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",[102,93523,93524,93540,93545,93550],{"__ignoreMap":22},[105,93525,93526,93528,93530,93532,93534,93536,93538],{"class":107,"line":108},[105,93527,379],{"class":115},[105,93529,161],{"class":111},[105,93531,92987],{"class":115},[105,93533,333],{"class":164},[105,93535,494],{"class":115},[105,93537,562],{"class":164},[105,93539,122],{"class":115},[105,93541,93542],{"class":107,"line":28},[105,93543,93544],{"class":115},"np.cumsum(b)\n",[105,93546,93547],{"class":107,"line":1171},[105,93548,93549],{"class":174},"#结果：\n",[105,93551,93552],{"class":107,"line":1186},[105,93553,93554],{"class":174},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[47,93556,93558],{"id":93557},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[96,93560,93562],{"className":30363,"code":93561,"language":30365,"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",[102,93563,93564,93580,93585,93590,93594],{"__ignoreMap":22},[105,93565,93566,93568,93570,93572,93574,93576,93578],{"class":107,"line":108},[105,93567,379],{"class":115},[105,93569,161],{"class":111},[105,93571,92987],{"class":115},[105,93573,333],{"class":164},[105,93575,494],{"class":115},[105,93577,562],{"class":164},[105,93579,122],{"class":115},[105,93581,93582],{"class":107,"line":28},[105,93583,93584],{"class":174},"#对数组中的元素累计求积，可指定轴\n",[105,93586,93587],{"class":107,"line":1171},[105,93588,93589],{"class":115},"np.cumprod(b)\n",[105,93591,93592],{"class":107,"line":1186},[105,93593,93549],{"class":174},[105,93595,93596],{"class":107,"line":1192},[105,93597,93598],{"class":174},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[47,93600,93602],{"id":93601},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[96,93604,93606],{"className":30363,"code":93605,"language":30365,"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",[102,93607,93608,93613,93661,93666,93670],{"__ignoreMap":22},[105,93609,93610],{"class":107,"line":108},[105,93611,93612],{"class":174},"#删除数组中的重复数据，并对数据进行排序\n",[105,93614,93615,93617,93619,93621,93623,93625,93627,93629,93631,93633,93635,93637,93639,93641,93643,93645,93647,93649,93651,93653,93655,93657,93659],{"class":107,"line":28},[105,93616,354],{"class":115},[105,93618,161],{"class":111},[105,93620,93009],{"class":115},[105,93622,333],{"class":164},[105,93624,494],{"class":115},[105,93626,193],{"class":164},[105,93628,494],{"class":115},[105,93630,187],{"class":164},[105,93632,494],{"class":115},[105,93634,614],{"class":164},[105,93636,494],{"class":115},[105,93638,187],{"class":164},[105,93640,494],{"class":115},[105,93642,562],{"class":164},[105,93644,494],{"class":115},[105,93646,313],{"class":164},[105,93648,494],{"class":115},[105,93650,307],{"class":164},[105,93652,494],{"class":115},[105,93654,891],{"class":164},[105,93656,494],{"class":115},[105,93658,409],{"class":164},[105,93660,4648],{"class":115},[105,93662,93663],{"class":107,"line":1171},[105,93664,93665],{"class":115},"np.unique(a)\n",[105,93667,93668],{"class":107,"line":1186},[105,93669,93549],{"class":174},[105,93671,93672],{"class":107,"line":1192},[105,93673,93674],{"class":174},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93676,93677],{},"升序形式排序",[47,93679,93681],{"id":93680},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[96,93683,93685],{"className":30363,"code":93684,"language":30365,"meta":22,"style":22},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[102,93686,93687,93735,93740],{"__ignoreMap":22},[105,93688,93689,93691,93693,93695,93697,93699,93701,93703,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723,93725,93727,93729,93731,93733],{"class":107,"line":108},[105,93690,354],{"class":115},[105,93692,161],{"class":111},[105,93694,93009],{"class":115},[105,93696,333],{"class":164},[105,93698,494],{"class":115},[105,93700,193],{"class":164},[105,93702,494],{"class":115},[105,93704,187],{"class":164},[105,93706,494],{"class":115},[105,93708,614],{"class":164},[105,93710,494],{"class":115},[105,93712,187],{"class":164},[105,93714,494],{"class":115},[105,93716,562],{"class":164},[105,93718,494],{"class":115},[105,93720,313],{"class":164},[105,93722,494],{"class":115},[105,93724,307],{"class":164},[105,93726,494],{"class":115},[105,93728,891],{"class":164},[105,93730,494],{"class":115},[105,93732,409],{"class":164},[105,93734,4648],{"class":115},[105,93736,93737],{"class":107,"line":28},[105,93738,93739],{"class":174},"#返回数组中非零元素的索引\n",[105,93741,93742],{"class":107,"line":1171},[105,93743,93744],{"class":115},"np.nonzero(a)\n",[47,93746,93748],{"id":93747},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[96,93750,93752],{"className":30363,"code":93751,"language":30365,"meta":22,"style":22},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[102,93753,93754,93802,93807],{"__ignoreMap":22},[105,93755,93756,93758,93760,93762,93764,93766,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794,93796,93798,93800],{"class":107,"line":108},[105,93757,354],{"class":115},[105,93759,161],{"class":111},[105,93761,93009],{"class":115},[105,93763,333],{"class":164},[105,93765,494],{"class":115},[105,93767,193],{"class":164},[105,93769,494],{"class":115},[105,93771,187],{"class":164},[105,93773,494],{"class":115},[105,93775,614],{"class":164},[105,93777,494],{"class":115},[105,93779,187],{"class":164},[105,93781,494],{"class":115},[105,93783,562],{"class":164},[105,93785,494],{"class":115},[105,93787,313],{"class":164},[105,93789,494],{"class":115},[105,93791,307],{"class":164},[105,93793,494],{"class":115},[105,93795,891],{"class":164},[105,93797,494],{"class":115},[105,93799,409],{"class":164},[105,93801,4648],{"class":115},[105,93803,93804],{"class":107,"line":28},[105,93805,93806],{"class":174},"#计算一组数中最大值与最小值的差，可指定轴\n",[105,93808,93809],{"class":107,"line":1171},[105,93810,93811],{"class":115},"np.ptp(a)\n",[5118,93813,93814],{},"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":28,"depth":28,"links":93816},[93817,93818,93819,93820,93821,93822,93823,93824,93825,93826,93827],{"id":93079,"depth":28,"text":93080},{"id":93122,"depth":28,"text":93123},{"id":93230,"depth":28,"text":93231},{"id":93324,"depth":28,"text":93325},{"id":93364,"depth":28,"text":93365},{"id":93437,"depth":28,"text":93438},{"id":93505,"depth":28,"text":93506},{"id":93557,"depth":28,"text":93558},{"id":93601,"depth":28,"text":93602},{"id":93680,"depth":28,"text":93681},{"id":93747,"depth":28,"text":93748},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93065,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93834,"title":93835,"body":93836,"description":23369,"extension":30,"meta":94491,"navigation":32,"path":94492,"seo":94493,"stem":94494,"__hash__":94495},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93837,"toc":94479},[93838,93841,93845,93848,94064,94068,94071,94280,94284,94350,94355,94359,94362,94365,94403,94407,94410,94415,94419,94422,94425,94430,94434,94437,94441,94444,94447,94452,94456,94459,94462,94467,94471,94476],[10,93839,93835],{"id":93840},"_12其他常用函数",[47,93842,93844],{"id":93843},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93846,93847],{},"将数组的数据按照行列复制扩展",[96,93849,93851],{"className":30363,"code":93850,"language":30365,"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",[102,93852,93853,93869,93878,93882,93887,93892,93905,93909,93914,93919,93924,93928,93933,93957,93969,93973,93977,93982,93987,93992,93997,94001,94014,94018,94022,94027,94032,94037,94042,94047,94051,94055,94060],{"__ignoreMap":22},[105,93854,93855,93857,93859,93861,93863,93865,93867],{"class":107,"line":108},[105,93856,354],{"class":115},[105,93858,161],{"class":111},[105,93860,92987],{"class":115},[105,93862,333],{"class":164},[105,93864,494],{"class":115},[105,93866,435],{"class":164},[105,93868,122],{"class":115},[105,93870,93871,93874,93876],{"class":107,"line":28},[105,93872,93873],{"class":115},"np.tile(a,",[105,93875,193],{"class":164},[105,93877,122],{"class":115},[105,93879,93880],{"class":107,"line":1171},[105,93881,93549],{"class":174},[105,93883,93884],{"class":107,"line":1186},[105,93885,93886],{"class":174},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[105,93888,93889],{"class":107,"line":1192},[105,93890,93891],{"class":174},"#行复制两次，列复制三次\n",[105,93893,93894,93897,93899,93901,93903],{"class":107,"line":1206},[105,93895,93896],{"class":115},"np.tile(a,(",[105,93898,193],{"class":164},[105,93900,494],{"class":115},[105,93902,187],{"class":164},[105,93904,30482],{"class":115},[105,93906,93907],{"class":107,"line":1212},[105,93908,93549],{"class":174},[105,93910,93911],{"class":107,"line":1303},[105,93912,93913],{"class":220},"'''\n",[105,93915,93916],{"class":107,"line":1309},[105,93917,93918],{"class":220},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[105,93920,93921],{"class":107,"line":1321},[105,93922,93923],{"class":220},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[105,93925,93926],{"class":107,"line":1603},[105,93927,93913],{"class":220},[105,93929,93930],{"class":107,"line":1608},[105,93931,93932],{"class":174},"#创建二维数组\n",[105,93934,93935,93937,93939,93941,93943,93945,93947,93949,93951,93953,93955],{"class":107,"line":1614},[105,93936,93291],{"class":115},[105,93938,161],{"class":111},[105,93940,92987],{"class":115},[105,93942,333],{"class":164},[105,93944,494],{"class":115},[105,93946,639],{"class":164},[105,93948,92992],{"class":115},[105,93950,409],{"class":164},[105,93952,494],{"class":115},[105,93954,187],{"class":164},[105,93956,122],{"class":115},[105,93958,93959,93962,93964,93966],{"class":107,"line":1619},[105,93960,93961],{"class":115},"np.tile(aa,",[105,93963,193],{"class":164},[105,93965,545],{"class":115},[105,93967,93968],{"class":174},"#一个数的时候就是行\n",[105,93970,93971],{"class":107,"line":1633},[105,93972,93549],{"class":174},[105,93974,93975],{"class":107,"line":1638},[105,93976,93913],{"class":220},[105,93978,93979],{"class":107,"line":1644},[105,93980,93981],{"class":220},"array([[ 1,  2,  3,  1,  2,  3],\n",[105,93983,93984],{"class":107,"line":1665},[105,93985,93986],{"class":220},"       [ 4,  5,  6,  4,  5,  6],\n",[105,93988,93989],{"class":107,"line":1670},[105,93990,93991],{"class":220},"       [ 7,  8,  9,  7,  8,  9],\n",[105,93993,93994],{"class":107,"line":1684},[105,93995,93996],{"class":220},"       [10, 11, 12, 10, 11, 12]])\n",[105,93998,93999],{"class":107,"line":1689},[105,94000,93913],{"class":220},[105,94002,94003,94006,94008,94010,94012],{"class":107,"line":1718},[105,94004,94005],{"class":115},"np.tile(aa,(",[105,94007,193],{"class":164},[105,94009,494],{"class":115},[105,94011,187],{"class":164},[105,94013,30482],{"class":115},[105,94015,94016],{"class":107,"line":1723},[105,94017,93549],{"class":174},[105,94019,94020],{"class":107,"line":1740},[105,94021,93913],{"class":220},[105,94023,94024],{"class":107,"line":1745},[105,94025,94026],{"class":220},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[105,94028,94029],{"class":107,"line":1750},[105,94030,94031],{"class":220},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[105,94033,94034],{"class":107,"line":1755},[105,94035,94036],{"class":220},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[105,94038,94039],{"class":107,"line":1769},[105,94040,94041],{"class":220},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[105,94043,94044],{"class":107,"line":1774},[105,94045,94046],{"class":220},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[105,94048,94049],{"class":107,"line":2568},[105,94050,94031],{"class":220},[105,94052,94053],{"class":107,"line":2582},[105,94054,94036],{"class":220},[105,94056,94057],{"class":107,"line":2590},[105,94058,94059],{"class":220},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[105,94061,94062],{"class":107,"line":2595},[105,94063,93913],{"class":220},[47,94065,94067],{"id":94066},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94069,94070],{},"repeat()将数组中的每个元素重复若干次",[96,94072,94074],{"className":30363,"code":94073,"language":30365,"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",[102,94075,94076,94092,94101,94105,94110,94134,94139,94148,94152,94157,94161,94166,94182,94186,94190,94195,94200,94205,94209,94214,94218,94223,94228,94232,94248,94252,94256,94261,94266,94271,94276],{"__ignoreMap":22},[105,94077,94078,94080,94082,94084,94086,94088,94090],{"class":107,"line":108},[105,94079,354],{"class":115},[105,94081,161],{"class":111},[105,94083,92987],{"class":115},[105,94085,333],{"class":164},[105,94087,494],{"class":115},[105,94089,435],{"class":164},[105,94091,122],{"class":115},[105,94093,94094,94097,94099],{"class":107,"line":28},[105,94095,94096],{"class":115},"np.repeat(a,",[105,94098,187],{"class":164},[105,94100,122],{"class":115},[105,94102,94103],{"class":107,"line":1171},[105,94104,93549],{"class":174},[105,94106,94107],{"class":107,"line":1186},[105,94108,94109],{"class":174},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[105,94111,94112,94114,94116,94118,94120,94122,94124,94126,94128,94130,94132],{"class":107,"line":1192},[105,94113,93291],{"class":115},[105,94115,161],{"class":111},[105,94117,92987],{"class":115},[105,94119,333],{"class":164},[105,94121,494],{"class":115},[105,94123,639],{"class":164},[105,94125,92992],{"class":115},[105,94127,409],{"class":164},[105,94129,494],{"class":115},[105,94131,187],{"class":164},[105,94133,122],{"class":115},[105,94135,94136],{"class":107,"line":1206},[105,94137,94138],{"class":174},"#这个重复之后二维变成一维\n",[105,94140,94141,94144,94146],{"class":107,"line":1212},[105,94142,94143],{"class":115},"np.repeat(aa,",[105,94145,193],{"class":164},[105,94147,122],{"class":115},[105,94149,94150],{"class":107,"line":1303},[105,94151,93913],{"class":220},[105,94153,94154],{"class":107,"line":1309},[105,94155,94156],{"class":220},"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",[105,94158,94159],{"class":107,"line":1321},[105,94160,93913],{"class":220},[105,94162,94163],{"class":107,"line":1603},[105,94164,94165],{"class":174},"#指定axis\n",[105,94167,94168,94170,94172,94174,94176,94178,94180],{"class":107,"line":1608},[105,94169,94143],{"class":115},[105,94171,193],{"class":164},[105,94173,494],{"class":115},[105,94175,47499],{"class":5208},[105,94177,161],{"class":111},[105,94179,307],{"class":164},[105,94181,122],{"class":115},[105,94183,94184],{"class":107,"line":1614},[105,94185,93549],{"class":174},[105,94187,94188],{"class":107,"line":1619},[105,94189,93913],{"class":220},[105,94191,94192],{"class":107,"line":1633},[105,94193,94194],{"class":220},"array([[ 1,  2,  3],\n",[105,94196,94197],{"class":107,"line":1638},[105,94198,94199],{"class":220},"       [ 1,  2,  3],\n",[105,94201,94202],{"class":107,"line":1644},[105,94203,94204],{"class":220},"       [ 4,  5,  6],\n",[105,94206,94207],{"class":107,"line":1665},[105,94208,94204],{"class":220},[105,94210,94211],{"class":107,"line":1670},[105,94212,94213],{"class":220},"       [ 7,  8,  9],\n",[105,94215,94216],{"class":107,"line":1684},[105,94217,94213],{"class":220},[105,94219,94220],{"class":107,"line":1689},[105,94221,94222],{"class":220},"       [10, 11, 12],\n",[105,94224,94225],{"class":107,"line":1718},[105,94226,94227],{"class":220},"       [10, 11, 12]])\n",[105,94229,94230],{"class":107,"line":1723},[105,94231,93913],{"class":220},[105,94233,94234,94236,94238,94240,94242,94244,94246],{"class":107,"line":1740},[105,94235,94143],{"class":115},[105,94237,193],{"class":164},[105,94239,494],{"class":115},[105,94241,47499],{"class":5208},[105,94243,161],{"class":111},[105,94245,333],{"class":164},[105,94247,122],{"class":115},[105,94249,94250],{"class":107,"line":1745},[105,94251,93549],{"class":174},[105,94253,94254],{"class":107,"line":1750},[105,94255,93913],{"class":220},[105,94257,94258],{"class":107,"line":1755},[105,94259,94260],{"class":220},"array([[ 1,  1,  2,  2,  3,  3],\n",[105,94262,94263],{"class":107,"line":1769},[105,94264,94265],{"class":220},"       [ 4,  4,  5,  5,  6,  6],\n",[105,94267,94268],{"class":107,"line":1774},[105,94269,94270],{"class":220},"       [ 7,  7,  8,  8,  9,  9],\n",[105,94272,94273],{"class":107,"line":2568},[105,94274,94275],{"class":220},"       [10, 10, 11, 11, 12, 12]])\n",[105,94277,94278],{"class":107,"line":2582},[105,94279,93913],{"class":220},[47,94281,94283],{"id":94282},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[96,94285,94287],{"className":30363,"code":94286,"language":30365,"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",[102,94288,94289,94305,94310,94322,94326,94331,94341,94345],{"__ignoreMap":22},[105,94290,94291,94293,94295,94297,94299,94301,94303],{"class":107,"line":108},[105,94292,354],{"class":115},[105,94294,161],{"class":111},[105,94296,92987],{"class":115},[105,94298,333],{"class":164},[105,94300,494],{"class":115},[105,94302,435],{"class":164},[105,94304,122],{"class":115},[105,94306,94307],{"class":107,"line":28},[105,94308,94309],{"class":174},"#array([，2，3，4])\n",[105,94311,94312,94315,94317,94319],{"class":107,"line":1171},[105,94313,94314],{"class":115},"np.roll(a,",[105,94316,193],{"class":164},[105,94318,545],{"class":115},[105,94320,94321],{"class":174},"#传正数向后调多少位，传负数向前调多少位\n",[105,94323,94324],{"class":107,"line":1186},[105,94325,93549],{"class":174},[105,94327,94328],{"class":107,"line":1192},[105,94329,94330],{"class":174},"#array([3, 4, 1, 2])\n",[105,94332,94333,94335,94337,94339],{"class":107,"line":1206},[105,94334,94314],{"class":115},[105,94336,648],{"class":111},[105,94338,333],{"class":164},[105,94340,122],{"class":115},[105,94342,94343],{"class":107,"line":1212},[105,94344,93549],{"class":174},[105,94346,94347],{"class":107,"line":1303},[105,94348,94349],{"class":174},"#array([2, 3, 4, 1])\n",[14,94351,94352],{},[20,94353],{"alt":22,"src":94354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[47,94356,94358],{"id":94357},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94360,94361],{},"resize()重新调整数组的大小",[14,94363,94364],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[96,94366,94368],{"className":30363,"code":94367,"language":30365,"meta":22,"style":22},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[102,94369,94370,94375,94388],{"__ignoreMap":22},[105,94371,94372],{"class":107,"line":108},[105,94373,94374],{"class":174},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[105,94376,94377,94380,94382,94384,94386],{"class":107,"line":28},[105,94378,94379],{"class":115},"np.resize(aa,(",[105,94381,193],{"class":164},[105,94383,494],{"class":115},[105,94385,460],{"class":164},[105,94387,30482],{"class":115},[105,94389,94390,94392,94394,94396,94398,94400],{"class":107,"line":1171},[105,94391,94379],{"class":115},[105,94393,193],{"class":164},[105,94395,494],{"class":115},[105,94397,536],{"class":164},[105,94399,82756],{"class":115},[105,94401,94402],{"class":174},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[47,94404,94406],{"id":94405},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94408,94409],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94411,94412],{},[20,94413],{"alt":22,"src":94414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[47,94416,94418],{"id":94417},"_126-保存加载文件","12.6 保存加载文件",[14,94420,94421],{},"savetxt():将数据保存到txt文件中",[14,94423,94424],{},"loadtxt():从文件加载数据",[14,94426,94427],{},[20,94428],{"alt":22,"src":94429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[47,94431,94433],{"id":94432},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94435,94436],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[47,94438,94440],{"id":94439},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94442,94443],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94445,94446],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94448,94449],{},[20,94450],{"alt":22,"src":94451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[47,94453,94455],{"id":94454},"_129-where语句","12.9 where语句",[14,94457,94458],{},"np.where(条件,x,y)",[14,94460,94461],{},"如果条件为True,对应值为x,否则对应值为y",[14,94463,94464],{},[20,94465],{"alt":22,"src":94466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[47,94468,94470],{"id":94469},"_1210-dot矩阵","12.10 dot()矩阵",[14,94472,94473],{},[20,94474],{"alt":22,"src":94475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5118,94477,94478],{},"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":28,"depth":28,"links":94480},[94481,94482,94483,94484,94485,94486,94487,94488,94489,94490],{"id":93843,"depth":28,"text":93844},{"id":94066,"depth":28,"text":94067},{"id":94282,"depth":28,"text":94283},{"id":94357,"depth":28,"text":94358},{"id":94405,"depth":28,"text":94406},{"id":94417,"depth":28,"text":94418},{"id":94432,"depth":28,"text":94433},{"id":94439,"depth":28,"text":94440},{"id":94454,"depth":28,"text":94455},{"id":94469,"depth":28,"text":94470},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93835,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94497,"title":94498,"body":94499,"description":23369,"extension":30,"meta":94852,"navigation":32,"path":94853,"seo":94854,"stem":94855,"__hash__":94856},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94500,"toc":94850},[94501,94504,94507,94510,94513,94516,94581,94583,94847],[10,94502,94498],{"id":94503},"_13数组排序",[14,94505,94506],{},"排序主要用到的方法是np.sort和np.argsort",[14,94508,94509],{},"其中np.sort()对数组直接排序",[14,94511,94512],{},"而np.argsort()是返回排序后的原始索引",[14,94514,94515],{},"①一维数组",[96,94517,94519],{"className":30363,"code":94518,"language":30365,"meta":22,"style":22},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[102,94520,94521,94525,94565,94573],{"__ignoreMap":22},[105,94522,94523],{"class":107,"line":108},[105,94524,93090],{"class":174},[105,94526,94527,94529,94531,94533,94535,94537,94539,94541,94543,94545,94547,94549,94551,94553,94555,94557,94559,94561,94563],{"class":107,"line":28},[105,94528,354],{"class":115},[105,94530,161],{"class":111},[105,94532,93009],{"class":115},[105,94534,187],{"class":164},[105,94536,494],{"class":115},[105,94538,614],{"class":164},[105,94540,494],{"class":115},[105,94542,511],{"class":164},[105,94544,494],{"class":115},[105,94546,891],{"class":164},[105,94548,494],{"class":115},[105,94550,395],{"class":164},[105,94552,494],{"class":115},[105,94554,1009],{"class":164},[105,94556,494],{"class":115},[105,94558,460],{"class":164},[105,94560,494],{"class":115},[105,94562,562],{"class":164},[105,94564,4648],{"class":115},[105,94566,94567,94570],{"class":107,"line":1171},[105,94568,94569],{"class":115},"np.sort(a)",[105,94571,94572],{"class":174},"#升序排序\n",[105,94574,94575,94578],{"class":107,"line":1186},[105,94576,94577],{"class":115},"np.argsort(a)",[105,94579,94580],{"class":174},"#按照元素大小来索引排序\n",[14,94582,93276],{},[96,94584,94586],{"className":30363,"code":94585,"language":30365,"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",[102,94587,94588,94600,94626,94631,94635,94640,94645,94650,94655,94659,94667,94671,94676,94681,94686,94691,94695,94700,94713,94717,94722,94727,94732,94737,94741,94746,94758,94762,94766,94770,94774,94778,94782,94787,94802,94807,94816,94821,94825,94829,94834,94838,94843],{"__ignoreMap":22},[105,94589,94590,94593,94595,94597],{"class":107,"line":108},[105,94591,94592],{"class":115},"np.random.seed(",[105,94594,307],{"class":164},[105,94596,545],{"class":115},[105,94598,94599],{"class":174},"#保证每次值一样\n",[105,94601,94602,94604,94606,94608,94610,94612,94614,94616,94618,94620,94622,94624],{"class":107,"line":28},[105,94603,93291],{"class":115},[105,94605,161],{"class":111},[105,94607,93099],{"class":115},[105,94609,427],{"class":164},[105,94611,494],{"class":115},[105,94613,31481],{"class":5208},[105,94615,161],{"class":111},[105,94617,116],{"class":115},[105,94619,409],{"class":164},[105,94621,494],{"class":115},[105,94623,460],{"class":164},[105,94625,30482],{"class":115},[105,94627,94628],{"class":107,"line":1171},[105,94629,94630],{"class":174},"#原数组：\n",[105,94632,94633],{"class":107,"line":1186},[105,94634,93913],{"class":220},[105,94636,94637],{"class":107,"line":1192},[105,94638,94639],{"class":220},"array([[44, 47, 64, 67, 67,  9],\n",[105,94641,94642],{"class":107,"line":1206},[105,94643,94644],{"class":220},"       [83, 21, 36, 87, 70, 88],\n",[105,94646,94647],{"class":107,"line":1212},[105,94648,94649],{"class":220},"       [88, 12, 58, 65, 39, 87],\n",[105,94651,94652],{"class":107,"line":1303},[105,94653,94654],{"class":220},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[105,94656,94657],{"class":107,"line":1309},[105,94658,93913],{"class":220},[105,94660,94661,94664],{"class":107,"line":1321},[105,94662,94663],{"class":115},"np.sort(aa)",[105,94665,94666],{"class":174},"#每行进行了排序\n",[105,94668,94669],{"class":107,"line":1603},[105,94670,93913],{"class":220},[105,94672,94673],{"class":107,"line":1608},[105,94674,94675],{"class":220},"array([[ 9, 44, 47, 64, 67, 67],\n",[105,94677,94678],{"class":107,"line":1614},[105,94679,94680],{"class":220},"       [21, 36, 70, 83, 87, 88],\n",[105,94682,94683],{"class":107,"line":1619},[105,94684,94685],{"class":220},"       [12, 39, 58, 65, 87, 88],\n",[105,94687,94688],{"class":107,"line":1633},[105,94689,94690],{"class":220},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[105,94692,94693],{"class":107,"line":1638},[105,94694,93913],{"class":220},[105,94696,94697],{"class":107,"line":1644},[105,94698,94699],{"class":174},"#axis=0时\n",[105,94701,94702,94705,94707,94709,94711],{"class":107,"line":1665},[105,94703,94704],{"class":115},"np.sort(aa,",[105,94706,47499],{"class":5208},[105,94708,161],{"class":111},[105,94710,307],{"class":164},[105,94712,122],{"class":115},[105,94714,94715],{"class":107,"line":1670},[105,94716,93913],{"class":220},[105,94718,94719],{"class":107,"line":1684},[105,94720,94721],{"class":220},"array([[44, 12, 36, 37, 25,  9],\n",[105,94723,94724],{"class":107,"line":1689},[105,94725,94726],{"class":220},"       [46, 21, 58, 65, 39, 77],\n",[105,94728,94729],{"class":107,"line":1718},[105,94730,94731],{"class":220},"       [83, 47, 64, 67, 67, 87],\n",[105,94733,94734],{"class":107,"line":1723},[105,94735,94736],{"class":220},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[105,94738,94739],{"class":107,"line":1740},[105,94740,93913],{"class":220},[105,94742,94743],{"class":107,"line":1745},[105,94744,94745],{"class":174},"#axis=1时,为默认值\n",[105,94747,94748,94750,94752,94754,94756],{"class":107,"line":1750},[105,94749,94704],{"class":115},[105,94751,47499],{"class":5208},[105,94753,161],{"class":111},[105,94755,333],{"class":164},[105,94757,122],{"class":115},[105,94759,94760],{"class":107,"line":1755},[105,94761,93913],{"class":220},[105,94763,94764],{"class":107,"line":1769},[105,94765,94675],{"class":220},[105,94767,94768],{"class":107,"line":1774},[105,94769,94680],{"class":220},[105,94771,94772],{"class":107,"line":2568},[105,94773,94685],{"class":220},[105,94775,94776],{"class":107,"line":2582},[105,94777,94690],{"class":220},[105,94779,94780],{"class":107,"line":2590},[105,94781,93913],{"class":220},[105,94783,94784],{"class":107,"line":2595},[105,94785,94786],{"class":174},"#按最后一列排序\n",[105,94788,94789,94791,94793,94796,94798,94800],{"class":107,"line":2601},[105,94790,379],{"class":115},[105,94792,161],{"class":111},[105,94794,94795],{"class":115},"aa[:,",[105,94797,648],{"class":111},[105,94799,333],{"class":164},[105,94801,33231],{"class":115},[105,94803,94804],{"class":107,"line":2607},[105,94805,94806],{"class":174},"#获取最后一列排好序的索引\n",[105,94808,94809,94811,94813],{"class":107,"line":2612},[105,94810,74043],{"class":115},[105,94812,161],{"class":111},[105,94814,94815],{"class":115},"np.argsort(b)\n",[105,94817,94818],{"class":107,"line":7940},[105,94819,94820],{"class":115},"aa[index]\n",[105,94822,94823],{"class":107,"line":7964},[105,94824,93913],{"class":220},[105,94826,94827],{"class":107,"line":7969},[105,94828,94639],{"class":220},[105,94830,94831],{"class":107,"line":7975},[105,94832,94833],{"class":220},"       [46, 88, 81, 37, 25, 77],\n",[105,94835,94836],{"class":107,"line":8002},[105,94837,94649],{"class":220},[105,94839,94840],{"class":107,"line":8007},[105,94841,94842],{"class":220},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[105,94844,94845],{"class":107,"line":8013},[105,94846,93913],{"class":220},[5118,94848,94849],{},"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":28,"depth":28,"links":94851},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94498,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94858,"title":94859,"body":94860,"description":23369,"extension":30,"meta":94890,"navigation":32,"path":94891,"seo":94892,"stem":94893,"__hash__":94894},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94861,"toc":94888},[94862,94865,94868,94871,94874,94877,94880,94883],[10,94863,94859],{"id":94864},"_14广播机制",[14,94866,94867],{},"广播的规则：",[14,94869,94870],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94872,94873],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94875,94876],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94878,94879],{},"3.如果没有维度形状为1，则会引发异常",[14,94881,94882],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94884,94885],{},[20,94886],{"alt":22,"src":94887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":22,"searchDepth":28,"depth":28,"links":94889},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94859,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94896,"title":94897,"body":94898,"description":23369,"extension":30,"meta":94996,"navigation":32,"path":94997,"seo":94998,"stem":94999,"__hash__":95000},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94899,"toc":94994},[94900,94903,94906,94991],[10,94901,94897],{"id":94902},"_15比较掩码",[14,94904,94905],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[96,94907,94909],{"className":30363,"code":94908,"language":30365,"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",[102,94910,94911,94957,94968,94982,94986],{"__ignoreMap":22},[105,94912,94913,94915,94917,94920,94922,94924,94926,94928,94930,94932,94934,94936,94938,94940,94942,94944,94946,94948,94950,94952,94954],{"class":107,"line":108},[105,94914,354],{"class":115},[105,94916,161],{"class":111},[105,94918,94919],{"class":115},"np.array([[",[105,94921,333],{"class":164},[105,94923,494],{"class":115},[105,94925,193],{"class":164},[105,94927,494],{"class":115},[105,94929,187],{"class":164},[105,94931,48015],{"class":115},[105,94933,588],{"class":164},[105,94935,494],{"class":115},[105,94937,614],{"class":164},[105,94939,494],{"class":115},[105,94941,639],{"class":164},[105,94943,48015],{"class":115},[105,94945,841],{"class":164},[105,94947,494],{"class":115},[105,94949,866],{"class":164},[105,94951,494],{"class":115},[105,94953,891],{"class":164},[105,94955,94956],{"class":115},"]])\n",[105,94958,94959,94961,94963,94965],{"class":107,"line":28},[105,94960,354],{"class":115},[105,94962,1026],{"class":111},[105,94964,816],{"class":164},[105,94966,94967],{"class":174},"#结果是一个由True,False组成的数组\n",[105,94969,94970,94973,94975,94977,94979],{"class":107,"line":1171},[105,94971,94972],{"class":115},"a[a",[105,94974,1026],{"class":111},[105,94976,816],{"class":164},[105,94978,1056],{"class":115},[105,94980,94981],{"class":174},"#小于20的元素会存到这个数组中\n",[105,94983,94984],{"class":107,"line":1186},[105,94985,93549],{"class":174},[105,94987,94988],{"class":107,"line":1192},[105,94989,94990],{"class":174},"#array([ 1,  2,  3, 11, 12, 13])\n",[5118,94992,94993],{},"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":28,"depth":28,"links":94995},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94897,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95002,"title":95003,"body":95004,"description":23369,"extension":30,"meta":95096,"navigation":32,"path":95097,"seo":95098,"stem":95099,"__hash__":95100},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95005,"toc":95094},[95006,95009,95012,95015,95018,95021,95086,95091],[10,95007,95003],{"id":95008},"_16魔法命令time",[14,95010,95011],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95013,95014],{},"%:行模式",[14,95016,95017],{},"%%:单元格模式",[14,95019,95020],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[96,95022,95024],{"className":30363,"code":95023,"language":30365,"meta":22,"style":22},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[102,95025,95026,95031,95038,95043,95052,95065,95069,95077],{"__ignoreMap":22},[105,95027,95028],{"class":107,"line":108},[105,95029,95030],{"class":174},"#程序执行时间\n",[105,95032,95033,95035],{"class":107,"line":28},[105,95034,30377],{"class":111},[105,95036,95037],{"class":115}," time \n",[105,95039,95040],{"class":107,"line":1171},[105,95041,95042],{"class":174},"#获取时间\n",[105,95044,95045,95048,95050],{"class":107,"line":1186},[105,95046,95047],{"class":115},"start",[105,95049,161],{"class":111},[105,95051,32403],{"class":115},[105,95053,95054,95057,95060,95062],{"class":107,"line":1192},[105,95055,95056],{"class":115},"time.sleep(",[105,95058,95059],{"class":164},"0.4",[105,95061,545],{"class":115},[105,95063,95064],{"class":174},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[105,95066,95067],{"class":107,"line":1206},[105,95068,95042],{"class":174},[105,95070,95071,95073,95075],{"class":107,"line":1212},[105,95072,45786],{"class":115},[105,95074,161],{"class":111},[105,95076,32403],{"class":115},[105,95078,95079,95081,95083],{"class":107,"line":1303},[105,95080,45786],{"class":115},[105,95082,648],{"class":111},[105,95084,95085],{"class":115},"start\n",[14,95087,95088],{},[20,95089],{"alt":22,"src":95090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5118,95092,95093],{},"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":28,"depth":28,"links":95095},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95003,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95102,"title":95103,"body":95104,"description":23369,"extension":30,"meta":95139,"navigation":32,"path":95140,"seo":95141,"stem":95142,"__hash__":95143},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95105,"toc":95137},[95106,95109,95112,95115,95118,95121,95124,95127,95132],[10,95107,95103],{"id":95108},"_17魔法命令timeit",[14,95110,95111],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95113,95114],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95116,95117],{},"单元格模式：",[14,95119,95120],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95122,95123],{},"初始化语句执行次数由轮数来决定",[14,95125,95126],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95128,95129],{},[20,95130],{"alt":22,"src":95131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95133,95134],{},[20,95135],{"alt":22,"src":95136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":22,"searchDepth":28,"depth":28,"links":95138},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95103,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95145,"title":95146,"body":95147,"description":23369,"extension":30,"meta":95165,"navigation":32,"path":95166,"seo":95167,"stem":95168,"__hash__":95169},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95148,"toc":95163},[95149,95152,95155,95158],[10,95150,95146],{"id":95151},"_18魔法命令writefile和run",[14,95153,95154],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95156,95157],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95159,95160],{},[20,95161],{"alt":22,"src":95162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":22,"searchDepth":28,"depth":28,"links":95164},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95146,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95171,"title":95172,"body":95173,"description":23369,"extension":30,"meta":95226,"navigation":32,"path":95227,"seo":95228,"stem":95229,"__hash__":95230},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95174,"toc":95224},[95175,95178,95181,95183,95186,95189,95194,95197,95200,95203,95206,95209,95212,95215,95218,95221],[10,95176,95172],{"id":95177},"_19魔法命令memit",[14,95179,95180],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95182,24584],{},[14,95184,95185],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95187,95188],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95190,95191],{},[20,95192],{"alt":22,"src":95193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95195,95196],{},"补充：",[14,95198,95199],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95201,95202],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95204,95205],{},"解决方法：",[14,95207,95208],{},"1.cmd",[14,95210,95211],{},"2.依次输入以下代码：",[14,95213,95214],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95216,95217],{},"pip install --upgrade ipython",[14,95219,95220],{},"#升级 memory_profiler 和 setuptools",[14,95222,95223],{},"pip install --upgrade memory_profiler setuptools",{"title":22,"searchDepth":28,"depth":28,"links":95225},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95172,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95232,"title":95233,"body":95234,"description":23369,"extension":30,"meta":96880,"navigation":32,"path":96881,"seo":96882,"stem":96883,"__hash__":96884},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95235,"toc":96850},[95236,95239,95243,95247,95308,95311,95316,95320,95325,95330,95335,95340,95343,95348,95352,95356,95389,95392,95395,95398,95450,95453,95489,95492,95534,95538,95559,95561,95598,95600,95605,95607,95612,95616,95619,95647,95651,95655,95708,95712,95804,95808,95812,95815,95820,95824,95849,95854,95858,95861,95864,95867,95870,95873,95876,95879,95891,95895,95899,95902,95934,95937,95960,95963,95989,95992,96018,96021,96055,96058,96120,96124,96127,96131,96134,96160,96163,96166,96171,96174,96243,96245,96250,96311,96314,96325,96331,96336,96340,96343,96356,96360,96375,96377,96400,96402,96428,96431,96434,96437,96485,96487,96492,96496,96500,96527,96531,96558,96561,96566,96571,96661,96665,96723,96728,96731,96734,96776,96780,96836,96841,96844,96847],[10,95237,95233],{"id":95238},"_2创建数组",[47,95240,95242],{"id":95241},"_21-array函数创建数组","2.1 array()函数创建数组",[76,95244,95246],{"id":95245},"_221-函数语句","2.2.1 函数语句",[96,95248,95250],{"className":30363,"code":95249,"language":30365,"meta":22,"style":22},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[102,95251,95252],{"__ignoreMap":22},[105,95253,95254,95257,95260,95262,95264,95266,95268,95270,95273,95275,95278,95280,95283,95285,95287,95289,95292,95294,95297,95299,95302,95304,95306],{"class":107,"line":108},[105,95255,95256],{"class":115},"numpy.array(",[105,95258,95259],{"class":164},"object",[105,95261,12427],{"class":115},[105,95263,93485],{"class":5208},[105,95265,13556],{"class":111},[105,95267,38918],{"class":164},[105,95269,12427],{"class":115},[105,95271,95272],{"class":5208},"copy",[105,95274,13556],{"class":111},[105,95276,95277],{"class":164}," True",[105,95279,12427],{"class":115},[105,95281,95282],{"class":5208},"order",[105,95284,13556],{"class":111},[105,95286,38918],{"class":164},[105,95288,12427],{"class":115},[105,95290,95291],{"class":5208},"subok",[105,95293,13556],{"class":111},[105,95295,95296],{"class":164}," False",[105,95298,12427],{"class":115},[105,95300,95301],{"class":5208},"ndmin",[105,95303,13556],{"class":111},[105,95305,4084],{"class":164},[105,95307,122],{"class":115},[14,95309,95310],{},"参数：",[14,95312,95313],{},[20,95314],{"alt":22,"src":95315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[76,95317,95319],{"id":95318},"_222-实例","2.2.2 实例",[14,95321,95322],{},[20,95323],{"alt":22,"src":95324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95326,95327],{},[20,95328],{"alt":22,"src":95329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95331,95332],{},[20,95333],{"alt":22,"src":95334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95336,95337],{},[20,95338],{"alt":22,"src":95339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95341,95342],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95344,95345],{},[20,95346],{"alt":22,"src":95347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[47,95349,95351],{"id":95350},"_22-随机数创建数组","2.2 随机数创建数组",[76,95353,95355],{"id":95354},"_221-random语句","2.2.1 random语句",[96,95357,95359],{"className":30363,"code":95358,"language":30365,"meta":22,"style":22},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[102,95360,95361,95366,95371,95379,95384],{"__ignoreMap":22},[105,95362,95363],{"class":107,"line":108},[105,95364,95365],{"class":174},"#random.random()\n",[105,95367,95368],{"class":107,"line":28},[105,95369,95370],{"class":174},"#确定随机种子,就是每次运行结果是相同的\n",[105,95372,95373,95375,95377],{"class":107,"line":1171},[105,95374,94592],{"class":115},[105,95376,307],{"class":164},[105,95378,122],{"class":115},[105,95380,95381],{"class":107,"line":1186},[105,95382,95383],{"class":115},"np.random.random()\n",[105,95385,95386],{"class":107,"line":1192},[105,95387,95388],{"class":174},"#生成一个随机的数目\n",[14,95390,95391],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95393,95394],{},"可以指定数组形状 size",[14,95396,95397],{},"①生成一维数组",[96,95399,95401],{"className":30363,"code":95400,"language":30365,"meta":22,"style":22},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[102,95402,95403,95408,95421,95426,95442],{"__ignoreMap":22},[105,95404,95405],{"class":107,"line":108},[105,95406,95407],{"class":174},"#random.random(size())\n",[105,95409,95410,95413,95415,95417,95419],{"class":107,"line":28},[105,95411,95412],{"class":115},"np.random.random(",[105,95414,31481],{"class":5208},[105,95416,161],{"class":111},[105,95418,435],{"class":164},[105,95420,122],{"class":115},[105,95422,95423],{"class":107,"line":1171},[105,95424,95425],{"class":174},"#生成一位的五个元素\n",[105,95427,95428,95430,95432,95434,95436,95438,95440],{"class":107,"line":1186},[105,95429,354],{"class":115},[105,95431,161],{"class":111},[105,95433,95412],{"class":115},[105,95435,31481],{"class":5208},[105,95437,161],{"class":111},[105,95439,409],{"class":164},[105,95441,122],{"class":115},[105,95443,95444,95447],{"class":107,"line":1192},[105,95445,95446],{"class":115},"a.shape ",[105,95448,95449],{"class":174},"#输出数组形状\n",[14,95451,95452],{},"②生成二维数组",[96,95454,95456],{"className":30363,"code":95455,"language":30365,"meta":22,"style":22},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[102,95457,95458,95462,95484],{"__ignoreMap":22},[105,95459,95460],{"class":107,"line":108},[105,95461,93286],{"class":174},[105,95463,95464,95466,95468,95470,95472,95474,95476,95478,95480,95482],{"class":107,"line":28},[105,95465,93291],{"class":115},[105,95467,161],{"class":111},[105,95469,95412],{"class":115},[105,95471,31481],{"class":5208},[105,95473,161],{"class":111},[105,95475,116],{"class":115},[105,95477,409],{"class":164},[105,95479,494],{"class":115},[105,95481,435],{"class":164},[105,95483,30482],{"class":115},[105,95485,95486],{"class":107,"line":1171},[105,95487,95488],{"class":174},"#生成四行五列的数组\n",[14,95490,95491],{},"③生成三维数组",[96,95493,95495],{"className":30363,"code":95494,"language":30365,"meta":22,"style":22},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[102,95496,95497,95502,95529],{"__ignoreMap":22},[105,95498,95499],{"class":107,"line":108},[105,95500,95501],{"class":174},"#三维数组\n",[105,95503,95504,95507,95509,95511,95513,95515,95517,95519,95521,95523,95525,95527],{"class":107,"line":28},[105,95505,95506],{"class":115},"aaa",[105,95508,161],{"class":111},[105,95510,95412],{"class":115},[105,95512,31481],{"class":5208},[105,95514,161],{"class":111},[105,95516,116],{"class":115},[105,95518,193],{"class":164},[105,95520,494],{"class":115},[105,95522,187],{"class":164},[105,95524,494],{"class":115},[105,95526,409],{"class":164},[105,95528,30482],{"class":115},[105,95530,95531],{"class":107,"line":1171},[105,95532,95533],{"class":115},"aaa.shape\n",[76,95535,95537],{"id":95536},"_222-randint语句","2.2.2 randint语句",[96,95539,95541],{"className":30363,"code":95540,"language":30365,"meta":22,"style":22},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[102,95542,95543,95548],{"__ignoreMap":22},[105,95544,95545],{"class":107,"line":108},[105,95546,95547],{"class":174},"#生成随机的整数 random.randint(low,high,size)\n",[105,95549,95550,95552,95554,95556],{"class":107,"line":28},[105,95551,93099],{"class":115},[105,95553,435],{"class":164},[105,95555,13706],{"class":115},[105,95557,95558],{"class":174},"#0~5中的随机一个数\n",[14,95560,95397],{},[96,95562,95564],{"className":30363,"code":95563,"language":30365,"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",[102,95565,95566,95571,95593],{"__ignoreMap":22},[105,95567,95568],{"class":107,"line":108},[105,95569,95570],{"class":174},"#一维\n",[105,95572,95573,95575,95577,95579,95581,95583,95585,95587,95589,95591],{"class":107,"line":28},[105,95574,93099],{"class":115},[105,95576,333],{"class":164},[105,95578,494],{"class":115},[105,95580,588],{"class":164},[105,95582,494],{"class":115},[105,95584,31481],{"class":5208},[105,95586,161],{"class":111},[105,95588,116],{"class":115},[105,95590,562],{"class":164},[105,95592,30482],{"class":115},[105,95594,95595],{"class":107,"line":1171},[105,95596,95597],{"class":174},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95599,95452],{},[14,95601,95602],{},[20,95603],{"alt":22,"src":95604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95606,95491],{},[14,95608,95609],{},[20,95610],{"alt":22,"src":95611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[76,95613,95615],{"id":95614},"_222-rand语句","2.2.2 rand语句",[14,95617,95618],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[96,95620,95622],{"className":30363,"code":95621,"language":30365,"meta":22,"style":22},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[102,95623,95624,95637,95642],{"__ignoreMap":22},[105,95625,95626,95629,95631,95633,95635],{"class":107,"line":108},[105,95627,95628],{"class":115},"np.random.rand(",[105,95630,427],{"class":164},[105,95632,494],{"class":115},[105,95634,562],{"class":164},[105,95636,122],{"class":115},[105,95638,95639],{"class":107,"line":28},[105,95640,95641],{"class":174},"#第一个参数100：行数，表示有100个样本\n",[105,95643,95644],{"class":107,"line":1171},[105,95645,95646],{"class":174},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[47,95648,95650],{"id":95649},"_23-arange创建数组","2.3 arange()创建数组",[76,95652,95654],{"id":95653},"_231-函数语句","2.3.1 函数语句",[96,95656,95658],{"className":30363,"code":95657,"language":30365,"meta":22,"style":22},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[102,95659,95660,95674,95679,95684,95689,95694,95699,95704],{"__ignoreMap":22},[105,95661,95662,95665,95667,95669,95672],{"class":107,"line":108},[105,95663,95664],{"class":115},"numpy.arange([start,] stop[, step], ",[105,95666,93485],{"class":5208},[105,95668,161],{"class":111},[105,95670,95671],{"class":164},"None",[105,95673,122],{"class":115},[105,95675,95676],{"class":107,"line":28},[105,95677,95678],{"class":174},"#参数\n",[105,95680,95681],{"class":107,"line":1171},[105,95682,95683],{"class":220},"\"\"\"\n",[105,95685,95686],{"class":107,"line":1186},[105,95687,95688],{"class":220},"start:起始值，可选，默认从 0 开始。\n",[105,95690,95691],{"class":107,"line":1192},[105,95692,95693],{"class":220},"stop:结束值（不包含该值）。\n",[105,95695,95696],{"class":107,"line":1206},[105,95697,95698],{"class":220},"step:步长，可选，默认是 1。可以为浮点数。\n",[105,95700,95701],{"class":107,"line":1212},[105,95702,95703],{"class":220},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[105,95705,95706],{"class":107,"line":1303},[105,95707,95683],{"class":220},[76,95709,95711],{"id":95710},"_232-实例","2.3.2 实例",[96,95713,95715],{"className":30363,"code":95714,"language":30365,"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",[102,95716,95717,95721,95745,95750,95755,95759,95782,95786,95790,95795,95800],{"__ignoreMap":22},[105,95718,95719],{"class":107,"line":108},[105,95720,93090],{"class":174},[105,95722,95723,95725,95727,95729,95731,95733,95735,95737,95739,95741,95743],{"class":107,"line":28},[105,95724,92987],{"class":115},[105,95726,333],{"class":164},[105,95728,494],{"class":115},[105,95730,841],{"class":164},[105,95732,494],{"class":115},[105,95734,333],{"class":164},[105,95736,494],{"class":115},[105,95738,93485],{"class":5208},[105,95740,161],{"class":111},[105,95742,119],{"class":164},[105,95744,122],{"class":115},[105,95746,95747],{"class":107,"line":1171},[105,95748,95749],{"class":174},"#输出结果：\n",[105,95751,95752],{"class":107,"line":1186},[105,95753,95754],{"class":174},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[105,95756,95757],{"class":107,"line":1192},[105,95758,93932],{"class":174},[105,95760,95761,95764,95766,95768,95770,95773,95775,95777,95779],{"class":107,"line":1206},[105,95762,95763],{"class":115},"np.array([np.arange(",[105,95765,333],{"class":164},[105,95767,494],{"class":115},[105,95769,409],{"class":164},[105,95771,95772],{"class":115},"),np.arange(",[105,95774,409],{"class":164},[105,95776,494],{"class":115},[105,95778,485],{"class":164},[105,95780,95781],{"class":115},")])\n",[105,95783,95784],{"class":107,"line":1212},[105,95785,93549],{"class":174},[105,95787,95788],{"class":107,"line":1303},[105,95789,95683],{"class":220},[105,95791,95792],{"class":107,"line":1309},[105,95793,95794],{"class":220},"array([[1, 2, 3],\n",[105,95796,95797],{"class":107,"line":1321},[105,95798,95799],{"class":220},"       [4, 5, 6]])\n",[105,95801,95802],{"class":107,"line":1603},[105,95803,95683],{"class":220},[47,95805,95807],{"id":95806},"_24-生态分布","2.4 生态分布",[76,95809,95811],{"id":95810},"_241-标准正态分布","2.4.1 标准正态分布",[14,95813,95814],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95816,95817],{},[20,95818],{"alt":22,"src":95819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[76,95821,95823],{"id":95822},"_242-常规正态分布","2.4.2 常规正态分布",[96,95825,95827],{"className":30363,"code":95826,"language":30365,"meta":22,"style":22},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[102,95828,95829,95834,95839,95844],{"__ignoreMap":22},[105,95830,95831],{"class":107,"line":108},[105,95832,95833],{"class":115},"random.normal(loc,scale,size)也可以生成正态分布\n",[105,95835,95836],{"class":107,"line":28},[105,95837,95838],{"class":174},"#loc:期望\n",[105,95840,95841],{"class":107,"line":1171},[105,95842,95843],{"class":174},"#scale:方差\n",[105,95845,95846],{"class":107,"line":1186},[105,95847,95848],{"class":174},"#size:用于确定是几维的数列\n",[14,95850,95851],{},[20,95852],{"alt":22,"src":95853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[47,95855,95857],{"id":95856},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95859,95860],{},"ndim:秩，维度个数",[14,95862,95863],{},"size:数组元素的个数",[14,95865,95866],{},"shape:数组的形状",[14,95868,95869],{},"dtype:数组元素的类型",[14,95871,95872],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95874,95875],{},"他们都是属性，通过数组.属性的形式来确定",[14,95877,95878],{},"如果需要输出多个可以通过以下方式：",[96,95880,95882],{"className":30363,"code":95881,"language":30365,"meta":22,"style":22},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[102,95883,95884],{"__ignoreMap":22},[105,95885,95886,95888],{"class":107,"line":108},[105,95887,30400],{"class":164},[105,95889,95890],{"class":115},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[47,95892,95894],{"id":95893},"_26-其他方式创建数组","2.6 其他方式创建数组",[76,95896,95898],{"id":95897},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95900,95901],{},"①创建一维数组",[96,95903,95905],{"className":30363,"code":95904,"language":30365,"meta":22,"style":22},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[102,95906,95907,95916,95920,95925,95930],{"__ignoreMap":22},[105,95908,95909,95912,95914],{"class":107,"line":108},[105,95910,95911],{"class":115},"np.zeros(",[105,95913,562],{"class":164},[105,95915,122],{"class":115},[105,95917,95918],{"class":107,"line":28},[105,95919,95683],{"class":220},[105,95921,95922],{"class":107,"line":1171},[105,95923,95924],{"class":220},"输出结果：\n",[105,95926,95927],{"class":107,"line":1186},[105,95928,95929],{"class":220},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[105,95931,95932],{"class":107,"line":1192},[105,95933,95683],{"class":220},[14,95935,95936],{},"上方代码等价于：",[96,95938,95940],{"className":30363,"code":95939,"language":30365,"meta":22,"style":22},"np.zeros(shape=(10))#创建10个元素的0数组\n",[102,95941,95942],{"__ignoreMap":22},[105,95943,95944,95946,95949,95951,95953,95955,95957],{"class":107,"line":108},[105,95945,95911],{"class":115},[105,95947,95948],{"class":5208},"shape",[105,95950,161],{"class":111},[105,95952,116],{"class":115},[105,95954,562],{"class":164},[105,95956,82756],{"class":115},[105,95958,95959],{"class":174},"#创建10个元素的0数组\n",[14,95961,95962],{},"也可以指定类型",[96,95964,95966],{"className":30363,"code":95965,"language":30365,"meta":22,"style":22},"#指定类型\nnp.zeros(5,dtype=int)\n",[102,95967,95968,95973],{"__ignoreMap":22},[105,95969,95970],{"class":107,"line":108},[105,95971,95972],{"class":174},"#指定类型\n",[105,95974,95975,95977,95979,95981,95983,95985,95987],{"class":107,"line":28},[105,95976,95911],{"class":115},[105,95978,435],{"class":164},[105,95980,494],{"class":115},[105,95982,93485],{"class":5208},[105,95984,161],{"class":111},[105,95986,119],{"class":164},[105,95988,122],{"class":115},[14,95990,95991],{},"②创建二维数组",[96,95993,95995],{"className":30363,"code":95994,"language":30365,"meta":22,"style":22},"np.zeros((3,4),dtype=int)\n",[102,95996,95997],{"__ignoreMap":22},[105,95998,95999,96002,96004,96006,96008,96010,96012,96014,96016],{"class":107,"line":108},[105,96000,96001],{"class":115},"np.zeros((",[105,96003,187],{"class":164},[105,96005,494],{"class":115},[105,96007,409],{"class":164},[105,96009,42241],{"class":115},[105,96011,93485],{"class":5208},[105,96013,161],{"class":111},[105,96015,119],{"class":164},[105,96017,122],{"class":115},[14,96019,96020],{},"③创建三维数组",[96,96022,96024],{"className":30363,"code":96023,"language":30365,"meta":22,"style":22},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[102,96025,96026,96031],{"__ignoreMap":22},[105,96027,96028],{"class":107,"line":108},[105,96029,96030],{"class":174},"#创建三维数组\n",[105,96032,96033,96035,96037,96039,96041,96043,96045,96047,96049,96051,96053],{"class":107,"line":28},[105,96034,96001],{"class":115},[105,96036,187],{"class":164},[105,96038,494],{"class":115},[105,96040,409],{"class":164},[105,96042,494],{"class":115},[105,96044,435],{"class":164},[105,96046,42241],{"class":115},[105,96048,93485],{"class":5208},[105,96050,161],{"class":111},[105,96052,119],{"class":164},[105,96054,122],{"class":115},[14,96056,96057],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[96,96059,96061],{"className":30363,"code":96060,"language":30365,"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",[102,96062,96063,96068,96083,96088,96093,96115],{"__ignoreMap":22},[105,96064,96065],{"class":107,"line":108},[105,96066,96067],{"class":174},"#使用zeros_like将创建的一维数组变成全0的数组\n",[105,96069,96070,96072,96074,96076,96078,96080],{"class":107,"line":28},[105,96071,354],{"class":115},[105,96073,161],{"class":111},[105,96075,92987],{"class":115},[105,96077,409],{"class":164},[105,96079,545],{"class":115},[105,96081,96082],{"class":174},"#这个得到的结果：一维数组0，1，2，3\n",[105,96084,96085],{"class":107,"line":1171},[105,96086,96087],{"class":115},"np.zeros_like(a)\n",[105,96089,96090],{"class":107,"line":1186},[105,96091,96092],{"class":174},"#使用zeros_like将创建的二维数组变成全0的数组\n",[105,96094,96095,96097,96099,96101,96103,96105,96107,96109,96111,96113],{"class":107,"line":1192},[105,96096,93291],{"class":115},[105,96098,161],{"class":111},[105,96100,95412],{"class":115},[105,96102,31481],{"class":5208},[105,96104,161],{"class":111},[105,96106,116],{"class":115},[105,96108,409],{"class":164},[105,96110,494],{"class":115},[105,96112,435],{"class":164},[105,96114,30482],{"class":115},[105,96116,96117],{"class":107,"line":1206},[105,96118,96119],{"class":115},"np.zeros_like(aa)\n",[76,96121,96123],{"id":96122},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96125,96126],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[76,96128,96130],{"id":96129},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96132,96133],{},"①empty()用法",[96,96135,96137],{"className":30363,"code":96136,"language":30365,"meta":22,"style":22},"numpy.empty(shape,dtype=float,order='c')\n",[102,96138,96139],{"__ignoreMap":22},[105,96140,96141,96144,96146,96148,96150,96152,96154,96156,96158],{"class":107,"line":108},[105,96142,96143],{"class":115},"numpy.empty(shape,",[105,96145,93485],{"class":5208},[105,96147,161],{"class":111},[105,96149,155],{"class":164},[105,96151,494],{"class":115},[105,96153,95282],{"class":5208},[105,96155,161],{"class":111},[105,96157,76013],{"class":220},[105,96159,122],{"class":115},[14,96161,96162],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96164,96165],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96167,96168],{},[20,96169],{"alt":22,"src":96170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96172,96173],{},"②empty()用法",[96,96175,96177],{"className":30363,"code":96176,"language":30365,"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",[102,96178,96179,96200,96212,96233,96238],{"__ignoreMap":22},[105,96180,96181,96183,96185,96188,96190,96192,96194,96196,96198],{"class":107,"line":108},[105,96182,961],{"class":115},[105,96184,161],{"class":111},[105,96186,96187],{"class":115},"np.empty(",[105,96189,562],{"class":164},[105,96191,494],{"class":115},[105,96193,93485],{"class":5208},[105,96195,161],{"class":111},[105,96197,119],{"class":164},[105,96199,122],{"class":115},[105,96201,96202,96204,96206,96208,96210],{"class":107,"line":28},[105,96203,936],{"class":115},[105,96205,161],{"class":111},[105,96207,92987],{"class":115},[105,96209,435],{"class":164},[105,96211,122],{"class":115},[105,96213,96214,96217,96219,96222,96224,96226,96229,96231],{"class":107,"line":1171},[105,96215,96216],{"class":115},"np.add(",[105,96218,193],{"class":164},[105,96220,96221],{"class":115},",x,",[105,96223,93039],{"class":5208},[105,96225,161],{"class":111},[105,96227,96228],{"class":115},"y[:",[105,96230,435],{"class":164},[105,96232,4648],{"class":115},[105,96234,96235],{"class":107,"line":1186},[105,96236,96237],{"class":174},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[105,96239,96240],{"class":107,"line":1192},[105,96241,96242],{"class":115},"y\n",[14,96244,11506],{},[14,96246,96247],{},[20,96248],{"alt":22,"src":96249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[96,96251,96253],{"className":30363,"code":96252,"language":30365,"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",[102,96254,96255,96271,96291,96306],{"__ignoreMap":22},[105,96256,96257,96259,96261,96263,96265,96267,96269],{"class":107,"line":108},[105,96258,936],{"class":115},[105,96260,161],{"class":111},[105,96262,92987],{"class":115},[105,96264,333],{"class":164},[105,96266,494],{"class":115},[105,96268,460],{"class":164},[105,96270,122],{"class":115},[105,96272,96273,96275,96277,96279,96281,96283,96285,96287,96289],{"class":107,"line":28},[105,96274,961],{"class":115},[105,96276,161],{"class":111},[105,96278,96187],{"class":115},[105,96280,435],{"class":164},[105,96282,494],{"class":115},[105,96284,93485],{"class":5208},[105,96286,161],{"class":111},[105,96288,119],{"class":164},[105,96290,122],{"class":115},[105,96292,96293,96296,96298,96300,96302,96304],{"class":107,"line":1171},[105,96294,96295],{"class":115},"np.add(x,",[105,96297,193],{"class":164},[105,96299,494],{"class":115},[105,96301,93039],{"class":5208},[105,96303,161],{"class":111},[105,96305,93434],{"class":115},[105,96307,96308],{"class":107,"line":1186},[105,96309,96310],{"class":174},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96312,96313],{},"③empty_like()",[14,96315,96316],{},[265,96317,96318,96319,96324],{},"创建一个",[265,96320,96321],{},[265,96322,96323],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96326,96327,96330],{},[102,96328,96329],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96332,96333],{},[20,96334],{"alt":22,"src":96335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[76,96337,96339],{"id":96338},"_264-用法","2.6.4 ？？用法",[14,96341,96342],{},"当想查看一个函数的参数时，可以通过？？来实现",[96,96344,96346],{"className":30363,"code":96345,"language":30365,"meta":22,"style":22},"np.full??\n",[102,96347,96348],{"__ignoreMap":22},[105,96349,96350,96353],{"class":107,"line":108},[105,96351,96352],{"class":115},"np.full",[105,96354,96355],{"class":77388},"??\n",[76,96357,96359],{"id":96358},"_265-full创建数组","2.6.5 full()创建数组",[96,96361,96363],{"className":30363,"code":96362,"language":30365,"meta":22,"style":22},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[102,96364,96365,96370],{"__ignoreMap":22},[105,96366,96367],{"class":107,"line":108},[105,96368,96369],{"class":115},"full(shape,fill_value)\n",[105,96371,96372],{"class":107,"line":28},[105,96373,96374],{"class":115},"创建全为某个指定值的数组\n",[14,96376,94515],{},[96,96378,96380],{"className":30363,"code":96379,"language":30365,"meta":22,"style":22},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[102,96381,96382,96387],{"__ignoreMap":22},[105,96383,96384],{"class":107,"line":108},[105,96385,96386],{"class":174},"#创建一个一维数组,以20进行填充\n",[105,96388,96389,96392,96394,96396,96398],{"class":107,"line":28},[105,96390,96391],{"class":115},"np.full(",[105,96393,562],{"class":164},[105,96395,494],{"class":115},[105,96397,816],{"class":164},[105,96399,122],{"class":115},[14,96401,93276],{},[96,96403,96405],{"className":30363,"code":96404,"language":30365,"meta":22,"style":22},"#创建二维数组\nnp.full((3,5),11)\n",[102,96406,96407,96411],{"__ignoreMap":22},[105,96408,96409],{"class":107,"line":108},[105,96410,93932],{"class":174},[105,96412,96413,96416,96418,96420,96422,96424,96426],{"class":107,"line":28},[105,96414,96415],{"class":115},"np.full((",[105,96417,187],{"class":164},[105,96419,494],{"class":115},[105,96421,435],{"class":164},[105,96423,42241],{"class":115},[105,96425,588],{"class":164},[105,96427,122],{"class":115},[14,96429,96430],{},"③full_like用法",[14,96432,96433],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96435,96436],{},"这里是指定填充而已",[96,96438,96440],{"className":30363,"code":96439,"language":30365,"meta":22,"style":22},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[102,96441,96442,96447,96471,96476],{"__ignoreMap":22},[105,96443,96444],{"class":107,"line":108},[105,96445,96446],{"class":174},"#创建一个指定形状数组\n",[105,96448,96449,96451,96453,96455,96457,96459,96461,96463,96465,96467,96469],{"class":107,"line":28},[105,96450,354],{"class":115},[105,96452,161],{"class":111},[105,96454,92987],{"class":115},[105,96456,333],{"class":164},[105,96458,494],{"class":115},[105,96460,441],{"class":164},[105,96462,92992],{"class":115},[105,96464,409],{"class":164},[105,96466,494],{"class":115},[105,96468,536],{"class":164},[105,96470,122],{"class":115},[105,96472,96473],{"class":107,"line":1171},[105,96474,96475],{"class":174},"#进行指定填充\n",[105,96477,96478,96481,96483],{"class":107,"line":1186},[105,96479,96480],{"class":115},"np.full_like(a,",[105,96482,562],{"class":164},[105,96484,122],{"class":115},[14,96486,11506],{},[14,96488,96489],{},[20,96490],{"alt":22,"src":96491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[76,96493,96495],{"id":96494},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21990,96497,96499],{"id":96498},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[96,96501,96503],{"className":30363,"code":96502,"language":30365,"meta":22,"style":22},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[102,96504,96505,96522],{"__ignoreMap":22},[105,96506,96507,96510,96512,96514,96516,96518,96520],{"class":107,"line":108},[105,96508,96509],{"class":115},"np.eye(",[105,96511,409],{"class":164},[105,96513,494],{"class":115},[105,96515,93485],{"class":5208},[105,96517,161],{"class":111},[105,96519,119],{"class":164},[105,96521,122],{"class":115},[105,96523,96524],{"class":107,"line":28},[105,96525,96526],{"class":174},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21990,96528,96530],{"id":96529},"_2662-法2identity","2.6.6.2 法2：identity()",[96,96532,96534],{"className":30363,"code":96533,"language":30365,"meta":22,"style":22},"#identity()\nnp.identity(5,dtype=int)\n",[102,96535,96536,96541],{"__ignoreMap":22},[105,96537,96538],{"class":107,"line":108},[105,96539,96540],{"class":174},"#identity()\n",[105,96542,96543,96546,96548,96550,96552,96554,96556],{"class":107,"line":28},[105,96544,96545],{"class":115},"np.identity(",[105,96547,435],{"class":164},[105,96549,494],{"class":115},[105,96551,93485],{"class":5208},[105,96553,161],{"class":111},[105,96555,119],{"class":164},[105,96557,122],{"class":115},[14,96559,96560],{},"两个函数是有区别的",[14,96562,96563],{},[20,96564],{"alt":22,"src":96565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96567,96568],{},[20,96569],{"alt":22,"src":96570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[96,96572,96574],{"className":30363,"code":96573,"language":30365,"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",[102,96575,96576,96581,96593,96598,96603,96608,96613,96617,96622,96642,96646,96651,96656],{"__ignoreMap":22},[105,96577,96578],{"class":107,"line":108},[105,96579,96580],{"class":174},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[105,96582,96583,96585,96587,96589,96591],{"class":107,"line":28},[105,96584,96509],{"class":115},[105,96586,187],{"class":164},[105,96588,12427],{"class":115},[105,96590,409],{"class":164},[105,96592,122],{"class":115},[105,96594,96595],{"class":107,"line":1171},[105,96596,96597],{"class":174},"# 输出:\n",[105,96599,96600],{"class":107,"line":1186},[105,96601,96602],{"class":174},"# [[1. 0. 0. 0.]\n",[105,96604,96605],{"class":107,"line":1192},[105,96606,96607],{"class":174},"#  [0. 1. 0. 0.]\n",[105,96609,96610],{"class":107,"line":1206},[105,96611,96612],{"class":174},"#  [0. 0. 1. 0.]]\n",[105,96614,96615],{"class":107,"line":1212},[105,96616,2391],{"emptyLinePlaceholder":32},[105,96618,96619],{"class":107,"line":1303},[105,96620,96621],{"class":174},"# 对角线向上偏移1\n",[105,96623,96624,96626,96628,96630,96632,96634,96636,96638,96640],{"class":107,"line":1309},[105,96625,96509],{"class":115},[105,96627,187],{"class":164},[105,96629,12427],{"class":115},[105,96631,409],{"class":164},[105,96633,12427],{"class":115},[105,96635,609],{"class":5208},[105,96637,161],{"class":111},[105,96639,333],{"class":164},[105,96641,122],{"class":115},[105,96643,96644],{"class":107,"line":1321},[105,96645,96597],{"class":174},[105,96647,96648],{"class":107,"line":1603},[105,96649,96650],{"class":174},"# [[0. 1. 0. 0.]\n",[105,96652,96653],{"class":107,"line":1608},[105,96654,96655],{"class":174},"#  [0. 0. 1. 0.]\n",[105,96657,96658],{"class":107,"line":1614},[105,96659,96660],{"class":174},"#  [0. 0. 0. 1.]]\n",[76,96662,96664],{"id":96663},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[96,96666,96668],{"className":30363,"code":96667,"language":30365,"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",[102,96669,96670,96675,96679,96684,96689,96694,96699,96704,96709,96714,96719],{"__ignoreMap":22},[105,96671,96672],{"class":107,"line":108},[105,96673,96674],{"class":174},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[105,96676,96677],{"class":107,"line":28},[105,96678,95683],{"class":220},[105,96680,96681],{"class":107,"line":1171},[105,96682,96683],{"class":220},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[105,96685,96686],{"class":107,"line":1186},[105,96687,96688],{"class":220},"参数介绍：\n",[105,96690,96691],{"class":107,"line":1192},[105,96692,96693],{"class":220},"start：序列的起始值\n",[105,96695,96696],{"class":107,"line":1206},[105,96697,96698],{"class":220},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[105,96700,96701],{"class":107,"line":1212},[105,96702,96703],{"class":220},"num：要生长的等步长的样本数量，默认为50\n",[105,96705,96706],{"class":107,"line":1303},[105,96707,96708],{"class":220},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[105,96710,96711],{"class":107,"line":1309},[105,96712,96713],{"class":220},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[105,96715,96716],{"class":107,"line":1321},[105,96717,96718],{"class":220},"dtype：ndarry的数据类型\n",[105,96720,96721],{"class":107,"line":1603},[105,96722,95683],{"class":220},[14,96724,96725],{},[20,96726],{"alt":22,"src":96727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96729,96730],{},"这里num=是可以省略的",[14,96732,96733],{},"也就是下方两行代码结果是一模一样的",[96,96735,96737],{"className":30363,"code":96736,"language":30365,"meta":22,"style":22},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[102,96738,96739,96756],{"__ignoreMap":22},[105,96740,96741,96744,96746,96748,96750,96752,96754],{"class":107,"line":108},[105,96742,96743],{"class":115},"np.linspace(",[105,96745,333],{"class":164},[105,96747,494],{"class":115},[105,96749,435],{"class":164},[105,96751,494],{"class":115},[105,96753,435],{"class":164},[105,96755,122],{"class":115},[105,96757,96758,96760,96762,96764,96766,96768,96770,96772,96774],{"class":107,"line":28},[105,96759,96743],{"class":115},[105,96761,333],{"class":164},[105,96763,494],{"class":115},[105,96765,435],{"class":164},[105,96767,494],{"class":115},[105,96769,1656],{"class":5208},[105,96771,161],{"class":111},[105,96773,435],{"class":164},[105,96775,122],{"class":115},[76,96777,96779],{"id":96778},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[96,96781,96783],{"className":30363,"code":96782,"language":30365,"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",[102,96784,96785,96790,96794,96799,96804,96809,96814,96818,96823,96828,96832],{"__ignoreMap":22},[105,96786,96787],{"class":107,"line":108},[105,96788,96789],{"class":174},"#logspace函数用于创建一个等比数列，格式如下：\n",[105,96791,96792],{"class":107,"line":28},[105,96793,95683],{"class":220},[105,96795,96796],{"class":107,"line":1171},[105,96797,96798],{"class":220},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[105,96800,96801],{"class":107,"line":1186},[105,96802,96803],{"class":220},"参数为：\n",[105,96805,96806],{"class":107,"line":1192},[105,96807,96808],{"class":220},"start:序列的起始位置为：base**start\n",[105,96810,96811],{"class":107,"line":1206},[105,96812,96813],{"class":220},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[105,96815,96816],{"class":107,"line":1212},[105,96817,96703],{"class":220},[105,96819,96820],{"class":107,"line":1303},[105,96821,96822],{"class":220},"endpoint：是否包含 stop 这个值，默认是 True\n",[105,96824,96825],{"class":107,"line":1309},[105,96826,96827],{"class":220},"base：对数的底数，默认是 10（常见对数）\n",[105,96829,96830],{"class":107,"line":1321},[105,96831,96718],{"class":220},[105,96833,96834],{"class":107,"line":1603},[105,96835,95683],{"class":220},[14,96837,96838],{},[20,96839],{"alt":22,"src":96840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96842,96843],{},"logspace()函数中的num参数也是可以不写num=的",[14,96845,96846],{},"endpoint是不可以省略的",[5118,96848,96849],{},"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":28,"depth":28,"links":96851},[96852,96856,96861,96865,96869,96870],{"id":95241,"depth":28,"text":95242,"children":96853},[96854,96855],{"id":95245,"depth":1171,"text":95246},{"id":95318,"depth":1171,"text":95319},{"id":95350,"depth":28,"text":95351,"children":96857},[96858,96859,96860],{"id":95354,"depth":1171,"text":95355},{"id":95536,"depth":1171,"text":95537},{"id":95614,"depth":1171,"text":95615},{"id":95649,"depth":28,"text":95650,"children":96862},[96863,96864],{"id":95653,"depth":1171,"text":95654},{"id":95710,"depth":1171,"text":95711},{"id":95806,"depth":28,"text":95807,"children":96866},[96867,96868],{"id":95810,"depth":1171,"text":95811},{"id":95822,"depth":1171,"text":95823},{"id":95856,"depth":28,"text":95857},{"id":95893,"depth":28,"text":95894,"children":96871},[96872,96873,96874,96875,96876,96877,96878,96879],{"id":95897,"depth":1171,"text":95898},{"id":96122,"depth":1171,"text":96123},{"id":96129,"depth":1171,"text":96130},{"id":96338,"depth":1171,"text":96339},{"id":96358,"depth":1171,"text":96359},{"id":96494,"depth":1171,"text":96495},{"id":96663,"depth":1171,"text":96664},{"id":96778,"depth":1171,"text":96779},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95233,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96886,"title":96887,"body":96888,"description":23369,"extension":30,"meta":96981,"navigation":32,"path":96982,"seo":96983,"stem":96984,"__hash__":96985},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96889,"toc":96979},[96890,96893,96896,96899,96902,96905,96908,96911,96914,96917,96920,96923,96925,96928,96931,96936,96939,96942,96976],[10,96891,96887],{"id":96892},"_20魔法命令mprun",[14,96894,96895],{},"逐行分析数据内存的使用情况",[14,96897,96898],{},"语法格式：",[14,96900,96901],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96903,96904],{},"分析结果列如下：",[14,96906,96907],{},"Line行号",[14,96909,96910],{},"Mem usage内存使用大小",[14,96912,96913],{},"increment内存增量",[14,96915,96916],{},"Line content代码内容",[14,96918,96919],{},"补充说明：",[14,96921,96922],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96924,95188],{},[14,96926,96927],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,96929,96930],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,96932,96933],{},[20,96934],{"alt":22,"src":96935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,96937,96938],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,96940,96941],{},"这时候需要重新加载模块",[96,96943,96945],{"className":30363,"code":96944,"language":30365,"meta":22,"style":22},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[102,96946,96947,96952,96959,96964],{"__ignoreMap":22},[105,96948,96949],{"class":107,"line":108},[105,96950,96951],{"class":174},"#重新加载模块\n",[105,96953,96954,96956],{"class":107,"line":28},[105,96955,30377],{"class":111},[105,96957,96958],{"class":115}," importlib\n",[105,96960,96961],{"class":107,"line":1171},[105,96962,96963],{"class":115},"importlib.reload(mprun_test)\n",[105,96965,96966,96968,96971,96973],{"class":107,"line":1186},[105,96967,444],{"class":111},[105,96969,96970],{"class":115},"mprun ",[105,96972,648],{"class":111},[105,96974,96975],{"class":115},"f mprun_test.fun_test mprun_test.fun_test()\n",[5118,96977,96978],{},"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":28,"depth":28,"links":96980},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96887,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96987,"title":96988,"body":96989,"description":23369,"extension":30,"meta":97006,"navigation":32,"path":97007,"seo":97008,"stem":97009,"__hash__":97010},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96990,"toc":97004},[96991,96994,96999],[10,96992,96988],{"id":96993},"_3一维数组的索引和切片",[14,96995,96996],{},[20,96997],{"alt":22,"src":96998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97000,97001],{},[20,97002],{"alt":22,"src":97003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":22,"searchDepth":28,"depth":28,"links":97005},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96988,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97012,"title":97013,"body":97014,"description":23369,"extension":30,"meta":97497,"navigation":32,"path":97498,"seo":97499,"stem":97500,"__hash__":97501},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97015,"toc":97495},[97016,97019,97022,97027,97060,97063,97101,97104,97138,97141,97246,97249,97286,97289,97390,97393,97444,97447,97489,97492],[10,97017,97013],{"id":97018},"_4二维数组的索引与切片",[14,97020,97021],{},"①获取指定单个元素",[14,97023,97024],{},[20,97025],{"alt":22,"src":97026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[96,97028,97030],{"className":30363,"code":97029,"language":30365,"meta":22,"style":22},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[102,97031,97032,97037,97042,97047],{"__ignoreMap":22},[105,97033,97034],{"class":107,"line":108},[105,97035,97036],{"class":174},"#获取元素9\n",[105,97038,97039],{"class":107,"line":28},[105,97040,97041],{"class":174},"#先获取所在行，再获取所在列\n",[105,97043,97044],{"class":107,"line":1171},[105,97045,97046],{"class":174},"#数组[行索引号，列索引号]\n",[105,97048,97049,97052,97054,97056,97058],{"class":107,"line":1186},[105,97050,97051],{"class":115},"a[",[105,97053,333],{"class":164},[105,97055,494],{"class":115},[105,97057,193],{"class":164},[105,97059,33231],{"class":115},[14,97061,97062],{},"②获取整行元素",[96,97064,97066],{"className":30363,"code":97065,"language":30365,"meta":22,"style":22},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[102,97067,97068,97073,97078,97086,97091],{"__ignoreMap":22},[105,97069,97070],{"class":107,"line":108},[105,97071,97072],{"class":174},"#获取整行 数组[行索引号]\n",[105,97074,97075],{"class":107,"line":28},[105,97076,97077],{"class":174},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[105,97079,97080,97082,97084],{"class":107,"line":1171},[105,97081,97051],{"class":115},[105,97083,193],{"class":164},[105,97085,33231],{"class":115},[105,97087,97088],{"class":107,"line":1186},[105,97089,97090],{"class":174},"#也可以负索引获取一行\n",[105,97092,97093,97095,97097,97099],{"class":107,"line":1192},[105,97094,97051],{"class":115},[105,97096,648],{"class":111},[105,97098,333],{"class":164},[105,97100,33231],{"class":115},[14,97102,97103],{},"③获取整列元素",[96,97105,97107],{"className":30363,"code":97106,"language":30365,"meta":22,"style":22},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[102,97108,97109,97114,97123,97128],{"__ignoreMap":22},[105,97110,97111],{"class":107,"line":108},[105,97112,97113],{"class":174},"#获取整列 数组名[:,列索引]\n",[105,97115,97116,97119,97121],{"class":107,"line":28},[105,97117,97118],{"class":115},"a[:,",[105,97120,193],{"class":164},[105,97122,33231],{"class":115},[105,97124,97125],{"class":107,"line":1171},[105,97126,97127],{"class":174},"#也可以负索引获取一列\n",[105,97129,97130,97132,97134,97136],{"class":107,"line":1186},[105,97131,97118],{"class":115},[105,97133,648],{"class":111},[105,97135,333],{"class":164},[105,97137,33231],{"class":115},[14,97139,97140],{},"④部分行部分列的元素",[96,97142,97144],{"className":30363,"code":97143,"language":30365,"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",[102,97145,97146,97151,97161,97165,97169,97174,97179,97183,97195,97199,97203,97208,97213,97218,97223,97227,97232],{"__ignoreMap":22},[105,97147,97148],{"class":107,"line":108},[105,97149,97150],{"class":174},"#部分行部分列 数组名[行切片，列切片]\n",[105,97152,97153,97156,97158],{"class":107,"line":28},[105,97154,97155],{"class":115},"a[:",[105,97157,193],{"class":164},[105,97159,97160],{"class":115},",:]\n",[105,97162,97163],{"class":107,"line":1171},[105,97164,93549],{"class":174},[105,97166,97167],{"class":107,"line":1186},[105,97168,93913],{"class":220},[105,97170,97171],{"class":107,"line":1192},[105,97172,97173],{"class":220},"array([[ 1,  2,  3,  4,  5,  6],\n",[105,97175,97176],{"class":107,"line":1206},[105,97177,97178],{"class":220},"       [ 7,  8,  9, 10, 11, 12]])\n",[105,97180,97181],{"class":107,"line":1212},[105,97182,93913],{"class":220},[105,97184,97185,97187,97189,97191,97193],{"class":107,"line":1303},[105,97186,97118],{"class":115},[105,97188,333],{"class":164},[105,97190,975],{"class":115},[105,97192,409],{"class":164},[105,97194,33231],{"class":115},[105,97196,97197],{"class":107,"line":1309},[105,97198,93549],{"class":174},[105,97200,97201],{"class":107,"line":1321},[105,97202,93913],{"class":220},[105,97204,97205],{"class":107,"line":1603},[105,97206,97207],{"class":220},"array([[ 2,  3,  4],\n",[105,97209,97210],{"class":107,"line":1608},[105,97211,97212],{"class":220},"       [ 8,  9, 10],\n",[105,97214,97215],{"class":107,"line":1614},[105,97216,97217],{"class":220},"       [14, 15, 16],\n",[105,97219,97220],{"class":107,"line":1619},[105,97221,97222],{"class":220},"       [20, 21, 22]])\n",[105,97224,97225],{"class":107,"line":1633},[105,97226,93913],{"class":220},[105,97228,97229],{"class":107,"line":1638},[105,97230,97231],{"class":174},"#对列行同时进行切片，使用了step参数\n",[105,97233,97234,97237,97239,97242,97244],{"class":107,"line":1644},[105,97235,97236],{"class":115},"a[::",[105,97238,193],{"class":164},[105,97240,97241],{"class":115},",::",[105,97243,193],{"class":164},[105,97245,33231],{"class":115},[14,97247,97248],{},"⑤同时获取两个元素",[96,97250,97252],{"className":30363,"code":97251,"language":30365,"meta":22,"style":22},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[102,97253,97254,97259,97264],{"__ignoreMap":22},[105,97255,97256],{"class":107,"line":108},[105,97257,97258],{"class":174},"#同时获取第三行第二列，第四行第一列\n",[105,97260,97261],{"class":107,"line":28},[105,97262,97263],{"class":174},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[105,97265,97266,97269,97271,97273,97275,97277,97279,97281,97283],{"class":107,"line":1171},[105,97267,97268],{"class":115},"a[(",[105,97270,193],{"class":164},[105,97272,494],{"class":115},[105,97274,187],{"class":164},[105,97276,42232],{"class":115},[105,97278,333],{"class":164},[105,97280,494],{"class":115},[105,97282,307],{"class":164},[105,97284,97285],{"class":115},")]\n",[14,97287,97288],{},"⑥切片，对行进行反向获取",[96,97290,97292],{"className":30363,"code":97291,"language":30365,"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",[102,97293,97294,97299,97309,97313,97317,97322,97327,97332,97337,97341,97346,97362,97366,97371,97376,97381,97386],{"__ignoreMap":22},[105,97295,97296],{"class":107,"line":108},[105,97297,97298],{"class":174},"#切片 对所有行进行反向获取\n",[105,97300,97301,97303,97305,97307],{"class":107,"line":28},[105,97302,97236],{"class":115},[105,97304,648],{"class":111},[105,97306,333],{"class":164},[105,97308,33231],{"class":115},[105,97310,97311],{"class":107,"line":1171},[105,97312,93549],{"class":174},[105,97314,97315],{"class":107,"line":1186},[105,97316,93913],{"class":220},[105,97318,97319],{"class":107,"line":1192},[105,97320,97321],{"class":220},"array([[19, 20, 21, 22, 23, 24],\n",[105,97323,97324],{"class":107,"line":1206},[105,97325,97326],{"class":220},"       [13, 14, 15, 16, 17, 18],\n",[105,97328,97329],{"class":107,"line":1212},[105,97330,97331],{"class":220},"       [ 7,  8,  9, 10, 11, 12],\n",[105,97333,97334],{"class":107,"line":1303},[105,97335,97336],{"class":220},"       [ 1,  2,  3,  4,  5,  6]])\n",[105,97338,97339],{"class":107,"line":1309},[105,97340,93913],{"class":220},[105,97342,97343],{"class":107,"line":1321},[105,97344,97345],{"class":174},"#对行列都进行反向切片获取\n",[105,97347,97348,97350,97352,97354,97356,97358,97360],{"class":107,"line":1603},[105,97349,97236],{"class":115},[105,97351,648],{"class":111},[105,97353,333],{"class":164},[105,97355,97241],{"class":115},[105,97357,648],{"class":111},[105,97359,333],{"class":164},[105,97361,33231],{"class":115},[105,97363,97364],{"class":107,"line":1608},[105,97365,93913],{"class":220},[105,97367,97368],{"class":107,"line":1614},[105,97369,97370],{"class":220},"array([[24, 23, 22, 21, 20, 19],\n",[105,97372,97373],{"class":107,"line":1619},[105,97374,97375],{"class":220},"       [18, 17, 16, 15, 14, 13],\n",[105,97377,97378],{"class":107,"line":1633},[105,97379,97380],{"class":220},"       [12, 11, 10,  9,  8,  7],\n",[105,97382,97383],{"class":107,"line":1638},[105,97384,97385],{"class":220},"       [ 6,  5,  4,  3,  2,  1]])\n",[105,97387,97388],{"class":107,"line":1644},[105,97389,93913],{"class":220},[14,97391,97392],{},"⑦修改元素",[96,97394,97396],{"className":30363,"code":97395,"language":30365,"meta":22,"style":22},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[102,97397,97398,97403,97421,97426],{"__ignoreMap":22},[105,97399,97400],{"class":107,"line":108},[105,97401,97402],{"class":174},"#获取前两行和前两列\n",[105,97404,97405,97408,97410,97412,97414,97417,97419],{"class":107,"line":28},[105,97406,97407],{"class":115},"sub_a",[105,97409,161],{"class":111},[105,97411,97155],{"class":115},[105,97413,193],{"class":164},[105,97415,97416],{"class":115},",:",[105,97418,193],{"class":164},[105,97420,33231],{"class":115},[105,97422,97423],{"class":107,"line":1171},[105,97424,97425],{"class":174},"#修改sub_a第一个元素的值\n",[105,97427,97428,97431,97433,97435,97437,97439,97441],{"class":107,"line":1186},[105,97429,97430],{"class":115},"sub_a[",[105,97432,307],{"class":164},[105,97434,494],{"class":115},[105,97436,307],{"class":164},[105,97438,1056],{"class":115},[105,97440,161],{"class":111},[105,97442,97443],{"class":164},"100\n",[14,97445,97446],{},"⑧数组复制copy()",[96,97448,97450],{"className":30363,"code":97449,"language":30365,"meta":22,"style":22},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[102,97451,97452,97457,97467,97472],{"__ignoreMap":22},[105,97453,97454],{"class":107,"line":108},[105,97455,97456],{"class":174},"#数组复制\n",[105,97458,97459,97462,97464],{"class":107,"line":28},[105,97460,97461],{"class":115},"copy_a",[105,97463,161],{"class":111},[105,97465,97466],{"class":115},"np.copy(sub_a)\n",[105,97468,97469],{"class":107,"line":1171},[105,97470,97471],{"class":174},"#修改copy_a后不影响原数组\n",[105,97473,97474,97477,97479,97481,97483,97485,97487],{"class":107,"line":1186},[105,97475,97476],{"class":115},"copy_a[",[105,97478,307],{"class":164},[105,97480,494],{"class":115},[105,97482,307],{"class":164},[105,97484,1056],{"class":115},[105,97486,161],{"class":111},[105,97488,97443],{"class":164},[14,97490,97491],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5118,97493,97494],{},"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":28,"depth":28,"links":97496},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97013,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97503,"title":97504,"body":97505,"description":23369,"extension":30,"meta":97997,"navigation":32,"path":97998,"seo":97999,"stem":98000,"__hash__":98001},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97506,"toc":97989},[97507,97510,97514,97517,97520,97573,97576,97601,97604,97623,97643,97646,97662,97666,97712,97716,97758,97762,97765,97768,97771,97774,97777,97839,97899,97903,97906,97963,97967,97972,97981,97986],[10,97508,97504],{"id":97509},"_5改变数组的维度",[47,97511,97513],{"id":97512},"_51-使用reshape","5.1 使用reshape()",[14,97515,97516],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97518,97519],{},"①一维数组转换为二维数组",[96,97521,97523],{"className":30363,"code":97522,"language":30365,"meta":22,"style":22},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[102,97524,97525,97541,97546,97551,97556],{"__ignoreMap":22},[105,97526,97527,97529,97531,97533,97535,97537,97539],{"class":107,"line":108},[105,97528,354],{"class":115},[105,97530,161],{"class":111},[105,97532,92987],{"class":115},[105,97534,333],{"class":164},[105,97536,494],{"class":115},[105,97538,639],{"class":164},[105,97540,122],{"class":115},[105,97542,97543],{"class":107,"line":28},[105,97544,97545],{"class":174},"#将一维数组进行转换\n",[105,97547,97548],{"class":107,"line":1171},[105,97549,97550],{"class":174},"#注意点：元素个数不可以变\n",[105,97552,97553],{"class":107,"line":1186},[105,97554,97555],{"class":174},"#转换维度要保持一致，不一致就异常！！！\n",[105,97557,97558,97560,97562,97565,97567,97569,97571],{"class":107,"line":1192},[105,97559,93291],{"class":115},[105,97561,161],{"class":111},[105,97563,97564],{"class":115},"a.reshape(",[105,97566,193],{"class":164},[105,97568,494],{"class":115},[105,97570,460],{"class":164},[105,97572,122],{"class":115},[14,97574,97575],{},"②一维数组转换为三维数组",[96,97577,97579],{"className":30363,"code":97578,"language":30365,"meta":22,"style":22},"aaa=a.reshape(2,3,2)\n",[102,97580,97581],{"__ignoreMap":22},[105,97582,97583,97585,97587,97589,97591,97593,97595,97597,97599],{"class":107,"line":108},[105,97584,95506],{"class":115},[105,97586,161],{"class":111},[105,97588,97564],{"class":115},[105,97590,193],{"class":164},[105,97592,494],{"class":115},[105,97594,187],{"class":164},[105,97596,494],{"class":115},[105,97598,193],{"class":164},[105,97600,122],{"class":115},[14,97602,97603],{},"③二维数组转化为一维数组",[96,97605,97607],{"className":30363,"code":97606,"language":30365,"meta":22,"style":22},"#知道元素个数：\naa.reshape(12)\n",[102,97608,97609,97614],{"__ignoreMap":22},[105,97610,97611],{"class":107,"line":108},[105,97612,97613],{"class":174},"#知道元素个数：\n",[105,97615,97616,97619,97621],{"class":107,"line":28},[105,97617,97618],{"class":115},"aa.reshape(",[105,97620,614],{"class":164},[105,97622,122],{"class":115},[96,97624,97626],{"className":30363,"code":97625,"language":30365,"meta":22,"style":22},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[102,97627,97628,97633],{"__ignoreMap":22},[105,97629,97630],{"class":107,"line":108},[105,97631,97632],{"class":174},"#不知道元素个数，参数传递-1\n",[105,97634,97635,97637,97639,97641],{"class":107,"line":28},[105,97636,97618],{"class":115},[105,97638,648],{"class":111},[105,97640,333],{"class":164},[105,97642,122],{"class":115},[14,97644,97645],{},"④三维数组转换为一维数组",[96,97647,97649],{"className":30363,"code":97648,"language":30365,"meta":22,"style":22},"aaa.reshape(-1)\n",[102,97650,97651],{"__ignoreMap":22},[105,97652,97653,97656,97658,97660],{"class":107,"line":108},[105,97654,97655],{"class":115},"aaa.reshape(",[105,97657,648],{"class":111},[105,97659,333],{"class":164},[105,97661,122],{"class":115},[47,97663,97665],{"id":97664},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[96,97667,97669],{"className":30363,"code":97668,"language":30365,"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",[102,97670,97671,97698,97703,97707],{"__ignoreMap":22},[105,97672,97673,97675,97677,97679,97681,97683,97685,97687,97689,97691,97693,97695],{"class":107,"line":108},[105,97674,93291],{"class":115},[105,97676,161],{"class":111},[105,97678,92987],{"class":115},[105,97680,333],{"class":164},[105,97682,494],{"class":115},[105,97684,639],{"class":164},[105,97686,92992],{"class":115},[105,97688,193],{"class":164},[105,97690,494],{"class":115},[105,97692,460],{"class":164},[105,97694,545],{"class":115},[105,97696,97697],{"class":174},"#转换为2行6列的数组\n",[105,97699,97700],{"class":107,"line":28},[105,97701,97702],{"class":115},"aa.revel()\n",[105,97704,97705],{"class":107,"line":1171},[105,97706,93549],{"class":174},[105,97708,97709],{"class":107,"line":1186},[105,97710,97711],{"class":174},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[47,97713,97715],{"id":97714},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[96,97717,97719],{"className":30363,"code":97718,"language":30365,"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",[102,97720,97721,97745,97750,97754],{"__ignoreMap":22},[105,97722,97723,97725,97727,97729,97731,97733,97735,97737,97739,97741,97743],{"class":107,"line":108},[105,97724,93291],{"class":115},[105,97726,161],{"class":111},[105,97728,92987],{"class":115},[105,97730,333],{"class":164},[105,97732,494],{"class":115},[105,97734,639],{"class":164},[105,97736,92992],{"class":115},[105,97738,193],{"class":164},[105,97740,494],{"class":115},[105,97742,460],{"class":164},[105,97744,122],{"class":115},[105,97746,97747],{"class":107,"line":28},[105,97748,97749],{"class":115},"aa.flatten()\n",[105,97751,97752],{"class":107,"line":1171},[105,97753,93549],{"class":174},[105,97755,97756],{"class":107,"line":1186},[105,97757,97711],{"class":174},[47,97759,97761],{"id":97760},"_54-使用resize","5.4 使用resize()",[14,97763,97764],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97766,97767],{},"通过resize方法可以改变数组的维度",[14,97769,97770],{},"#resize修改数组维度",[14,97772,97773],{},"#以元组的形式指定形状",[14,97775,97776],{},"#改变的是原数组",[96,97778,97780],{"className":30363,"code":97779,"language":30365,"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",[102,97781,97782,97798,97818,97831,97835],{"__ignoreMap":22},[105,97783,97784,97786,97788,97790,97792,97794,97796],{"class":107,"line":108},[105,97785,354],{"class":115},[105,97787,161],{"class":111},[105,97789,92987],{"class":115},[105,97791,333],{"class":164},[105,97793,494],{"class":115},[105,97795,639],{"class":164},[105,97797,122],{"class":115},[105,97799,97800,97803,97805,97807,97809,97811,97813,97815],{"class":107,"line":28},[105,97801,97802],{"class":115},"a.shape",[105,97804,161],{"class":111},[105,97806,116],{"class":115},[105,97808,193],{"class":164},[105,97810,494],{"class":115},[105,97812,460],{"class":164},[105,97814,545],{"class":115},[105,97816,97817],{"class":174},"#改变了原数组\n",[105,97819,97820,97822,97824,97827,97829],{"class":107,"line":1171},[105,97821,354],{"class":115},[105,97823,161],{"class":111},[105,97825,97826],{"class":115},"resize((",[105,97828,614],{"class":164},[105,97830,30482],{"class":115},[105,97832,97833],{"class":107,"line":1186},[105,97834,93549],{"class":174},[105,97836,97837],{"class":107,"line":1192},[105,97838,97711],{"class":174},[96,97840,97842],{"className":30363,"code":97841,"language":30365,"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",[102,97843,97844,97857,97861,97865,97870,97875,97880,97885,97890,97895],{"__ignoreMap":22},[105,97845,97846,97849,97851,97853,97855],{"class":107,"line":108},[105,97847,97848],{"class":115},"a.resize((",[105,97850,460],{"class":164},[105,97852,494],{"class":115},[105,97854,193],{"class":164},[105,97856,30482],{"class":115},[105,97858,97859],{"class":107,"line":28},[105,97860,93549],{"class":174},[105,97862,97863],{"class":107,"line":1171},[105,97864,93913],{"class":220},[105,97866,97867],{"class":107,"line":1186},[105,97868,97869],{"class":220},"array([[ 1,  2],\n",[105,97871,97872],{"class":107,"line":1192},[105,97873,97874],{"class":220},"       [ 3,  4],\n",[105,97876,97877],{"class":107,"line":1206},[105,97878,97879],{"class":220},"       [ 5,  6],\n",[105,97881,97882],{"class":107,"line":1212},[105,97883,97884],{"class":220},"       [ 7,  8],\n",[105,97886,97887],{"class":107,"line":1303},[105,97888,97889],{"class":220},"       [ 9, 10],\n",[105,97891,97892],{"class":107,"line":1309},[105,97893,97894],{"class":220},"       [11, 12]])\n",[105,97896,97897],{"class":107,"line":1321},[105,97898,93913],{"class":220},[47,97900,97902],{"id":97901},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97904,97905],{},"改变了原数组",[96,97907,97909],{"className":30363,"code":97908,"language":30365,"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",[102,97910,97911,97927,97943,97947,97951,97955,97959],{"__ignoreMap":22},[105,97912,97913,97915,97917,97919,97921,97923,97925],{"class":107,"line":108},[105,97914,354],{"class":115},[105,97916,161],{"class":111},[105,97918,92987],{"class":115},[105,97920,333],{"class":164},[105,97922,494],{"class":115},[105,97924,639],{"class":164},[105,97926,122],{"class":115},[105,97928,97929,97931,97933,97935,97937,97939,97941],{"class":107,"line":28},[105,97930,97802],{"class":115},[105,97932,161],{"class":111},[105,97934,116],{"class":115},[105,97936,193],{"class":164},[105,97938,494],{"class":115},[105,97940,460],{"class":164},[105,97942,122],{"class":115},[105,97944,97945],{"class":107,"line":1171},[105,97946,93549],{"class":174},[105,97948,97949],{"class":107,"line":1186},[105,97950,93913],{"class":220},[105,97952,97953],{"class":107,"line":1192},[105,97954,97173],{"class":220},[105,97956,97957],{"class":107,"line":1206},[105,97958,97178],{"class":220},[105,97960,97961],{"class":107,"line":1212},[105,97962,93913],{"class":220},[47,97964,97966],{"id":97965},"_56-重要比较","5.6 重要比较：",[14,97968,97969],{},[20,97970],{"alt":22,"src":97971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,97973,97974,97975,97977,97978,97980],{},"口诀：NumPy 函数要么用 ",[102,97976,95948],{},"，要么用 ",[102,97979,31481],{},"，创建结构用 shape，造数据用 size",[14,97982,97983],{},[20,97984],{"alt":22,"src":97985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5118,97987,97988],{},"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":28,"depth":28,"links":97990},[97991,97992,97993,97994,97995,97996],{"id":97512,"depth":28,"text":97513},{"id":97664,"depth":28,"text":97665},{"id":97714,"depth":28,"text":97715},{"id":97760,"depth":28,"text":97761},{"id":97901,"depth":28,"text":97902},{"id":97965,"depth":28,"text":97966},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97504,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98003,"title":98004,"body":98005,"description":23369,"extension":30,"meta":99077,"navigation":32,"path":99078,"seo":99079,"stem":99080,"__hash__":99081},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98006,"toc":99071},[98007,98010,98014,98017,98020,98023,98088,98091,98131,98134,98216,98219,98224,98246,98248,98253,98258,98261,98264,98419,98422,98624,98628,98631,98634,98702,98704,98709,98712,98715,98795,98799,98802,98804,98877,98879,98884,98886,98966,98970,98973,98976,98979,98982,98985,98988,99068],[10,98008,98004],{"id":98009},"_6数组的拼接",[47,98011,98013],{"id":98012},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98015,98016],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98018,98019],{},"函数内部传两个数列构成的数列或者元组",[14,98021,98022],{},"①一维数组的拼接",[96,98024,98026],{"className":30363,"code":98025,"language":30365,"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",[102,98027,98028,98048,98068,98073,98078,98083],{"__ignoreMap":22},[105,98029,98030,98032,98034,98036,98038,98040,98042,98044,98046],{"class":107,"line":108},[105,98031,354],{"class":115},[105,98033,161],{"class":111},[105,98035,93009],{"class":115},[105,98037,333],{"class":164},[105,98039,494],{"class":115},[105,98041,193],{"class":164},[105,98043,494],{"class":115},[105,98045,187],{"class":164},[105,98047,4648],{"class":115},[105,98049,98050,98052,98054,98056,98058,98060,98062,98064,98066],{"class":107,"line":28},[105,98051,379],{"class":115},[105,98053,161],{"class":111},[105,98055,93009],{"class":115},[105,98057,409],{"class":164},[105,98059,494],{"class":115},[105,98061,435],{"class":164},[105,98063,494],{"class":115},[105,98065,460],{"class":164},[105,98067,4648],{"class":115},[105,98069,98070],{"class":107,"line":1171},[105,98071,98072],{"class":174},"#调用concatenate进行数组拼接\n",[105,98074,98075],{"class":107,"line":1186},[105,98076,98077],{"class":115},"np.concatenate((a,b))\n",[105,98079,98080],{"class":107,"line":1192},[105,98081,98082],{"class":174},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[105,98084,98085],{"class":107,"line":1206},[105,98086,98087],{"class":174},"#np.concatenate([a,b])\n",[14,98089,98090],{},"②一维多个数组拼接",[96,98092,98094],{"className":30363,"code":98093,"language":30365,"meta":22,"style":22},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[102,98095,98096,98101,98121,98126],{"__ignoreMap":22},[105,98097,98098],{"class":107,"line":108},[105,98099,98100],{"class":174},"#也可以多个数组进行拼接\n",[105,98102,98103,98105,98107,98109,98111,98113,98115,98117,98119],{"class":107,"line":28},[105,98104,404],{"class":115},[105,98106,161],{"class":111},[105,98108,93009],{"class":115},[105,98110,562],{"class":164},[105,98112,494],{"class":115},[105,98114,588],{"class":164},[105,98116,494],{"class":115},[105,98118,639],{"class":164},[105,98120,4648],{"class":115},[105,98122,98123],{"class":107,"line":1171},[105,98124,98125],{"class":115},"c\n",[105,98127,98128],{"class":107,"line":1186},[105,98129,98130],{"class":115},"np.concatenate((a,b,c))\n",[14,98132,98133],{},"③二维数组拼接",[96,98135,98137],{"className":30363,"code":98136,"language":30365,"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",[102,98138,98139,98144,98168,98193,98198,98203],{"__ignoreMap":22},[105,98140,98141],{"class":107,"line":108},[105,98142,98143],{"class":174},"#二维数组使用concatenate进行拼接\n",[105,98145,98146,98148,98150,98152,98154,98156,98158,98160,98162,98164,98166],{"class":107,"line":28},[105,98147,93291],{"class":115},[105,98149,161],{"class":111},[105,98151,92987],{"class":115},[105,98153,333],{"class":164},[105,98155,494],{"class":115},[105,98157,639],{"class":164},[105,98159,92992],{"class":115},[105,98161,187],{"class":164},[105,98163,494],{"class":115},[105,98165,409],{"class":164},[105,98167,122],{"class":115},[105,98169,98170,98173,98175,98177,98179,98181,98183,98185,98187,98189,98191],{"class":107,"line":1171},[105,98171,98172],{"class":115},"bb",[105,98174,161],{"class":111},[105,98176,92987],{"class":115},[105,98178,453],{"class":164},[105,98180,494],{"class":115},[105,98182,758],{"class":164},[105,98184,92992],{"class":115},[105,98186,187],{"class":164},[105,98188,494],{"class":115},[105,98190,409],{"class":164},[105,98192,122],{"class":115},[105,98194,98195],{"class":107,"line":1186},[105,98196,98197],{"class":174},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[105,98199,98200],{"class":107,"line":1192},[105,98201,98202],{"class":174},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[105,98204,98205,98208,98210,98212,98214],{"class":107,"line":1206},[105,98206,98207],{"class":115},"np.concatenate((aa,bb),",[105,98209,47499],{"class":5208},[105,98211,161],{"class":111},[105,98213,307],{"class":164},[105,98215,122],{"class":115},[14,98217,98218],{},"结果：",[14,98220,98221],{},[20,98222],{"alt":22,"src":98223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[96,98225,98227],{"className":30363,"code":98226,"language":30365,"meta":22,"style":22},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[102,98228,98229,98234],{"__ignoreMap":22},[105,98230,98231],{"class":107,"line":108},[105,98232,98233],{"class":174},"#指定axis为1进行拼接\n",[105,98235,98236,98238,98240,98242,98244],{"class":107,"line":28},[105,98237,98207],{"class":115},[105,98239,47499],{"class":5208},[105,98241,161],{"class":111},[105,98243,333],{"class":164},[105,98245,122],{"class":115},[14,98247,98218],{},[14,98249,98250],{},[20,98251],{"alt":22,"src":98252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98254,98255],{},[265,98256,98257],{},"二维数组总结：0竖着方向，1横着方向",[14,98259,98260],{},"④三维数组拼接",[14,98262,98263],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[96,98265,98267],{"className":30363,"code":98266,"language":30365,"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",[102,98268,98269,98274,98302,98332,98337,98354,98359,98364,98369,98386,98391,98396,98401,98414],{"__ignoreMap":22},[105,98270,98271],{"class":107,"line":108},[105,98272,98273],{"class":174},"#两个三行六列\n",[105,98275,98276,98278,98280,98282,98284,98286,98288,98290,98292,98294,98296,98298,98300],{"class":107,"line":28},[105,98277,95506],{"class":115},[105,98279,161],{"class":111},[105,98281,92987],{"class":115},[105,98283,333],{"class":164},[105,98285,494],{"class":115},[105,98287,441],{"class":164},[105,98289,92992],{"class":115},[105,98291,193],{"class":164},[105,98293,494],{"class":115},[105,98295,187],{"class":164},[105,98297,494],{"class":115},[105,98299,460],{"class":164},[105,98301,122],{"class":115},[105,98303,98304,98307,98309,98311,98313,98315,98318,98320,98322,98324,98326,98328,98330],{"class":107,"line":1171},[105,98305,98306],{"class":115},"bbb",[105,98308,161],{"class":111},[105,98310,92987],{"class":115},[105,98312,453],{"class":164},[105,98314,494],{"class":115},[105,98316,98317],{"class":164},"137",[105,98319,92992],{"class":115},[105,98321,193],{"class":164},[105,98323,494],{"class":115},[105,98325,187],{"class":164},[105,98327,494],{"class":115},[105,98329,460],{"class":164},[105,98331,122],{"class":115},[105,98333,98334],{"class":107,"line":1186},[105,98335,98336],{"class":174},"#axis=0\n",[105,98338,98339,98341,98343,98346,98348,98350,98352],{"class":107,"line":1192},[105,98340,811],{"class":115},[105,98342,161],{"class":111},[105,98344,98345],{"class":115},"np.concatenate((aaa,bbb),",[105,98347,47499],{"class":5208},[105,98349,161],{"class":111},[105,98351,307],{"class":164},[105,98353,122],{"class":115},[105,98355,98356],{"class":107,"line":1206},[105,98357,98358],{"class":115},"s.shape\n",[105,98360,98361],{"class":107,"line":1212},[105,98362,98363],{"class":174},"#输出：(4,3,6)\n",[105,98365,98366],{"class":107,"line":1303},[105,98367,98368],{"class":174},"#axis=1\n",[105,98370,98371,98374,98376,98378,98380,98382,98384],{"class":107,"line":1309},[105,98372,98373],{"class":115},"ss",[105,98375,161],{"class":111},[105,98377,98345],{"class":115},[105,98379,47499],{"class":5208},[105,98381,161],{"class":111},[105,98383,333],{"class":164},[105,98385,122],{"class":115},[105,98387,98388],{"class":107,"line":1321},[105,98389,98390],{"class":115},"ss.shape\n",[105,98392,98393],{"class":107,"line":1603},[105,98394,98395],{"class":174},"#输出：(2,6,6)\n",[105,98397,98398],{"class":107,"line":1608},[105,98399,98400],{"class":174},"#axis=2\n",[105,98402,98403,98405,98407,98409,98411],{"class":107,"line":1614},[105,98404,98345],{"class":115},[105,98406,47499],{"class":5208},[105,98408,161],{"class":111},[105,98410,193],{"class":164},[105,98412,98413],{"class":115},").shape\n",[105,98415,98416],{"class":107,"line":1619},[105,98417,98418],{"class":174},"#输出：（2，3，12）\n",[14,98420,98421],{},"⑤四维数组拼接",[96,98423,98425],{"className":30363,"code":98424,"language":30365,"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",[102,98426,98427,98431,98459,98487,98512,98538,98542,98555,98560,98564,98576,98581,98585,98597,98602,98607,98619],{"__ignoreMap":22},[105,98428,98429],{"class":107,"line":108},[105,98430,98273],{"class":174},[105,98432,98433,98435,98437,98439,98441,98443,98445,98447,98449,98451,98453,98455,98457],{"class":107,"line":28},[105,98434,95506],{"class":115},[105,98436,161],{"class":111},[105,98438,92987],{"class":115},[105,98440,333],{"class":164},[105,98442,494],{"class":115},[105,98444,441],{"class":164},[105,98446,92992],{"class":115},[105,98448,193],{"class":164},[105,98450,494],{"class":115},[105,98452,187],{"class":164},[105,98454,494],{"class":115},[105,98456,460],{"class":164},[105,98458,122],{"class":115},[105,98460,98461,98463,98465,98467,98469,98471,98473,98475,98477,98479,98481,98483,98485],{"class":107,"line":1171},[105,98462,98306],{"class":115},[105,98464,161],{"class":111},[105,98466,92987],{"class":115},[105,98468,453],{"class":164},[105,98470,494],{"class":115},[105,98472,98317],{"class":164},[105,98474,92992],{"class":115},[105,98476,193],{"class":164},[105,98478,494],{"class":115},[105,98480,187],{"class":164},[105,98482,494],{"class":115},[105,98484,460],{"class":164},[105,98486,122],{"class":115},[105,98488,98489,98492,98494,98496,98498,98500,98502,98504,98506,98508,98510],{"class":107,"line":1186},[105,98490,98491],{"class":115},"aaaa",[105,98493,161],{"class":111},[105,98495,97655],{"class":115},[105,98497,193],{"class":164},[105,98499,494],{"class":115},[105,98501,187],{"class":164},[105,98503,494],{"class":115},[105,98505,187],{"class":164},[105,98507,494],{"class":115},[105,98509,193],{"class":164},[105,98511,122],{"class":115},[105,98513,98514,98517,98519,98522,98524,98526,98528,98530,98532,98534,98536],{"class":107,"line":1192},[105,98515,98516],{"class":115},"bbbb",[105,98518,161],{"class":111},[105,98520,98521],{"class":115},"bbb.reshape(",[105,98523,193],{"class":164},[105,98525,494],{"class":115},[105,98527,187],{"class":164},[105,98529,494],{"class":115},[105,98531,187],{"class":164},[105,98533,494],{"class":115},[105,98535,193],{"class":164},[105,98537,122],{"class":115},[105,98539,98540],{"class":107,"line":1206},[105,98541,98336],{"class":174},[105,98543,98544,98547,98549,98551,98553],{"class":107,"line":1212},[105,98545,98546],{"class":115},"np.concatenate((aaaa,bbbb),",[105,98548,47499],{"class":5208},[105,98550,161],{"class":111},[105,98552,307],{"class":164},[105,98554,98413],{"class":115},[105,98556,98557],{"class":107,"line":1303},[105,98558,98559],{"class":174},"#结果：（4，3，3，2）\n",[105,98561,98562],{"class":107,"line":1309},[105,98563,98368],{"class":174},[105,98565,98566,98568,98570,98572,98574],{"class":107,"line":1321},[105,98567,98546],{"class":115},[105,98569,47499],{"class":5208},[105,98571,161],{"class":111},[105,98573,333],{"class":164},[105,98575,98413],{"class":115},[105,98577,98578],{"class":107,"line":1603},[105,98579,98580],{"class":174},"#结果：（2，6，3，2）\n",[105,98582,98583],{"class":107,"line":1608},[105,98584,98400],{"class":174},[105,98586,98587,98589,98591,98593,98595],{"class":107,"line":1614},[105,98588,98546],{"class":115},[105,98590,47499],{"class":5208},[105,98592,161],{"class":111},[105,98594,193],{"class":164},[105,98596,98413],{"class":115},[105,98598,98599],{"class":107,"line":1619},[105,98600,98601],{"class":174},"#结果：（2，3，6，2）\n",[105,98603,98604],{"class":107,"line":1633},[105,98605,98606],{"class":174},"#axis=3\n",[105,98608,98609,98611,98613,98615,98617],{"class":107,"line":1638},[105,98610,98546],{"class":115},[105,98612,47499],{"class":5208},[105,98614,161],{"class":111},[105,98616,187],{"class":164},[105,98618,98413],{"class":115},[105,98620,98621],{"class":107,"line":1644},[105,98622,98623],{"class":174},"#结果：（2，3，3，4）\n",[47,98625,98627],{"id":98626},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98629,98630],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98632,98633],{},"①二维数组",[96,98635,98637],{"className":30363,"code":98636,"language":30365,"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",[102,98638,98639,98663,98687,98692,98697],{"__ignoreMap":22},[105,98640,98641,98643,98645,98647,98649,98651,98653,98655,98657,98659,98661],{"class":107,"line":108},[105,98642,93291],{"class":115},[105,98644,161],{"class":111},[105,98646,92987],{"class":115},[105,98648,333],{"class":164},[105,98650,494],{"class":115},[105,98652,639],{"class":164},[105,98654,92992],{"class":115},[105,98656,187],{"class":164},[105,98658,494],{"class":115},[105,98660,409],{"class":164},[105,98662,122],{"class":115},[105,98664,98665,98667,98669,98671,98673,98675,98677,98679,98681,98683,98685],{"class":107,"line":28},[105,98666,98172],{"class":115},[105,98668,161],{"class":111},[105,98670,92987],{"class":115},[105,98672,453],{"class":164},[105,98674,494],{"class":115},[105,98676,758],{"class":164},[105,98678,92992],{"class":115},[105,98680,187],{"class":164},[105,98682,494],{"class":115},[105,98684,409],{"class":164},[105,98686,122],{"class":115},[105,98688,98689],{"class":107,"line":1171},[105,98690,98691],{"class":115},"np.hstack((aa,bb))\n",[105,98693,98694],{"class":107,"line":1186},[105,98695,98696],{"class":174},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[105,98698,98699],{"class":107,"line":1192},[105,98700,98701],{"class":174},"#np.hstack([aa,bb])\n",[14,98703,98218],{},[14,98705,98706],{},[20,98707],{"alt":22,"src":98708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98710,98711],{},"等效于concatenate()函数中axis=1时的情况",[14,98713,98714],{},"②三维数组",[96,98716,98718],{"className":30363,"code":98717,"language":30365,"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",[102,98719,98720,98724,98752,98780,98785,98790],{"__ignoreMap":22},[105,98721,98722],{"class":107,"line":108},[105,98723,98273],{"class":174},[105,98725,98726,98728,98730,98732,98734,98736,98738,98740,98742,98744,98746,98748,98750],{"class":107,"line":28},[105,98727,95506],{"class":115},[105,98729,161],{"class":111},[105,98731,92987],{"class":115},[105,98733,333],{"class":164},[105,98735,494],{"class":115},[105,98737,441],{"class":164},[105,98739,92992],{"class":115},[105,98741,193],{"class":164},[105,98743,494],{"class":115},[105,98745,187],{"class":164},[105,98747,494],{"class":115},[105,98749,460],{"class":164},[105,98751,122],{"class":115},[105,98753,98754,98756,98758,98760,98762,98764,98766,98768,98770,98772,98774,98776,98778],{"class":107,"line":1171},[105,98755,98306],{"class":115},[105,98757,161],{"class":111},[105,98759,92987],{"class":115},[105,98761,453],{"class":164},[105,98763,494],{"class":115},[105,98765,98317],{"class":164},[105,98767,92992],{"class":115},[105,98769,193],{"class":164},[105,98771,494],{"class":115},[105,98773,187],{"class":164},[105,98775,494],{"class":115},[105,98777,460],{"class":164},[105,98779,122],{"class":115},[105,98781,98782],{"class":107,"line":1186},[105,98783,98784],{"class":174},"#使用hstack\n",[105,98786,98787],{"class":107,"line":1192},[105,98788,98789],{"class":115},"np.hstack((aaa,bbb)).shape\n",[105,98791,98792],{"class":107,"line":1206},[105,98793,98794],{"class":174},"#输出：（2，6，6）\n",[47,98796,98798],{"id":98797},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98800,98801],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98803,98633],{},[96,98805,98807],{"className":30363,"code":98806,"language":30365,"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",[102,98808,98809,98833,98857,98862,98867,98872],{"__ignoreMap":22},[105,98810,98811,98813,98815,98817,98819,98821,98823,98825,98827,98829,98831],{"class":107,"line":108},[105,98812,93291],{"class":115},[105,98814,161],{"class":111},[105,98816,92987],{"class":115},[105,98818,333],{"class":164},[105,98820,494],{"class":115},[105,98822,639],{"class":164},[105,98824,92992],{"class":115},[105,98826,187],{"class":164},[105,98828,494],{"class":115},[105,98830,409],{"class":164},[105,98832,122],{"class":115},[105,98834,98835,98837,98839,98841,98843,98845,98847,98849,98851,98853,98855],{"class":107,"line":28},[105,98836,98172],{"class":115},[105,98838,161],{"class":111},[105,98840,92987],{"class":115},[105,98842,453],{"class":164},[105,98844,494],{"class":115},[105,98846,758],{"class":164},[105,98848,92992],{"class":115},[105,98850,187],{"class":164},[105,98852,494],{"class":115},[105,98854,409],{"class":164},[105,98856,122],{"class":115},[105,98858,98859],{"class":107,"line":1171},[105,98860,98861],{"class":174},"#vstack 垂直方向进行堆叠\n",[105,98863,98864],{"class":107,"line":1186},[105,98865,98866],{"class":115},"np.vstack((aa,bb))\n",[105,98868,98869],{"class":107,"line":1192},[105,98870,98871],{"class":174},"#与hstack传的参数类似，等价于：\n",[105,98873,98874],{"class":107,"line":1206},[105,98875,98876],{"class":115},"np.vstack([aa,bb])\n",[14,98878,98218],{},[14,98880,98881],{},[20,98882],{"alt":22,"src":98883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98885,98714],{},[96,98887,98889],{"className":30363,"code":98888,"language":30365,"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",[102,98890,98891,98895,98923,98951,98956,98961],{"__ignoreMap":22},[105,98892,98893],{"class":107,"line":108},[105,98894,98273],{"class":174},[105,98896,98897,98899,98901,98903,98905,98907,98909,98911,98913,98915,98917,98919,98921],{"class":107,"line":28},[105,98898,95506],{"class":115},[105,98900,161],{"class":111},[105,98902,92987],{"class":115},[105,98904,333],{"class":164},[105,98906,494],{"class":115},[105,98908,441],{"class":164},[105,98910,92992],{"class":115},[105,98912,193],{"class":164},[105,98914,494],{"class":115},[105,98916,187],{"class":164},[105,98918,494],{"class":115},[105,98920,460],{"class":164},[105,98922,122],{"class":115},[105,98924,98925,98927,98929,98931,98933,98935,98937,98939,98941,98943,98945,98947,98949],{"class":107,"line":1171},[105,98926,98306],{"class":115},[105,98928,161],{"class":111},[105,98930,92987],{"class":115},[105,98932,453],{"class":164},[105,98934,494],{"class":115},[105,98936,98317],{"class":164},[105,98938,92992],{"class":115},[105,98940,193],{"class":164},[105,98942,494],{"class":115},[105,98944,187],{"class":164},[105,98946,494],{"class":115},[105,98948,460],{"class":164},[105,98950,122],{"class":115},[105,98952,98953],{"class":107,"line":1186},[105,98954,98955],{"class":174},"#使用vstack\n",[105,98957,98958],{"class":107,"line":1192},[105,98959,98960],{"class":115},"np.vstack((aaa,bbb)).shape\n",[105,98962,98963],{"class":107,"line":1206},[105,98964,98965],{"class":174},"#输出：（4，3，6）\n",[47,98967,98969],{"id":98968},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,98971,98972],{},"该方法是三维数组特有的方法",[14,98974,98975],{},"也就是说",[14,98977,98978],{},"一维数组拼接方法用：concatenate()",[14,98980,98981],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,98983,98984],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,98986,98987],{},"四维数组及多维数组只能用concatenate进行拼接",[96,98989,98991],{"className":30363,"code":98990,"language":30365,"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",[102,98992,98993,98997,99025,99053,99058,99063],{"__ignoreMap":22},[105,98994,98995],{"class":107,"line":108},[105,98996,98273],{"class":174},[105,98998,98999,99001,99003,99005,99007,99009,99011,99013,99015,99017,99019,99021,99023],{"class":107,"line":28},[105,99000,95506],{"class":115},[105,99002,161],{"class":111},[105,99004,92987],{"class":115},[105,99006,333],{"class":164},[105,99008,494],{"class":115},[105,99010,441],{"class":164},[105,99012,92992],{"class":115},[105,99014,193],{"class":164},[105,99016,494],{"class":115},[105,99018,187],{"class":164},[105,99020,494],{"class":115},[105,99022,460],{"class":164},[105,99024,122],{"class":115},[105,99026,99027,99029,99031,99033,99035,99037,99039,99041,99043,99045,99047,99049,99051],{"class":107,"line":1171},[105,99028,98306],{"class":115},[105,99030,161],{"class":111},[105,99032,92987],{"class":115},[105,99034,453],{"class":164},[105,99036,494],{"class":115},[105,99038,98317],{"class":164},[105,99040,92992],{"class":115},[105,99042,193],{"class":164},[105,99044,494],{"class":115},[105,99046,187],{"class":164},[105,99048,494],{"class":115},[105,99050,460],{"class":164},[105,99052,122],{"class":115},[105,99054,99055],{"class":107,"line":1186},[105,99056,99057],{"class":174},"#使用dstack\n",[105,99059,99060],{"class":107,"line":1192},[105,99061,99062],{"class":115},"np.dstack((aaa,bbb)).shape\n",[105,99064,99065],{"class":107,"line":1206},[105,99066,99067],{"class":174},"#结果：（2，3，12）\n",[5118,99069,99070],{},"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":28,"depth":28,"links":99072},[99073,99074,99075,99076],{"id":98012,"depth":28,"text":98013},{"id":98626,"depth":28,"text":98627},{"id":98797,"depth":28,"text":98798},{"id":98968,"depth":28,"text":98969},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98004,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99083,"title":99084,"body":99085,"description":23369,"extension":30,"meta":99360,"navigation":32,"path":99361,"seo":99362,"stem":99363,"__hash__":99364},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99086,"toc":99358},[99087,99090,99093,99187,99190,99193,99196,99199,99202,99205,99208,99211,99355],[10,99088,99084],{"id":99089},"_7数组转置",[14,99091,99092],{},"使用transpose()函数",[96,99094,99096],{"className":30363,"code":99095,"language":30365,"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",[102,99097,99098,99108,99132,99137,99142,99147,99152,99160,99164,99168,99173,99178,99183],{"__ignoreMap":22},[105,99099,99100,99102,99104,99106],{"class":107,"line":108},[105,99101,30377],{"class":111},[105,99103,31365],{"class":115},[105,99105,31368],{"class":111},[105,99107,31371],{"class":115},[105,99109,99110,99112,99114,99116,99118,99120,99122,99124,99126,99128,99130],{"class":107,"line":28},[105,99111,354],{"class":115},[105,99113,161],{"class":111},[105,99115,31702],{"class":115},[105,99117,333],{"class":164},[105,99119,494],{"class":115},[105,99121,639],{"class":164},[105,99123,92992],{"class":115},[105,99125,409],{"class":164},[105,99127,494],{"class":115},[105,99129,187],{"class":164},[105,99131,122],{"class":115},[105,99133,99134],{"class":107,"line":1171},[105,99135,99136],{"class":174},"#二维数组转置\n",[105,99138,99139],{"class":107,"line":1186},[105,99140,99141],{"class":174},"#调用transpose()函数\n",[105,99143,99144],{"class":107,"line":1192},[105,99145,99146],{"class":115},"a.transpose()\n",[105,99148,99149],{"class":107,"line":1206},[105,99150,99151],{"class":174},"#对于二维数组也可以采用.T来实现\n",[105,99153,99154,99157],{"class":107,"line":1212},[105,99155,99156],{"class":115},"a.T",[105,99158,99159],{"class":174},"#与上述代码一样\n",[105,99161,99162],{"class":107,"line":1303},[105,99163,93549],{"class":174},[105,99165,99166],{"class":107,"line":1309},[105,99167,93913],{"class":220},[105,99169,99170],{"class":107,"line":1321},[105,99171,99172],{"class":220},"array([[ 1,  4,  7, 10],\n",[105,99174,99175],{"class":107,"line":1603},[105,99176,99177],{"class":220},"       [ 2,  5,  8, 11],\n",[105,99179,99180],{"class":107,"line":1608},[105,99181,99182],{"class":220},"       [ 3,  6,  9, 12]])\n",[105,99184,99185],{"class":107,"line":1614},[105,99186,93913],{"class":220},[14,99188,99189],{},"也可以使用np.transpose()的形式",[14,99191,99192],{},"#多维数组进行转置 np.transpose()",[14,99194,99195],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99197,99198],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99200,99201],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99203,99204],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99206,99207],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99209,99210],{},"四维及以上的数组也是一样的道理",[96,99212,99214],{"className":30363,"code":99213,"language":30365,"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",[102,99215,99216,99244,99249,99254,99259,99277,99282,99314,99319,99324,99329,99350],{"__ignoreMap":22},[105,99217,99218,99220,99222,99224,99226,99228,99230,99232,99234,99236,99238,99240,99242],{"class":107,"line":108},[105,99219,936],{"class":115},[105,99221,161],{"class":111},[105,99223,92987],{"class":115},[105,99225,333],{"class":164},[105,99227,494],{"class":115},[105,99229,441],{"class":164},[105,99231,92992],{"class":115},[105,99233,187],{"class":164},[105,99235,494],{"class":115},[105,99237,460],{"class":164},[105,99239,494],{"class":115},[105,99241,193],{"class":164},[105,99243,122],{"class":115},[105,99245,99246],{"class":107,"line":28},[105,99247,99248],{"class":115},"x.shape\n",[105,99250,99251],{"class":107,"line":1171},[105,99252,99253],{"class":174},"#结果：（3,6,2）\n",[105,99255,99256],{"class":107,"line":1186},[105,99257,99258],{"class":174},"#使用np.transpose()进行转置 变为(2,6,3)\n",[105,99260,99261,99264,99266,99268,99270,99272,99274],{"class":107,"line":1192},[105,99262,99263],{"class":115},"np.transpose(x,(",[105,99265,193],{"class":164},[105,99267,494],{"class":115},[105,99269,333],{"class":164},[105,99271,494],{"class":115},[105,99273,307],{"class":164},[105,99275,99276],{"class":115},")).shape\n",[105,99278,99279],{"class":107,"line":1206},[105,99280,99281],{"class":174},"#结果：(2,6,3)\n",[105,99283,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304,99306,99308,99310,99312],{"class":107,"line":1212},[105,99285,98491],{"class":115},[105,99287,161],{"class":111},[105,99289,92987],{"class":115},[105,99291,333],{"class":164},[105,99293,494],{"class":115},[105,99295,441],{"class":164},[105,99297,92992],{"class":115},[105,99299,187],{"class":164},[105,99301,494],{"class":115},[105,99303,193],{"class":164},[105,99305,494],{"class":115},[105,99307,333],{"class":164},[105,99309,494],{"class":115},[105,99311,460],{"class":164},[105,99313,122],{"class":115},[105,99315,99316],{"class":107,"line":1303},[105,99317,99318],{"class":115},"aaaa.shape\n",[105,99320,99321],{"class":107,"line":1309},[105,99322,99323],{"class":174},"#结果：（3，2，1，6）\n",[105,99325,99326],{"class":107,"line":1321},[105,99327,99328],{"class":174},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[105,99330,99331,99334,99336,99338,99340,99342,99344,99346,99348],{"class":107,"line":1603},[105,99332,99333],{"class":115},"np.transpose(aaaa,(",[105,99335,333],{"class":164},[105,99337,494],{"class":115},[105,99339,193],{"class":164},[105,99341,494],{"class":115},[105,99343,307],{"class":164},[105,99345,494],{"class":115},[105,99347,187],{"class":164},[105,99349,99276],{"class":115},[105,99351,99352],{"class":107,"line":1608},[105,99353,99354],{"class":174},"#结果：(2,1,3,6)\n",[5118,99356,99357],{},"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":28,"depth":28,"links":99359},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99084,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99366,"title":99367,"body":99368,"description":23369,"extension":30,"meta":100102,"navigation":32,"path":100103,"seo":100104,"stem":100105,"__hash__":100106},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99369,"toc":100100},[99370,99373,99376,99379,99382,99385,99388,99391,99394,99503,99506,99509,100097],[10,99371,99367],{"id":99372},"_8数组分割",[14,99374,99375],{},"split分割",[14,99377,99378],{},"numpy.split(ary,indics_or_sections,axis)",[14,99380,99381],{},"解释：",[14,99383,99384],{},"ary:被分割的数组",[14,99386,99387],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99389,99390],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99392,99393],{},"①一维数组的分割",[96,99395,99397],{"className":30363,"code":99396,"language":30365,"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",[102,99398,99399,99415,99420,99429,99433,99438,99446,99450,99455,99460,99473,99477,99482,99494,99498],{"__ignoreMap":22},[105,99400,99401,99403,99405,99407,99409,99411,99413],{"class":107,"line":108},[105,99402,354],{"class":115},[105,99404,161],{"class":111},[105,99406,92987],{"class":115},[105,99408,333],{"class":164},[105,99410,494],{"class":115},[105,99412,536],{"class":164},[105,99414,122],{"class":115},[105,99416,99417],{"class":107,"line":28},[105,99418,99419],{"class":174},"#如果传入整数，必须能够平分，否则会报错\n",[105,99421,99422,99425,99427],{"class":107,"line":1171},[105,99423,99424],{"class":115},"np.split(a,",[105,99426,193],{"class":164},[105,99428,122],{"class":115},[105,99430,99431],{"class":107,"line":1186},[105,99432,93549],{"class":174},[105,99434,99435],{"class":107,"line":1192},[105,99436,99437],{"class":174},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[105,99439,99440,99442,99444],{"class":107,"line":1206},[105,99441,99424],{"class":115},[105,99443,409],{"class":164},[105,99445,122],{"class":115},[105,99447,99448],{"class":107,"line":1212},[105,99449,93549],{"class":174},[105,99451,99452],{"class":107,"line":1303},[105,99453,99454],{"class":174},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[105,99456,99457],{"class":107,"line":1309},[105,99458,99459],{"class":174},"#传入数组\n",[105,99461,99462,99465,99467,99469,99471],{"class":107,"line":1321},[105,99463,99464],{"class":115},"np.split(a,[",[105,99466,187],{"class":164},[105,99468,494],{"class":115},[105,99470,435],{"class":164},[105,99472,4648],{"class":115},[105,99474,99475],{"class":107,"line":1603},[105,99476,93549],{"class":174},[105,99478,99479],{"class":107,"line":1608},[105,99480,99481],{"class":174},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[105,99483,99484,99486,99488,99490,99492],{"class":107,"line":1614},[105,99485,99464],{"class":115},[105,99487,435],{"class":164},[105,99489,494],{"class":115},[105,99491,485],{"class":164},[105,99493,4648],{"class":115},[105,99495,99496],{"class":107,"line":1619},[105,99497,93549],{"class":174},[105,99499,99500],{"class":107,"line":1633},[105,99501,99502],{"class":174},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99504,99505],{},"②二维数组的分割",[14,99507,99508],{},"使用split()",[96,99510,99512],{"className":30363,"code":99511,"language":30365,"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",[102,99513,99514,99519,99543,99548,99557,99561,99565,99570,99575,99580,99585,99590,99595,99600,99604,99617,99621,99625,99629,99633,99637,99642,99647,99652,99656,99661,99677,99681,99685,99690,99695,99700,99705,99710,99715,99720,99725,99730,99735,99740,99745,99750,99755,99760,99765,99770,99775,99779,99783,99803,99807,99811,99816,99821,99826,99831,99836,99841,99846,99851,99856,99861,99866,99871,99876,99881,99886,99891,99896,99901,99905,99910,99919,99923,99927,99931,99935,99939,99943,99947,99951,99955,99964,99968,99972,99976,99980,99984,99988,99992,99996,100000,100004,100008,100012,100016,100020,100024,100028,100032,100036,100040,100044,100048,100061,100065,100069,100073,100077,100081,100085,100089,100093],{"__ignoreMap":22},[105,99515,99516],{"class":107,"line":108},[105,99517,99518],{"class":174},"#二维数组分割\n",[105,99520,99521,99523,99525,99527,99529,99531,99533,99535,99537,99539,99541],{"class":107,"line":28},[105,99522,93291],{"class":115},[105,99524,161],{"class":111},[105,99526,92987],{"class":115},[105,99528,333],{"class":164},[105,99530,494],{"class":115},[105,99532,441],{"class":164},[105,99534,92992],{"class":115},[105,99536,460],{"class":164},[105,99538,494],{"class":115},[105,99540,460],{"class":164},[105,99542,122],{"class":115},[105,99544,99545],{"class":107,"line":1171},[105,99546,99547],{"class":174},"#默认axis=0  传入整数平均分,按行来的\n",[105,99549,99550,99553,99555],{"class":107,"line":1186},[105,99551,99552],{"class":115},"np.split(aa,",[105,99554,187],{"class":164},[105,99556,122],{"class":115},[105,99558,99559],{"class":107,"line":1192},[105,99560,95749],{"class":174},[105,99562,99563],{"class":107,"line":1206},[105,99564,93913],{"class":220},[105,99566,99567],{"class":107,"line":1212},[105,99568,99569],{"class":220},"[array([[ 1,  2,  3,  4,  5,  6],\n",[105,99571,99572],{"class":107,"line":1303},[105,99573,99574],{"class":220},"        [ 7,  8,  9, 10, 11, 12]]),\n",[105,99576,99577],{"class":107,"line":1309},[105,99578,99579],{"class":220}," array([[13, 14, 15, 16, 17, 18],\n",[105,99581,99582],{"class":107,"line":1321},[105,99583,99584],{"class":220},"        [19, 20, 21, 22, 23, 24]]),\n",[105,99586,99587],{"class":107,"line":1603},[105,99588,99589],{"class":220}," array([[25, 26, 27, 28, 29, 30],\n",[105,99591,99592],{"class":107,"line":1608},[105,99593,99594],{"class":220},"        [31, 32, 33, 34, 35, 36]])]\n",[105,99596,99597],{"class":107,"line":1614},[105,99598,99599],{"class":220}," '''\n",[105,99601,99602],{"class":107,"line":1619},[105,99603,99459],{"class":174},[105,99605,99606,99609,99611,99613,99615],{"class":107,"line":1633},[105,99607,99608],{"class":115},"np.split(aa,[",[105,99610,193],{"class":164},[105,99612,494],{"class":115},[105,99614,435],{"class":164},[105,99616,4648],{"class":115},[105,99618,99619],{"class":107,"line":1638},[105,99620,95749],{"class":174},[105,99622,99623],{"class":107,"line":1644},[105,99624,93913],{"class":220},[105,99626,99627],{"class":107,"line":1665},[105,99628,99569],{"class":220},[105,99630,99631],{"class":107,"line":1670},[105,99632,99574],{"class":220},[105,99634,99635],{"class":107,"line":1684},[105,99636,99579],{"class":220},[105,99638,99639],{"class":107,"line":1689},[105,99640,99641],{"class":220},"        [19, 20, 21, 22, 23, 24],\n",[105,99643,99644],{"class":107,"line":1718},[105,99645,99646],{"class":220},"        [25, 26, 27, 28, 29, 30]]),\n",[105,99648,99649],{"class":107,"line":1723},[105,99650,99651],{"class":220}," array([[31, 32, 33, 34, 35, 36]])]\n",[105,99653,99654],{"class":107,"line":1740},[105,99655,93913],{"class":220},[105,99657,99658],{"class":107,"line":1745},[105,99659,99660],{"class":174},"#axis=1 按照列来分\n",[105,99662,99663,99665,99667,99669,99671,99673,99675],{"class":107,"line":1750},[105,99664,99552],{"class":115},[105,99666,187],{"class":164},[105,99668,494],{"class":115},[105,99670,47499],{"class":5208},[105,99672,161],{"class":111},[105,99674,333],{"class":164},[105,99676,122],{"class":115},[105,99678,99679],{"class":107,"line":1755},[105,99680,95749],{"class":174},[105,99682,99683],{"class":107,"line":1769},[105,99684,93913],{"class":220},[105,99686,99687],{"class":107,"line":1774},[105,99688,99689],{"class":220},"[array([[ 1,  2],\n",[105,99691,99692],{"class":107,"line":2568},[105,99693,99694],{"class":220},"        [ 7,  8],\n",[105,99696,99697],{"class":107,"line":2582},[105,99698,99699],{"class":220},"        [13, 14],\n",[105,99701,99702],{"class":107,"line":2590},[105,99703,99704],{"class":220},"        [19, 20],\n",[105,99706,99707],{"class":107,"line":2595},[105,99708,99709],{"class":220},"        [25, 26],\n",[105,99711,99712],{"class":107,"line":2601},[105,99713,99714],{"class":220},"        [31, 32]]),\n",[105,99716,99717],{"class":107,"line":2607},[105,99718,99719],{"class":220}," array([[ 3,  4],\n",[105,99721,99722],{"class":107,"line":2612},[105,99723,99724],{"class":220},"        [ 9, 10],\n",[105,99726,99727],{"class":107,"line":7940},[105,99728,99729],{"class":220},"        [15, 16],\n",[105,99731,99732],{"class":107,"line":7964},[105,99733,99734],{"class":220},"        [21, 22],\n",[105,99736,99737],{"class":107,"line":7969},[105,99738,99739],{"class":220},"        [27, 28],\n",[105,99741,99742],{"class":107,"line":7975},[105,99743,99744],{"class":220},"        [33, 34]]),\n",[105,99746,99747],{"class":107,"line":8002},[105,99748,99749],{"class":220}," array([[ 5,  6],\n",[105,99751,99752],{"class":107,"line":8007},[105,99753,99754],{"class":220},"        [11, 12],\n",[105,99756,99757],{"class":107,"line":8013},[105,99758,99759],{"class":220},"        [17, 18],\n",[105,99761,99762],{"class":107,"line":8025},[105,99763,99764],{"class":220},"        [23, 24],\n",[105,99766,99767],{"class":107,"line":8037},[105,99768,99769],{"class":220},"        [29, 30],\n",[105,99771,99772],{"class":107,"line":8049},[105,99773,99774],{"class":220},"        [35, 36]])]\n",[105,99776,99777],{"class":107,"line":9708},[105,99778,99599],{"class":220},[105,99780,99781],{"class":107,"line":9733},[105,99782,99459],{"class":174},[105,99784,99785,99787,99789,99791,99793,99795,99797,99799,99801],{"class":107,"line":9756},[105,99786,99608],{"class":115},[105,99788,333],{"class":164},[105,99790,494],{"class":115},[105,99792,193],{"class":164},[105,99794,41594],{"class":115},[105,99796,47499],{"class":5208},[105,99798,161],{"class":111},[105,99800,333],{"class":164},[105,99802,122],{"class":115},[105,99804,99805],{"class":107,"line":9780},[105,99806,93549],{"class":174},[105,99808,99809],{"class":107,"line":9785},[105,99810,93913],{"class":220},[105,99812,99813],{"class":107,"line":9790},[105,99814,99815],{"class":220},"[array([[ 1],\n",[105,99817,99818],{"class":107,"line":9795},[105,99819,99820],{"class":220},"        [ 7],\n",[105,99822,99823],{"class":107,"line":9804},[105,99824,99825],{"class":220},"        [13],\n",[105,99827,99828],{"class":107,"line":9809},[105,99829,99830],{"class":220},"        [19],\n",[105,99832,99833],{"class":107,"line":9815},[105,99834,99835],{"class":220},"        [25],\n",[105,99837,99838],{"class":107,"line":9836},[105,99839,99840],{"class":220},"        [31]]),\n",[105,99842,99843],{"class":107,"line":9842},[105,99844,99845],{"class":220}," array([[ 2],\n",[105,99847,99848],{"class":107,"line":9856},[105,99849,99850],{"class":220},"        [ 8],\n",[105,99852,99853],{"class":107,"line":9862},[105,99854,99855],{"class":220},"        [14],\n",[105,99857,99858],{"class":107,"line":9889},[105,99859,99860],{"class":220},"        [20],\n",[105,99862,99863],{"class":107,"line":9898},[105,99864,99865],{"class":220},"        [26],\n",[105,99867,99868],{"class":107,"line":9904},[105,99869,99870],{"class":220},"        [32]]),\n",[105,99872,99873],{"class":107,"line":9912},[105,99874,99875],{"class":220}," array([[ 3,  4,  5,  6],\n",[105,99877,99878],{"class":107,"line":9917},[105,99879,99880],{"class":220},"        [ 9, 10, 11, 12],\n",[105,99882,99883],{"class":107,"line":16596},[105,99884,99885],{"class":220},"        [15, 16, 17, 18],\n",[105,99887,99888],{"class":107,"line":16602},[105,99889,99890],{"class":220},"        [21, 22, 23, 24],\n",[105,99892,99893],{"class":107,"line":16625},[105,99894,99895],{"class":220},"        [27, 28, 29, 30],\n",[105,99897,99898],{"class":107,"line":16631},[105,99899,99900],{"class":220},"        [33, 34, 35, 36]])]\n",[105,99902,99903],{"class":107,"line":16654},[105,99904,93913],{"class":220},[105,99906,99907],{"class":107,"line":16668},[105,99908,99909],{"class":174},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[105,99911,99912,99915,99917],{"class":107,"line":16688},[105,99913,99914],{"class":115},"np.vsplit(aa,",[105,99916,187],{"class":164},[105,99918,122],{"class":115},[105,99920,99921],{"class":107,"line":16694},[105,99922,93549],{"class":174},[105,99924,99925],{"class":107,"line":16705},[105,99926,93913],{"class":220},[105,99928,99929],{"class":107,"line":16728},[105,99930,99569],{"class":220},[105,99932,99933],{"class":107,"line":16750},[105,99934,99574],{"class":220},[105,99936,99937],{"class":107,"line":16755},[105,99938,99579],{"class":220},[105,99940,99941],{"class":107,"line":16761},[105,99942,99584],{"class":220},[105,99944,99945],{"class":107,"line":16775},[105,99946,99589],{"class":220},[105,99948,99949],{"class":107,"line":16788},[105,99950,99594],{"class":220},[105,99952,99953],{"class":107,"line":16793},[105,99954,93913],{"class":220},[105,99956,99957,99960,99962],{"class":107,"line":16807},[105,99958,99959],{"class":115},"np.hsplit(aa,",[105,99961,187],{"class":164},[105,99963,122],{"class":115},[105,99965,99966],{"class":107,"line":16812},[105,99967,93549],{"class":174},[105,99969,99970],{"class":107,"line":16818},[105,99971,93913],{"class":220},[105,99973,99974],{"class":107,"line":16823},[105,99975,99689],{"class":220},[105,99977,99978],{"class":107,"line":16837},[105,99979,99694],{"class":220},[105,99981,99982],{"class":107,"line":16842},[105,99983,99699],{"class":220},[105,99985,99986],{"class":107,"line":16847},[105,99987,99704],{"class":220},[105,99989,99990],{"class":107,"line":16861},[105,99991,99709],{"class":220},[105,99993,99994],{"class":107,"line":16873},[105,99995,99714],{"class":220},[105,99997,99998],{"class":107,"line":16878},[105,99999,99719],{"class":220},[105,100001,100002],{"class":107,"line":16891},[105,100003,99724],{"class":220},[105,100005,100006],{"class":107,"line":16896},[105,100007,99729],{"class":220},[105,100009,100010],{"class":107,"line":16901},[105,100011,99734],{"class":220},[105,100013,100014],{"class":107,"line":16906},[105,100015,99739],{"class":220},[105,100017,100018],{"class":107,"line":16919},[105,100019,99744],{"class":220},[105,100021,100022],{"class":107,"line":16924},[105,100023,99749],{"class":220},[105,100025,100026],{"class":107,"line":32618},[105,100027,99754],{"class":220},[105,100029,100030],{"class":107,"line":32624},[105,100031,99759],{"class":220},[105,100033,100034],{"class":107,"line":32630},[105,100035,99764],{"class":220},[105,100037,100038],{"class":107,"line":32636},[105,100039,99769],{"class":220},[105,100041,100042],{"class":107,"line":32642},[105,100043,99774],{"class":220},[105,100045,100046],{"class":107,"line":32653},[105,100047,93913],{"class":220},[105,100049,100050,100053,100055,100057,100059],{"class":107,"line":32659},[105,100051,100052],{"class":115},"np.vsplit(aa,[",[105,100054,193],{"class":164},[105,100056,494],{"class":115},[105,100058,435],{"class":164},[105,100060,4648],{"class":115},[105,100062,100063],{"class":107,"line":32679},[105,100064,93549],{"class":174},[105,100066,100067],{"class":107,"line":32685},[105,100068,93913],{"class":220},[105,100070,100071],{"class":107,"line":32696},[105,100072,99569],{"class":220},[105,100074,100075],{"class":107,"line":32702},[105,100076,99574],{"class":220},[105,100078,100079],{"class":107,"line":32708},[105,100080,99579],{"class":220},[105,100082,100083],{"class":107,"line":32714},[105,100084,99641],{"class":220},[105,100086,100087],{"class":107,"line":32720},[105,100088,99646],{"class":220},[105,100090,100091],{"class":107,"line":32726},[105,100092,99651],{"class":220},[105,100094,100095],{"class":107,"line":32732},[105,100096,99599],{"class":220},[5118,100098,100099],{},"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":28,"depth":28,"links":100101},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99367,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100108,"title":100109,"body":100110,"description":23369,"extension":30,"meta":100604,"navigation":32,"path":100605,"seo":100606,"stem":100607,"__hash__":100608},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100111,"toc":100595},[100112,100115,100118,100143,100147,100206,100258,100262,100264,100300,100354,100356,100394,100465,100469,100474,100478,100481,100514,100517,100521,100524,100527,100530,100533,100538,100542,100545,100548,100551,100554,100559,100563,100568,100571,100592],[10,100113,100109],{"id":100114},"_9数学函数",[14,100116,100117],{},"补充回顾：python的列表推导式",[96,100119,100121],{"className":30363,"code":100120,"language":30365,"meta":22,"style":22},"[1\u002Fi for i in a]\n",[102,100122,100123],{"__ignoreMap":22},[105,100124,100125,100127,100129,100131,100134,100136,100138,100140],{"class":107,"line":108},[105,100126,1006],{"class":115},[105,100128,333],{"class":164},[105,100130,700],{"class":111},[105,100132,100133],{"class":115},"i ",[105,100135,3016],{"class":111},[105,100137,9430],{"class":115},[105,100139,26028],{"class":111},[105,100141,100142],{"class":115}," a]\n",[47,100144,100146],{"id":100145},"_91-求倒数","9.1 求倒数",[96,100148,100150],{"className":30363,"code":100149,"language":30365,"meta":22,"style":22},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[102,100151,100152,100157,100185,100197],{"__ignoreMap":22},[105,100153,100154],{"class":107,"line":108},[105,100155,100156],{"class":174},"#数组求倒数\n",[105,100158,100159,100161,100163,100165,100167,100169,100171,100173,100175,100177,100179,100181,100183],{"class":107,"line":28},[105,100160,354],{"class":115},[105,100162,161],{"class":111},[105,100164,1006],{"class":115},[105,100166,333],{"class":164},[105,100168,494],{"class":115},[105,100170,193],{"class":164},[105,100172,494],{"class":115},[105,100174,187],{"class":164},[105,100176,494],{"class":115},[105,100178,409],{"class":164},[105,100180,494],{"class":115},[105,100182,435],{"class":164},[105,100184,33231],{"class":115},[105,100186,100187,100189,100191,100194],{"class":107,"line":1171},[105,100188,379],{"class":115},[105,100190,161],{"class":111},[105,100192,100193],{"class":115},"np.array(a)",[105,100195,100196],{"class":174},"#将列表转换为数组\n",[105,100198,100199,100201,100203],{"class":107,"line":1186},[105,100200,333],{"class":164},[105,100202,700],{"class":111},[105,100204,100205],{"class":115},"b\n",[96,100207,100209],{"className":30363,"code":100208,"language":30365,"meta":22,"style":22},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[102,100210,100211,100239,100248,100253],{"__ignoreMap":22},[105,100212,100213,100215,100217,100219,100221,100223,100225,100227,100229,100231,100233,100235,100237],{"class":107,"line":108},[105,100214,354],{"class":115},[105,100216,161],{"class":111},[105,100218,1006],{"class":115},[105,100220,333],{"class":164},[105,100222,494],{"class":115},[105,100224,193],{"class":164},[105,100226,494],{"class":115},[105,100228,187],{"class":164},[105,100230,494],{"class":115},[105,100232,409],{"class":164},[105,100234,494],{"class":115},[105,100236,435],{"class":164},[105,100238,33231],{"class":115},[105,100240,100241,100243,100245],{"class":107,"line":28},[105,100242,379],{"class":115},[105,100244,161],{"class":111},[105,100246,100247],{"class":115},"np.array(a)\n",[105,100249,100250],{"class":107,"line":1171},[105,100251,100252],{"class":174},"#调用numpy中的函数reciprocal()\n",[105,100254,100255],{"class":107,"line":1186},[105,100256,100257],{"class":115},"np.reciprocal(b)\n",[47,100259,100261],{"id":100260},"_92-求平方","9.2 求平方",[14,100263,94515],{},[96,100265,100267],{"className":30363,"code":100266,"language":30365,"meta":22,"style":22},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[102,100268,100269,100274,100279,100295],{"__ignoreMap":22},[105,100270,100271],{"class":107,"line":108},[105,100272,100273],{"class":174},"#square()，求平方\n",[105,100275,100276],{"class":107,"line":28},[105,100277,100278],{"class":174},"#一维数组\n",[105,100280,100281,100283,100285,100287,100289,100291,100293],{"class":107,"line":1171},[105,100282,354],{"class":115},[105,100284,161],{"class":111},[105,100286,92987],{"class":115},[105,100288,333],{"class":164},[105,100290,494],{"class":115},[105,100292,562],{"class":164},[105,100294,122],{"class":115},[105,100296,100297],{"class":107,"line":1186},[105,100298,100299],{"class":115},"np.square(a)\n",[96,100301,100303],{"className":30363,"code":100302,"language":30365,"meta":22,"style":22},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[102,100304,100305,100310,100315,100336],{"__ignoreMap":22},[105,100306,100307],{"class":107,"line":108},[105,100308,100309],{"class":174},"#或者通过循环遍历的形式来计算\n",[105,100311,100312],{"class":107,"line":28},[105,100313,100314],{"class":174},"#这是一个列表\n",[105,100316,100317,100320,100322,100324,100326,100328,100330,100333],{"class":107,"line":1171},[105,100318,100319],{"class":115},"[i",[105,100321,571],{"class":111},[105,100323,100133],{"class":115},[105,100325,3016],{"class":111},[105,100327,9430],{"class":115},[105,100329,26028],{"class":111},[105,100331,100332],{"class":115}," a]",[105,100334,100335],{"class":174},"#这个求完之后在数列当中\n",[105,100337,100338,100341,100343,100345,100347,100349,100351],{"class":107,"line":1186},[105,100339,100340],{"class":115},"np.array([i",[105,100342,571],{"class":111},[105,100344,100133],{"class":115},[105,100346,3016],{"class":111},[105,100348,9430],{"class":115},[105,100350,26028],{"class":111},[105,100352,100353],{"class":115}," a])\n",[14,100355,93276],{},[96,100357,100359],{"className":30363,"code":100358,"language":30365,"meta":22,"style":22},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[102,100360,100361,100365,100389],{"__ignoreMap":22},[105,100362,100363],{"class":107,"line":108},[105,100364,93286],{"class":174},[105,100366,100367,100369,100371,100373,100375,100377,100379,100381,100383,100385,100387],{"class":107,"line":28},[105,100368,93291],{"class":115},[105,100370,161],{"class":111},[105,100372,92987],{"class":115},[105,100374,333],{"class":164},[105,100376,494],{"class":115},[105,100378,639],{"class":164},[105,100380,92992],{"class":115},[105,100382,409],{"class":164},[105,100384,494],{"class":115},[105,100386,187],{"class":164},[105,100388,122],{"class":115},[105,100390,100391],{"class":107,"line":1171},[105,100392,100393],{"class":115},"np.square(aa)\n",[96,100395,100397],{"className":30363,"code":100396,"language":30365,"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",[102,100398,100399,100404,100413,100429,100445,100460],{"__ignoreMap":22},[105,100400,100401],{"class":107,"line":108},[105,100402,100403],{"class":174},"#传统的方式\n",[105,100405,100406,100408,100410],{"class":107,"line":28},[105,100407,98172],{"class":115},[105,100409,161],{"class":111},[105,100411,100412],{"class":115},"np.empty_like(aa)\n",[105,100414,100415,100417,100419,100421,100423,100425,100427],{"class":107,"line":1171},[105,100416,3016],{"class":111},[105,100418,9430],{"class":115},[105,100420,26028],{"class":111},[105,100422,32428],{"class":164},[105,100424,116],{"class":115},[105,100426,409],{"class":164},[105,100428,30771],{"class":115},[105,100430,100431,100433,100435,100437,100439,100441,100443],{"class":107,"line":1186},[105,100432,3192],{"class":111},[105,100434,9492],{"class":115},[105,100436,26028],{"class":111},[105,100438,32428],{"class":164},[105,100440,116],{"class":115},[105,100442,187],{"class":164},[105,100444,30771],{"class":115},[105,100446,100447,100450,100452,100455,100457],{"class":107,"line":1192},[105,100448,100449],{"class":115},"        bb[i,j]",[105,100451,161],{"class":111},[105,100453,100454],{"class":115},"aa[i,j]",[105,100456,571],{"class":111},[105,100458,100459],{"class":115},"aa[i,j]\n",[105,100461,100462],{"class":107,"line":1206},[105,100463,100464],{"class":115},"bb\n",[47,100466,100468],{"id":100467},"_93-求各元素的符号","9.3 求各元素的符号",[14,100470,100471],{},[20,100472],{"alt":22,"src":100473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[47,100475,100477],{"id":100476},"_94-modf函数","9.4 modf函数",[14,100479,100480],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[96,100482,100484],{"className":30363,"code":100483,"language":30365,"meta":22,"style":22},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[102,100485,100486,100509],{"__ignoreMap":22},[105,100487,100488,100490,100492,100494,100496,100498,100500,100502,100504,100507],{"class":107,"line":108},[105,100489,354],{"class":115},[105,100491,161],{"class":111},[105,100493,92987],{"class":115},[105,100495,648],{"class":111},[105,100497,562],{"class":164},[105,100499,494],{"class":115},[105,100501,562],{"class":164},[105,100503,494],{"class":115},[105,100505,100506],{"class":164},"0.3",[105,100508,122],{"class":115},[105,100510,100511],{"class":107,"line":28},[105,100512,100513],{"class":115},"np.modf(a)\n",[14,100515,100516],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[47,100518,100520],{"id":100519},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100522,100523],{},"np.cell()",[14,100525,100526],{},"np.floor()",[14,100528,100529],{},"np.rint()",[14,100531,100532],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100534,100535],{},[20,100536],{"alt":22,"src":100537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[47,100539,100541],{"id":100540},"_96-around函数","9.6 around()函数",[14,100543,100544],{},"around()函数也可以实现对数的小数位数进行操作",[14,100546,100547],{},"其中的参数：",[14,100549,100550],{},"1.要传的数组",[14,100552,100553],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100555,100556],{},[20,100557],{"alt":22,"src":100558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[47,100560,100562],{"id":100561},"_97-三角函数","9.7 三角函数",[14,100564,100565],{},[20,100566],{"alt":22,"src":100567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100569,100570],{},"引入图像模块非常重要",[96,100572,100574],{"className":30363,"code":100573,"language":30365,"meta":22,"style":22},"from matplotlib import pyplot as plt\n",[102,100575,100576],{"__ignoreMap":22},[105,100577,100578,100580,100583,100585,100588,100590],{"class":107,"line":108},[105,100579,30722],{"class":111},[105,100581,100582],{"class":115}," matplotlib ",[105,100584,30377],{"class":111},[105,100586,100587],{"class":115}," pyplot ",[105,100589,31368],{"class":111},[105,100591,31422],{"class":115},[5118,100593,100594],{},"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":28,"depth":28,"links":100596},[100597,100598,100599,100600,100601,100602,100603],{"id":100145,"depth":28,"text":100146},{"id":100260,"depth":28,"text":100261},{"id":100467,"depth":28,"text":100468},{"id":100476,"depth":28,"text":100477},{"id":100519,"depth":28,"text":100520},{"id":100540,"depth":28,"text":100541},{"id":100561,"depth":28,"text":100562},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100109,"description":23369},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100610,"title":100611,"body":100612,"description":23369,"extension":30,"meta":100616,"navigation":32,"path":100617,"seo":100618,"stem":100619,"__hash__":100620},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100613,"toc":100614},[],{"title":22,"searchDepth":28,"depth":28,"links":100615},[],{"category":50405},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100611,"description":23369},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100622,"title":100623,"body":100624,"description":22,"extension":30,"meta":102632,"navigation":32,"path":102633,"seo":102634,"stem":102635,"__hash__":102636},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100625,"toc":102608},[100626,100629,100633,100636,100639,100645,100648,100671,100674,100708,100711,100752,100756,100759,100852,100855,100899,100902,100919,100922,100936,100939,100942,100987,100990,101027,101031,101034,101040,101045,101065,101069,101072,101138,101141,101159,101163,101166,101195,101205,101211,101215,101218,101224,101235,101239,101242,101272,101275,101555,101558,101561,101572,101575,101578,101600,101607,101610,101628,101631,101634,101648,101656,101659,101685,101691,101694,101697,101707,101719,101739,101748,101768,101778,101802,101815,101829,101834,101875,101892,101917,101929,101949,101955,102000,102019,102036,102049,102065,102072,102084,102093,102128,102149,102174,102187,102211,102226,102251,102254,102275,102284,102287,102298,102302,102305,102311,102323,102330,102334,102337,102349,102352,102366,102369,102379,102389,102392,102432,102435,102439,102445,102448,102462,102466,102469,102502,102506,102509,102532,102540,102543,102549,102555,102558,102561,102589,102593,102596,102602,102605],[10,100627,100623],{"id":100628},"_1环境安装与第一个-mujoco-程序",[47,100630,100632],{"id":100631},"_1目标说明","1.目标说明",[14,100634,100635],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100637,100638],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[96,100640,100643],{"className":100641,"code":100642,"language":5179,"meta":22},[5177],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[102,100644,100642],{"__ignoreMap":22},[14,100646,100647],{},"需要掌握:",[59,100649,100650,100653,100656,100661,100666],{},[62,100651,100652],{},"Fedora 44 下 MuJoCo 的系统依赖",[62,100654,100655],{},"Python 虚拟环境创建",[62,100657,100658],{},[102,100659,100660],{},"mujoco.MjModel",[62,100662,100663],{},[102,100664,100665],{},"mujoco.MjData",[62,100667,100668],{},[102,100669,100670],{},"mujoco.mj_step(model, data)",[14,100672,100673],{},"MuJoCo 中最重要的两个对象:",[253,100675,100676,100686],{},[256,100677,100678],{},[259,100679,100680,100683],{},[262,100681,100682],{"align":23729},"对象",[262,100684,100685],{"align":23729},"含义",[300,100687,100688,100698],{},[259,100689,100690,100695],{},[305,100691,100692],{"align":23729},[102,100693,100694],{},"MjModel",[305,100696,100697],{"align":23729},"模型结构，来自 XML，基本不随时间变化",[259,100699,100700,100705],{},[305,100701,100702],{"align":23729},[102,100703,100704],{},"MjData",[305,100706,100707],{"align":23729},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100709,100710],{},"可以先用一个类比理解：",[253,100712,100713,100723],{},[256,100714,100715],{},[259,100716,100717,100720],{},[262,100718,100719],{"align":23729},"类比",[262,100721,100722],{"align":23729},"MuJoCo 对象",[300,100724,100725,100734,100743],{},[259,100726,100727,100730],{},[305,100728,100729],{"align":23729},"游戏地图和角色配置",[305,100731,100732],{"align":23729},[102,100733,100694],{},[259,100735,100736,100739],{},[305,100737,100738],{"align":23729},"游戏运行到当前帧的状态",[305,100740,100741],{"align":23729},[102,100742,100704],{},[259,100744,100745,100748],{},[305,100746,100747],{"align":23729},"前进一帧",[305,100749,100750],{"align":23729},[102,100751,100670],{},[47,100753,100755],{"id":100754},"_2环境与依赖安装","2.环境与依赖安装",[14,100757,100758],{},"Fedora 44 系统依赖:",[96,100760,100762],{"className":23815,"code":100761,"language":23817,"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",[102,100763,100764,100776,100789,100802,100812,100822,100841],{"__ignoreMap":22},[105,100765,100766,100768,100770,100772,100774],{"class":107,"line":108},[105,100767,24561],{"class":1954},[105,100769,26300],{"class":220},[105,100771,23827],{"class":220},[105,100773,26385],{"class":164},[105,100775,24663],{"class":164},[105,100777,100778,100781,100784,100787],{"class":107,"line":28},[105,100779,100780],{"class":220},"  python3",[105,100782,100783],{"class":220}," python3-pip",[105,100785,100786],{"class":220}," python3-virtualenv",[105,100788,24663],{"class":164},[105,100790,100791,100794,100797,100800],{"class":107,"line":1171},[105,100792,100793],{"class":220},"  mesa-libGL",[105,100795,100796],{"class":220}," mesa-libGLU",[105,100798,100799],{"class":220}," mesa-dri-drivers",[105,100801,24663],{"class":164},[105,100803,100804,100807,100810],{"class":107,"line":1186},[105,100805,100806],{"class":220},"  libglvnd-glx",[105,100808,100809],{"class":220}," libglvnd-opengl",[105,100811,24663],{"class":164},[105,100813,100814,100817,100820],{"class":107,"line":1192},[105,100815,100816],{"class":220},"  glfw",[105,100818,100819],{"class":220}," glfw-devel",[105,100821,24663],{"class":164},[105,100823,100824,100827,100830,100833,100836,100839],{"class":107,"line":1206},[105,100825,100826],{"class":220},"  libX11",[105,100828,100829],{"class":220}," libXcursor",[105,100831,100832],{"class":220}," libXi",[105,100834,100835],{"class":220}," libXinerama",[105,100837,100838],{"class":220}," libXrandr",[105,100840,24663],{"class":164},[105,100842,100843,100846,100849],{"class":107,"line":1212},[105,100844,100845],{"class":220},"  gcc",[105,100847,100848],{"class":220}," gcc-c++",[105,100850,100851],{"class":220}," make\n",[14,100853,100854],{},"创建 Python 环境:",[96,100856,100858],{"className":23815,"code":100857,"language":23817,"meta":22,"style":22},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[102,100859,100860,100874,100882],{"__ignoreMap":22},[105,100861,100862,100865,100868,100871],{"class":107,"line":108},[105,100863,100864],{"class":1954},"python3",[105,100866,100867],{"class":164}," -m",[105,100869,100870],{"class":220}," venv",[105,100872,100873],{"class":220}," .venv\n",[105,100875,100876,100879],{"class":107,"line":28},[105,100877,100878],{"class":164},"source",[105,100880,100881],{"class":220}," .venv\u002Fbin\u002Factivate\n",[105,100883,100884,100886,100888,100891,100893,100896],{"class":107,"line":1171},[105,100885,30365],{"class":1954},[105,100887,100867],{"class":164},[105,100889,100890],{"class":220}," pip",[105,100892,23827],{"class":220},[105,100894,100895],{"class":164}," --upgrade",[105,100897,100898],{"class":220}," pip\n",[14,100900,100901],{},"pip 安装:",[96,100903,100905],{"className":23815,"code":100904,"language":23817,"meta":22,"style":22},"pip install \"mujoco>=2.3\" numpy\n",[102,100906,100907],{"__ignoreMap":22},[105,100908,100909,100911,100913,100916],{"class":107,"line":108},[105,100910,23824],{"class":1954},[105,100912,23827],{"class":220},[105,100914,100915],{"class":220}," \"mujoco>=2.3\"",[105,100917,100918],{"class":220}," numpy\n",[14,100920,100921],{},"安装完成后，先做最小检查：",[96,100923,100925],{"className":23815,"code":100924,"language":23817,"meta":22,"style":22},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[102,100926,100927],{"__ignoreMap":22},[105,100928,100929,100931,100933],{"class":107,"line":108},[105,100930,30365],{"class":1954},[105,100932,30343],{"class":164},[105,100934,100935],{"class":220}," \"import mujoco; print(mujoco.__version__)\"\n",[14,100937,100938],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,100940,100941],{},"conda 安装:",[96,100943,100945],{"className":23815,"code":100944,"language":23817,"meta":22,"style":22},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[102,100946,100947,100967,100977],{"__ignoreMap":22},[105,100948,100949,100951,100953,100955,100958,100961,100964],{"class":107,"line":108},[105,100950,30315],{"class":1954},[105,100952,29161],{"class":220},[105,100954,25100],{"class":164},[105,100956,100957],{"class":220}," mujoco-study",[105,100959,100960],{"class":220}," python=",[105,100962,100963],{"class":164},"3.10",[105,100965,100966],{"class":164}," -y\n",[105,100968,100969,100971,100974],{"class":107,"line":28},[105,100970,30315],{"class":1954},[105,100972,100973],{"class":220}," activate",[105,100975,100976],{"class":220}," mujoco-study\n",[105,100978,100979,100981,100983,100985],{"class":107,"line":1171},[105,100980,23824],{"class":1954},[105,100982,23827],{"class":220},[105,100984,100915],{"class":220},[105,100986,100918],{"class":220},[14,100988,100989],{},"版本冲突说明:",[59,100991,100992,100998,101008,101017],{},[62,100993,100994,100995,28370],{},"不要安装 ",[102,100996,100997],{},"mujoco-py",[62,100999,101000,101001,101003,101004,101007],{},"如果旧项目里同时安装了 ",[102,101002,100997],{}," 和 ",[102,101005,101006],{},"mujoco","，建议新建干净虚拟环境。",[62,101009,101010,101013,101014,28370],{},[102,101011,101012],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[102,101015,101016],{},"~\u002F.mujoco\u002Fmujoco210",[62,101018,101019,101020,82524,101023,101026],{},"离屏渲染可能涉及 OpenGL 后端，",[102,101021,101022],{},"MUJOCO_GL=egl",[102,101024,101025],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[47,101028,101030],{"id":101029},"_3核心概念解释","3.核心概念解释",[14,101032,101033],{},"MuJoCo 的基本执行流程:",[96,101035,101038],{"className":101036,"code":101037,"language":5179,"meta":22},[5177],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[102,101039,101037],{"__ignoreMap":22},[14,101041,101042,101044],{},[102,101043,100694],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101046,101047,101049,101050,328,101053,328,101056,328,101059,328,101062,28370],{},[102,101048,100704],{}," 存放仿真运行时状态，例如 ",[102,101051,101052],{},"data.time",[102,101054,101055],{},"data.qpos",[102,101057,101058],{},"data.qvel",[102,101060,101061],{},"data.ctrl",[102,101063,101064],{},"data.xpos",[76,101066,101068],{"id":101067},"xml-是什么","XML 是什么",[14,101070,101071],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[96,101073,101075],{"className":53052,"code":101074,"language":53054,"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",[102,101076,101077,101099,101130],{"__ignoreMap":22},[105,101078,101079,101081,101083,101085,101087,101089,101092,101094,101097],{"class":107,"line":108},[105,101080,1026],{"class":115},[105,101082,51785],{"class":51285},[105,101084,14912],{"class":1954},[105,101086,161],{"class":115},[105,101088,53476],{"class":220},[105,101090,101091],{"class":1954}," pos",[105,101093,161],{"class":115},[105,101095,101096],{"class":220},"\"0 0 1\"",[105,101098,51292],{"class":115},[105,101100,101101,101103,101106,101108,101110,101113,101115,101117,101119,101122,101124,101127],{"class":107,"line":28},[105,101102,52129],{"class":115},[105,101104,101105],{"class":51285},"geom",[105,101107,14912],{"class":1954},[105,101109,161],{"class":115},[105,101111,101112],{"class":220},"\"box_geom\"",[105,101114,53809],{"class":1954},[105,101116,161],{"class":115},[105,101118,53476],{"class":220},[105,101120,101121],{"class":1954}," size",[105,101123,161],{"class":115},[105,101125,101126],{"class":220},"\"0.1 0.1 0.1\"",[105,101128,101129],{"class":115},"\u002F>\n",[105,101131,101132,101134,101136],{"class":107,"line":1171},[105,101133,51770],{"class":115},[105,101135,51785],{"class":51285},[105,101137,51292],{"class":115},[14,101139,101140],{},"这段意思是：",[59,101142,101143,101149,101156],{},[62,101144,101145,101146,101148],{},"创建一个叫 ",[102,101147,53699],{}," 的刚体。",[62,101150,101151,101152,101155],{},"它初始放在 ",[102,101153,101154],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[62,101157,101158],{},"它里面有一个盒子形状的几何体。",[76,101160,101162],{"id":101161},"timestep-是什么","timestep 是什么",[14,101164,101165],{},"XML 里的：",[96,101167,101169],{"className":53052,"code":101168,"language":53054,"meta":22,"style":22},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[102,101170,101171],{"__ignoreMap":22},[105,101172,101173,101175,101177,101180,101182,101185,101188,101190,101193],{"class":107,"line":108},[105,101174,1026],{"class":115},[105,101176,69151],{"class":51285},[105,101178,101179],{"class":1954}," timestep",[105,101181,161],{"class":115},[105,101183,101184],{"class":220},"\"0.01\"",[105,101186,101187],{"class":1954}," gravity",[105,101189,161],{"class":115},[105,101191,101192],{"class":220},"\"0 0 -9.81\"",[105,101194,101129],{"class":115},[14,101196,101197,101198,101201,101202,101204],{},"表示每调用一次 ",[102,101199,101200],{},"mj_step","，仿真时间前进 ",[102,101203,38971],{}," 秒。循环 100 次，大约就是 1 秒：",[96,101206,101209],{"className":101207,"code":101208,"language":5179,"meta":22},[5177],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[102,101210,101208],{"__ignoreMap":22},[76,101212,101214],{"id":101213},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101216,101217],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[96,101219,101222],{"className":101220,"code":101221,"language":5179,"meta":22},[5177],"x y z qw qx qy qz\n",[102,101223,101221],{"__ignoreMap":22},[14,101225,101226,101227,101230,101231,101234],{},"表示一个自由刚体的位置和姿态。其中 ",[102,101228,101229],{},"x y z"," 是位置，",[102,101232,101233],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[47,101236,101238],{"id":101237},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101240,101241],{},"新建文件:",[96,101243,101245],{"className":23815,"code":101244,"language":23817,"meta":22,"style":22},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[102,101246,101247,101257,101264],{"__ignoreMap":22},[105,101248,101249,101252,101254],{"class":107,"line":108},[105,101250,101251],{"class":1954},"mkdir",[105,101253,29201],{"class":164},[105,101255,101256],{"class":220}," mujoco_tutorial\n",[105,101258,101259,101262],{"class":107,"line":28},[105,101260,101261],{"class":164},"cd",[105,101263,101256],{"class":220},[105,101265,101266,101269],{"class":107,"line":1171},[105,101267,101268],{"class":1954},"touch",[105,101270,101271],{"class":220}," ch1_first_sim.py\n",[14,101273,101274],{},"写入:",[96,101276,101278],{"className":30363,"code":101277,"language":30365,"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",[102,101279,101280,101287,101291,101295,101305,101310,101315,101319,101324,101329,101333,101338,101343,101348,101353,101358,101363,101367,101371,101375,101388,101402,101412,101416,101428,101440,101452,101464,101476,101480,101497,101502,101506,101517,101528,101532,101536,101550],{"__ignoreMap":22},[105,101281,101282,101284],{"class":107,"line":108},[105,101283,30377],{"class":111},[105,101285,101286],{"class":115}," mujoco\n",[105,101288,101289],{"class":107,"line":28},[105,101290,2391],{"emptyLinePlaceholder":32},[105,101292,101293],{"class":107,"line":1171},[105,101294,2391],{"emptyLinePlaceholder":32},[105,101296,101297,101300,101302],{"class":107,"line":1186},[105,101298,101299],{"class":164},"XML",[105,101301,13556],{"class":111},[105,101303,101304],{"class":220}," \"\"\"\n",[105,101306,101307],{"class":107,"line":1192},[105,101308,101309],{"class":220},"\u003Cmujoco model=\"first_sim\">\n",[105,101311,101312],{"class":107,"line":1206},[105,101313,101314],{"class":220},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[105,101316,101317],{"class":107,"line":1212},[105,101318,2391],{"emptyLinePlaceholder":32},[105,101320,101321],{"class":107,"line":1303},[105,101322,101323],{"class":220},"  \u003Cworldbody>\n",[105,101325,101326],{"class":107,"line":1309},[105,101327,101328],{"class":220},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[105,101330,101331],{"class":107,"line":1321},[105,101332,2391],{"emptyLinePlaceholder":32},[105,101334,101335],{"class":107,"line":1603},[105,101336,101337],{"class":220},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[105,101339,101340],{"class":107,"line":1608},[105,101341,101342],{"class":220},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[105,101344,101345],{"class":107,"line":1614},[105,101346,101347],{"class":220},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[105,101349,101350],{"class":107,"line":1619},[105,101351,101352],{"class":220},"    \u003C\u002Fbody>\n",[105,101354,101355],{"class":107,"line":1633},[105,101356,101357],{"class":220},"  \u003C\u002Fworldbody>\n",[105,101359,101360],{"class":107,"line":1638},[105,101361,101362],{"class":220},"\u003C\u002Fmujoco>\n",[105,101364,101365],{"class":107,"line":1644},[105,101366,95683],{"class":220},[105,101368,101369],{"class":107,"line":1665},[105,101370,2391],{"emptyLinePlaceholder":32},[105,101372,101373],{"class":107,"line":1670},[105,101374,2391],{"emptyLinePlaceholder":32},[105,101376,101377,101379,101381,101384,101386],{"class":107,"line":1684},[105,101378,31932],{"class":111},[105,101380,1964],{"class":1954},[105,101382,101383],{"class":115},"() -> ",[105,101385,95671],{"class":164},[105,101387,3730],{"class":115},[105,101389,101390,101393,101395,101398,101400],{"class":107,"line":1689},[105,101391,101392],{"class":115},"    model ",[105,101394,161],{"class":111},[105,101396,101397],{"class":115}," mujoco.MjModel.from_xml_string(",[105,101399,101299],{"class":164},[105,101401,122],{"class":115},[105,101403,101404,101407,101409],{"class":107,"line":1718},[105,101405,101406],{"class":115},"    data ",[105,101408,161],{"class":111},[105,101410,101411],{"class":115}," mujoco.MjData(model)\n",[105,101413,101414],{"class":107,"line":1723},[105,101415,2391],{"emptyLinePlaceholder":32},[105,101417,101418,101420,101422,101425],{"class":107,"line":1740},[105,101419,31284],{"class":164},[105,101421,116],{"class":115},[105,101423,101424],{"class":220},"\"nq:\"",[105,101426,101427],{"class":115},", model.nq)\n",[105,101429,101430,101432,101434,101437],{"class":107,"line":1745},[105,101431,31284],{"class":164},[105,101433,116],{"class":115},[105,101435,101436],{"class":220},"\"nv:\"",[105,101438,101439],{"class":115},", model.nv)\n",[105,101441,101442,101444,101446,101449],{"class":107,"line":1750},[105,101443,31284],{"class":164},[105,101445,116],{"class":115},[105,101447,101448],{"class":220},"\"nu:\"",[105,101450,101451],{"class":115},", model.nu)\n",[105,101453,101454,101456,101458,101461],{"class":107,"line":1755},[105,101455,31284],{"class":164},[105,101457,116],{"class":115},[105,101459,101460],{"class":220},"\"initial time:\"",[105,101462,101463],{"class":115},", data.time)\n",[105,101465,101466,101468,101470,101473],{"class":107,"line":1769},[105,101467,31284],{"class":164},[105,101469,116],{"class":115},[105,101471,101472],{"class":220},"\"initial qpos:\"",[105,101474,101475],{"class":115},", data.qpos.copy())\n",[105,101477,101478],{"class":107,"line":1774},[105,101479,2391],{"emptyLinePlaceholder":32},[105,101481,101482,101484,101487,101489,101491,101493,101495],{"class":107,"line":2568},[105,101483,3192],{"class":111},[105,101485,101486],{"class":115}," _ ",[105,101488,26028],{"class":111},[105,101490,32428],{"class":164},[105,101492,116],{"class":115},[105,101494,427],{"class":164},[105,101496,30771],{"class":115},[105,101498,101499],{"class":107,"line":2582},[105,101500,101501],{"class":115},"        mujoco.mj_step(model, data)\n",[105,101503,101504],{"class":107,"line":2590},[105,101505,2391],{"emptyLinePlaceholder":32},[105,101507,101508,101510,101512,101515],{"class":107,"line":2595},[105,101509,31284],{"class":164},[105,101511,116],{"class":115},[105,101513,101514],{"class":220},"\"final time:\"",[105,101516,101463],{"class":115},[105,101518,101519,101521,101523,101526],{"class":107,"line":2601},[105,101520,31284],{"class":164},[105,101522,116],{"class":115},[105,101524,101525],{"class":220},"\"final qpos:\"",[105,101527,101475],{"class":115},[105,101529,101530],{"class":107,"line":2607},[105,101531,2391],{"emptyLinePlaceholder":32},[105,101533,101534],{"class":107,"line":2612},[105,101535,2391],{"emptyLinePlaceholder":32},[105,101537,101538,101540,101542,101545,101548],{"class":107,"line":7940},[105,101539,1522],{"class":111},[105,101541,31205],{"class":164},[105,101543,101544],{"class":111}," ==",[105,101546,101547],{"class":220}," \"__main__\"",[105,101549,3730],{"class":115},[105,101551,101552],{"class":107,"line":7964},[105,101553,101554],{"class":115},"    main()\n",[76,101556,101557],{"id":101557},"代码逐段解释",[14,101559,101560],{},"导入库：",[96,101562,101564],{"className":30363,"code":101563,"language":30365,"meta":22,"style":22},"import mujoco\n",[102,101565,101566],{"__ignoreMap":22},[105,101567,101568,101570],{"class":107,"line":108},[105,101569,30377],{"class":111},[105,101571,101286],{"class":115},[14,101573,101574],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101576,101577],{},"定义 XML：",[96,101579,101581],{"className":30363,"code":101580,"language":30365,"meta":22,"style":22},"XML = \"\"\"\n...\n\"\"\"\n",[102,101582,101583,101591,101596],{"__ignoreMap":22},[105,101584,101585,101587,101589],{"class":107,"line":108},[105,101586,101299],{"class":164},[105,101588,13556],{"class":111},[105,101590,101304],{"class":220},[105,101592,101593],{"class":107,"line":28},[105,101594,101595],{"class":220},"...\n",[105,101597,101598],{"class":107,"line":1171},[105,101599,95683],{"class":220},[14,101601,101602,101603,101606],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[102,101604,101605],{},"freejoint"," 的方块。",[14,101608,101609],{},"编译模型：",[96,101611,101613],{"className":30363,"code":101612,"language":30365,"meta":22,"style":22},"model = mujoco.MjModel.from_xml_string(XML)\n",[102,101614,101615],{"__ignoreMap":22},[105,101616,101617,101620,101622,101624,101626],{"class":107,"line":108},[105,101618,101619],{"class":115},"model ",[105,101621,161],{"class":111},[105,101623,101397],{"class":115},[105,101625,101299],{"class":164},[105,101627,122],{"class":115},[14,101629,101630],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101632,101633],{},"创建数据：",[96,101635,101637],{"className":30363,"code":101636,"language":30365,"meta":22,"style":22},"data = mujoco.MjData(model)\n",[102,101638,101639],{"__ignoreMap":22},[105,101640,101641,101644,101646],{"class":107,"line":108},[105,101642,101643],{"class":115},"data ",[105,101645,161],{"class":111},[105,101647,101411],{"class":115},[14,101649,101650,101652,101653,101655],{},[102,101651,33386],{}," 会保存仿真当前状态。刚创建时，时间是 ",[102,101654,307],{},"，方块还在初始位置。",[14,101657,101658],{},"推进仿真：",[96,101660,101662],{"className":30363,"code":101661,"language":30365,"meta":22,"style":22},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[102,101663,101664,101680],{"__ignoreMap":22},[105,101665,101666,101668,101670,101672,101674,101676,101678],{"class":107,"line":108},[105,101667,3016],{"class":111},[105,101669,101486],{"class":115},[105,101671,26028],{"class":111},[105,101673,32428],{"class":164},[105,101675,116],{"class":115},[105,101677,427],{"class":164},[105,101679,30771],{"class":115},[105,101681,101682],{"class":107,"line":28},[105,101683,101684],{"class":115},"    mujoco.mj_step(model, data)\n",[14,101686,101687,101688,101690],{},"每次 ",[102,101689,101200],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[76,101692,101693],{"id":101693},"代码逐行细讲",[14,101695,101696],{},"下面把完整代码按新手视角拆开讲。",[96,101698,101699],{"className":30363,"code":101563,"language":30365,"meta":22,"style":22},[102,101700,101701],{"__ignoreMap":22},[105,101702,101703,101705],{"class":107,"line":108},[105,101704,30377],{"class":111},[105,101706,101286],{"class":115},[14,101708,101709,101711,101712,328,101714,328,101716,28370],{},[102,101710,30377],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[102,101713,100660],{},[102,101715,100665],{},[102,101717,101718],{},"mujoco.mj_step",[96,101720,101721],{"className":30363,"code":101580,"language":30365,"meta":22,"style":22},[102,101722,101723,101731,101735],{"__ignoreMap":22},[105,101724,101725,101727,101729],{"class":107,"line":108},[105,101726,101299],{"class":164},[105,101728,13556],{"class":111},[105,101730,101304],{"class":220},[105,101732,101733],{"class":107,"line":28},[105,101734,101595],{"class":220},[105,101736,101737],{"class":107,"line":1171},[105,101738,95683],{"class":220},[14,101740,101741,101743,101744,101747],{},[102,101742,101299],{}," 是一个变量名。右边的三引号 ",[102,101745,101746],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[96,101749,101750],{"className":53052,"code":101309,"language":53054,"meta":22,"style":22},[102,101751,101752],{"__ignoreMap":22},[105,101753,101754,101756,101758,101761,101763,101766],{"class":107,"line":108},[105,101755,1026],{"class":115},[105,101757,101006],{"class":51285},[105,101759,101760],{"class":1954}," model",[105,101762,161],{"class":115},[105,101764,101765],{"class":220},"\"first_sim\"",[105,101767,51292],{"class":115},[14,101769,101770,101771,101774,101775,28370],{},"这是 XML 的根标签。",[102,101772,101773],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[102,101776,101777],{},"first_sim",[96,101779,101780],{"className":53052,"code":101168,"language":53054,"meta":22,"style":22},[102,101781,101782],{"__ignoreMap":22},[105,101783,101784,101786,101788,101790,101792,101794,101796,101798,101800],{"class":107,"line":108},[105,101785,1026],{"class":115},[105,101787,69151],{"class":51285},[105,101789,101179],{"class":1954},[105,101791,161],{"class":115},[105,101793,101184],{"class":220},[105,101795,101187],{"class":1954},[105,101797,161],{"class":115},[105,101799,101192],{"class":220},[105,101801,101129],{"class":115},[14,101803,101804,101806,101807,101810,101811,101814],{},[102,101805,69151],{}," 用来设置仿真参数。",[102,101808,101809],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[102,101812,101813],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[96,101816,101818],{"className":53052,"code":101817,"language":53054,"meta":22,"style":22},"\u003Cworldbody>\n",[102,101819,101820],{"__ignoreMap":22},[105,101821,101822,101824,101827],{"class":107,"line":108},[105,101823,1026],{"class":115},[105,101825,101826],{"class":51285},"worldbody",[105,101828,51292],{"class":115},[14,101830,101831,101833],{},[102,101832,101826],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[96,101835,101837],{"className":53052,"code":101836,"language":53054,"meta":22,"style":22},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[102,101838,101839],{"__ignoreMap":22},[105,101840,101841,101843,101845,101847,101849,101852,101854,101856,101859,101861,101863,101866,101868,101870,101873],{"class":107,"line":108},[105,101842,1026],{"class":115},[105,101844,101105],{"class":51285},[105,101846,14912],{"class":1954},[105,101848,161],{"class":115},[105,101850,101851],{"class":220},"\"floor\"",[105,101853,53809],{"class":1954},[105,101855,161],{"class":115},[105,101857,101858],{"class":220},"\"plane\"",[105,101860,101121],{"class":1954},[105,101862,161],{"class":115},[105,101864,101865],{"class":220},"\"2 2 0.1\"",[105,101867,78752],{"class":1954},[105,101869,161],{"class":115},[105,101871,101872],{"class":220},"\"0.8 0.8 0.8 1\"",[105,101874,101129],{"class":115},[14,101876,101877,101878,101880,101881,101884,101885,101888,101889,101891],{},"这行创建地面。",[102,101879,101105],{}," 是几何体。",[102,101882,101883],{},"name=\"floor\""," 是名字。",[102,101886,101887],{},"type=\"plane\""," 表示平面。",[102,101890,55095],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[96,101893,101895],{"className":53052,"code":101894,"language":53054,"meta":22,"style":22},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[102,101896,101897],{"__ignoreMap":22},[105,101898,101899,101901,101903,101905,101907,101909,101911,101913,101915],{"class":107,"line":108},[105,101900,1026],{"class":115},[105,101902,51785],{"class":51285},[105,101904,14912],{"class":1954},[105,101906,161],{"class":115},[105,101908,53476],{"class":220},[105,101910,101091],{"class":1954},[105,101912,161],{"class":115},[105,101914,101096],{"class":220},[105,101916,51292],{"class":115},[14,101918,101919,101920,28370,101922,101925,101926,101928],{},"这行创建一个刚体，名字叫 ",[102,101921,53699],{},[102,101923,101924],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[102,101927,101154],{},"，也就是离地面 1 米高。",[96,101930,101932],{"className":53052,"code":101931,"language":53054,"meta":22,"style":22},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[102,101933,101934],{"__ignoreMap":22},[105,101935,101936,101938,101940,101942,101944,101947],{"class":107,"line":108},[105,101937,1026],{"class":115},[105,101939,101605],{"class":51285},[105,101941,14912],{"class":1954},[105,101943,161],{"class":115},[105,101945,101946],{"class":220},"\"box_free\"",[105,101948,101129],{"class":115},[14,101950,101951,101952,101954],{},"这行很重要。",[102,101953,101605],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[96,101956,101958],{"className":53052,"code":101957,"language":53054,"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",[102,101959,101960],{"__ignoreMap":22},[105,101961,101962,101964,101966,101968,101970,101972,101974,101976,101978,101980,101982,101984,101987,101989,101991,101993,101995,101998],{"class":107,"line":108},[105,101963,1026],{"class":115},[105,101965,101105],{"class":51285},[105,101967,14912],{"class":1954},[105,101969,161],{"class":115},[105,101971,101112],{"class":220},[105,101973,53809],{"class":1954},[105,101975,161],{"class":115},[105,101977,53476],{"class":220},[105,101979,101121],{"class":1954},[105,101981,161],{"class":115},[105,101983,101126],{"class":220},[105,101985,101986],{"class":1954}," mass",[105,101988,161],{"class":115},[105,101990,3669],{"class":220},[105,101992,78752],{"class":1954},[105,101994,161],{"class":115},[105,101996,101997],{"class":220},"\"1 0 0 1\"",[105,101999,101129],{"class":115},[14,102001,102002,102003,102006,102007,102010,102011,102014,102015,102018],{},"这行给 box body 添加一个盒子形状。",[102,102004,102005],{},"type=\"box\""," 表示形状是盒子。",[102,102008,102009],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[102,102012,102013],{},"mass=\"1\""," 表示质量是 1。",[102,102016,102017],{},"rgba=\"1 0 0 1\""," 表示红色。",[96,102020,102022],{"className":30363,"code":102021,"language":30365,"meta":22,"style":22},"def main() -> None:\n",[102,102023,102024],{"__ignoreMap":22},[105,102025,102026,102028,102030,102032,102034],{"class":107,"line":108},[105,102027,31932],{"class":111},[105,102029,1964],{"class":1954},[105,102031,101383],{"class":115},[105,102033,95671],{"class":164},[105,102035,3730],{"class":115},[14,102037,102038,102040,102041,102044,102045,102048],{},[102,102039,31932],{}," 用来定义函数。这里定义了一个叫 ",[102,102042,102043],{},"main"," 的函数。",[102,102046,102047],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[96,102050,102051],{"className":30363,"code":101612,"language":30365,"meta":22,"style":22},[102,102052,102053],{"__ignoreMap":22},[105,102054,102055,102057,102059,102061,102063],{"class":107,"line":108},[105,102056,101619],{"class":115},[105,102058,161],{"class":111},[105,102060,101397],{"class":115},[105,102062,101299],{"class":164},[105,102064,122],{"class":115},[14,102066,102067,102068,102071],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[102,102069,102070],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[96,102073,102074],{"className":30363,"code":101636,"language":30365,"meta":22,"style":22},[102,102075,102076],{"__ignoreMap":22},[105,102077,102078,102080,102082],{"class":107,"line":108},[105,102079,101643],{"class":115},[105,102081,161],{"class":111},[105,102083,101411],{"class":115},[14,102085,102086,102087,102089,102090,102092],{},"这行创建仿真数据。",[102,102088,33386],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[102,102091,33386],{}," 都会变化。",[96,102094,102096],{"className":30363,"code":102095,"language":30365,"meta":22,"style":22},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[102,102097,102098,102108,102118],{"__ignoreMap":22},[105,102099,102100,102102,102104,102106],{"class":107,"line":108},[105,102101,30400],{"class":164},[105,102103,116],{"class":115},[105,102105,101424],{"class":220},[105,102107,101427],{"class":115},[105,102109,102110,102112,102114,102116],{"class":107,"line":28},[105,102111,30400],{"class":164},[105,102113,116],{"class":115},[105,102115,101436],{"class":220},[105,102117,101439],{"class":115},[105,102119,102120,102122,102124,102126],{"class":107,"line":1171},[105,102121,30400],{"class":164},[105,102123,116],{"class":115},[105,102125,101448],{"class":220},[105,102127,101451],{"class":115},[14,102129,102130,102132,102133,102136,102137,102140,102141,102144,102145,102148],{},[102,102131,30400],{}," 用来输出信息。",[102,102134,102135],{},"model.nq"," 是位置变量数量，",[102,102138,102139],{},"model.nv"," 是速度变量数量，",[102,102142,102143],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[102,102146,102147],{},"nu"," 是 0。",[96,102150,102152],{"className":30363,"code":102151,"language":30365,"meta":22,"style":22},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[102,102153,102154,102164],{"__ignoreMap":22},[105,102155,102156,102158,102160,102162],{"class":107,"line":108},[105,102157,30400],{"class":164},[105,102159,116],{"class":115},[105,102161,101460],{"class":220},[105,102163,101463],{"class":115},[105,102165,102166,102168,102170,102172],{"class":107,"line":28},[105,102167,30400],{"class":164},[105,102169,116],{"class":115},[105,102171,101472],{"class":220},[105,102173,101475],{"class":115},[14,102175,102176,102177,102179,102180,102182,102183,102186],{},"这里打印初始时间和初始位置。",[102,102178,101052],{}," 一开始是 0。",[102,102181,101055],{}," 是位置数组。",[102,102184,102185],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[96,102188,102189],{"className":30363,"code":101661,"language":30365,"meta":22,"style":22},[102,102190,102191,102207],{"__ignoreMap":22},[105,102192,102193,102195,102197,102199,102201,102203,102205],{"class":107,"line":108},[105,102194,3016],{"class":111},[105,102196,101486],{"class":115},[105,102198,26028],{"class":111},[105,102200,32428],{"class":164},[105,102202,116],{"class":115},[105,102204,427],{"class":164},[105,102206,30771],{"class":115},[105,102208,102209],{"class":107,"line":28},[105,102210,101684],{"class":115},[14,102212,102213,102215,102216,102219,102220,102222,102223,102225],{},[102,102214,3016],{}," 是循环。",[102,102217,102218],{},"range(100)"," 表示循环 100 次。",[102,102221,1108],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[102,102224,101200],{},"，仿真就前进一步。",[96,102227,102229],{"className":30363,"code":102228,"language":30365,"meta":22,"style":22},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[102,102230,102231,102241],{"__ignoreMap":22},[105,102232,102233,102235,102237,102239],{"class":107,"line":108},[105,102234,30400],{"class":164},[105,102236,116],{"class":115},[105,102238,101514],{"class":220},[105,102240,101463],{"class":115},[105,102242,102243,102245,102247,102249],{"class":107,"line":28},[105,102244,30400],{"class":164},[105,102246,116],{"class":115},[105,102248,101525],{"class":220},[105,102250,101475],{"class":115},[14,102252,102253],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[96,102255,102257],{"className":30363,"code":102256,"language":30365,"meta":22,"style":22},"if __name__ == \"__main__\":\n    main()\n",[102,102258,102259,102271],{"__ignoreMap":22},[105,102260,102261,102263,102265,102267,102269],{"class":107,"line":108},[105,102262,1522],{"class":111},[105,102264,31205],{"class":164},[105,102266,101544],{"class":111},[105,102268,101547],{"class":220},[105,102270,3730],{"class":115},[105,102272,102273],{"class":107,"line":28},[105,102274,101554],{"class":115},[14,102276,102277,102278,102281,102282,28370],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[102,102279,102280],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[102,102283,102280],{},[14,102285,102286],{},"运行:",[96,102288,102290],{"className":23815,"code":102289,"language":23817,"meta":22,"style":22},"python ch1_first_sim.py\n",[102,102291,102292],{"__ignoreMap":22},[105,102293,102294,102296],{"class":107,"line":108},[105,102295,30365],{"class":1954},[105,102297,101271],{"class":220},[47,102299,102301],{"id":102300},"_5运行结果说明","5.运行结果说明",[14,102303,102304],{},"你应该看到类似输出:",[96,102306,102309],{"className":102307,"code":102308,"language":5179,"meta":22},[5177],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[102,102310,102308],{"__ignoreMap":22},[14,102312,102313,102315,102316,102319,102320,28370],{},[102,102314,101605],{}," 有 7 个位置变量: ",[102,102317,102318],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[102,102321,102322],{},"vx vy vz wx wy wz",[14,102324,102325,102326,102329],{},"你还会看到 ",[102,102327,102328],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[47,102331,102333],{"id":102332},"_6验证步骤","6.验证步骤",[14,102335,102336],{},"确认版本:",[96,102338,102339],{"className":23815,"code":100924,"language":23817,"meta":22,"style":22},[102,102340,102341],{"__ignoreMap":22},[105,102342,102343,102345,102347],{"class":107,"line":108},[105,102344,30365],{"class":1954},[105,102346,30343],{"class":164},[105,102348,100935],{"class":220},[14,102350,102351],{},"确认导入的是官方 bindings:",[96,102353,102355],{"className":23815,"code":102354,"language":23817,"meta":22,"style":22},"python -c \"import mujoco; print(mujoco)\"\n",[102,102356,102357],{"__ignoreMap":22},[105,102358,102359,102361,102363],{"class":107,"line":108},[105,102360,30365],{"class":1954},[105,102362,30343],{"class":164},[105,102364,102365],{"class":220}," \"import mujoco; print(mujoco)\"\n",[14,102367,102368],{},"运行程序:",[96,102370,102371],{"className":23815,"code":102289,"language":23817,"meta":22,"style":22},[102,102372,102373],{"__ignoreMap":22},[105,102374,102375,102377],{"class":107,"line":108},[105,102376,30365],{"class":1954},[105,102378,101271],{"class":220},[14,102380,102381,102382,102385,102386,28370],{},"检查 ",[102,102383,102384],{},"final time"," 是否约等于 ",[102,102387,102388],{},"1.0",[14,102390,102391],{},"再做几个小实验：",[59,102393,102394,102404,102412,102425],{},[62,102395,102396,102397,102399,102400,102403],{},"把 ",[102,102398,101924],{}," 改成 ",[102,102401,102402],{},"pos=\"0 0 2\"","，观察初始高度变化。",[62,102405,102396,102406,102399,102408,102411],{},[102,102407,101813],{},[102,102409,102410],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[62,102413,102396,102414,102399,102416,102419,102420,102422,102423,28370],{},[102,102415,101809],{},[102,102417,102418],{},"timestep=\"0.005\"","，观察 100 步后的 ",[102,102421,102384],{}," 是否变成约 ",[102,102424,35314],{},[62,102426,102427,102428,102431],{},"删除 ",[102,102429,102430],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102433,102434],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[47,102436,102438],{"id":102437},"_7常见错误与解决方案","7.常见错误与解决方案",[76,102440,102442],{"id":102441},"modulenotfounderror-no-module-named-mujoco",[102,102443,102444],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102446,102447],{},"解决:",[96,102449,102451],{"className":23815,"code":102450,"language":23817,"meta":22,"style":22},"pip install \"mujoco>=2.3\"\n",[102,102452,102453],{"__ignoreMap":22},[105,102454,102455,102457,102459],{"class":107,"line":108},[105,102456,23824],{"class":1954},[105,102458,23827],{"class":220},[105,102460,102461],{"class":220}," \"mujoco>=2.3\"\n",[76,102463,102465],{"id":102464},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102467,102468],{},"先安装系统依赖:",[96,102470,102472],{"className":23815,"code":102471,"language":23817,"meta":22,"style":22},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[102,102473,102474],{"__ignoreMap":22},[105,102475,102476,102478,102480,102482,102484,102487,102489,102492,102494,102497,102499],{"class":107,"line":108},[105,102477,24561],{"class":1954},[105,102479,26300],{"class":220},[105,102481,23827],{"class":220},[105,102483,26385],{"class":164},[105,102485,102486],{"class":220}," mesa-libGL",[105,102488,100799],{"class":220},[105,102490,102491],{"class":220}," glfw",[105,102493,100819],{"class":220},[105,102495,102496],{"class":220}," libX11",[105,102498,100832],{"class":220},[105,102500,102501],{"class":220}," libXrandr\n",[76,102503,102505],{"id":102504},"xml-解析失败","XML 解析失败",[14,102507,102508],{},"检查:",[59,102510,102511,102514,102517,102523],{},[62,102512,102513],{},"标签是否闭合",[62,102515,102516],{},"属性是否带引号",[62,102518,102519,102520],{},"根节点是否是 ",[102,102521,102522],{},"\u003Cmujoco>",[62,102524,102525,102527,102528,102531],{},[102,102526,51785],{}," 是否放在 ",[102,102529,102530],{},"\u003Cworldbody>"," 内部",[76,102533,102535,102537,102538],{"id":102534},"final-time-不是严格等于-10",[102,102536,102384],{}," 不是严格等于 ",[102,102539,102388],{},[14,102541,102542],{},"这通常不是错误。浮点数计算可能得到：",[96,102544,102547],{"className":102545,"code":102546,"language":5179,"meta":22},[5177],"1.0000000000000007\n",[102,102548,102546],{"__ignoreMap":22},[14,102550,102551,102552,102554],{},"只要接近 ",[102,102553,102388],{}," 就正常。",[76,102556,102557],{"id":102557},"方块没有掉下来",[14,102559,102560],{},"检查：",[59,102562,102563,102569,102575,102580],{},[62,102564,102565,102566],{},"方块 body 里是否有 ",[102,102567,102568],{},"\u003Cfreejoint\u002F>",[62,102570,102571,102572],{},"重力是否是 ",[102,102573,102574],{},"0 0 -9.81",[62,102576,102577,102578],{},"是否真的调用了 ",[102,102579,100670],{},[62,102581,102582,102583,102585,102586],{},"你看的是否是 ",[102,102584,102328],{},"，不是 ",[102,102587,102588],{},"initial qpos",[47,102590,102592],{"id":102591},"_8本章小结","8.本章小结",[14,102594,102595],{},"本章你已经完成了 MuJoCo 的最小闭环：",[96,102597,102600],{"className":102598,"code":102599,"language":5179,"meta":22},[5177],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[102,102601,102599],{"__ignoreMap":22},[14,102603,102604],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5118,102606,102607],{},"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":28,"depth":28,"links":102609},[102610,102611,102612,102617,102621,102622,102623,102631],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":102613},[102614,102615,102616],{"id":101067,"depth":1171,"text":101068},{"id":101161,"depth":1171,"text":101162},{"id":101213,"depth":1171,"text":101214},{"id":101237,"depth":28,"text":101238,"children":102618},[102619,102620],{"id":101557,"depth":1171,"text":101557},{"id":101693,"depth":1171,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":102624},[102625,102626,102627,102628,102630],{"id":102441,"depth":1171,"text":102444},{"id":102464,"depth":1171,"text":102465},{"id":102504,"depth":1171,"text":102505},{"id":102534,"depth":1171,"text":102629},"final time 不是严格等于 1.0",{"id":102557,"depth":1171,"text":102557},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100623,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102638,"title":102639,"body":102640,"description":22,"extension":30,"meta":104296,"navigation":32,"path":104297,"seo":104298,"stem":104299,"__hash__":104300},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102641,"toc":104272},[102642,102645,102647,102650,102653,102670,102765,102768,102774,102776,102778,102802,102805,102819,102822,102863,102865,102878,102880,102883,102931,102943,102946,102949,102955,102968,103035,103038,103057,103060,103063,103069,103071,103080,103083,103087,103096,103178,103187,103191,103197,103211,103221,103223,103553,103556,103568,103570,103581,103583,103586,103604,103607,103610,103628,103639,103642,103657,103667,103669,103690,103707,103727,103733,103773,103789,103805,103811,103814,103838,103854,103859,103889,103906,103931,103934,103949,103958,103973,103982,103997,104004,104006,104016,104029,104036,104039,104078,104085,104087,104139,104141,104147,104150,104157,104164,104167,104169,104187,104190,104193,104227,104239,104241,104244,104266,104269],[10,102643,102639],{"id":102644},"_2xml-与-mjcf-物理建模基础",[47,102646,100632],{"id":100631},[14,102648,102649],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102651,102652],{},"本章结束后，你应该能看懂一个简单模型里：",[59,102654,102655,102658,102661,102664,102667],{},[62,102656,102657],{},"地面在哪里。",[62,102659,102660],{},"物体初始位置在哪里。",[62,102662,102663],{},"几何体是什么形状。",[62,102665,102666],{},"哪些 body 可以自由运动。",[62,102668,102669],{},"如何用名字在 Python 里找到 XML 中的对象。",[253,102671,102672,102682],{},[256,102673,102674],{},[259,102675,102676,102679],{},[262,102677,102678],{"align":23729},"标签",[262,102680,102681],{"align":23729},"作用",[300,102683,102684,102693,102703,102712,102722,102732,102745,102755],{},[259,102685,102686,102690],{},[305,102687,102688],{"align":23729},[102,102689,102522],{},[305,102691,102692],{"align":23729},"根节点",[259,102694,102695,102700],{},[305,102696,102697],{"align":23729},[102,102698,102699],{},"\u003Coption>",[305,102701,102702],{"align":23729},"仿真参数",[259,102704,102705,102709],{},[305,102706,102707],{"align":23729},[102,102708,102530],{},[305,102710,102711],{"align":23729},"世界中的物体",[259,102713,102714,102719],{},[305,102715,102716],{"align":23729},[102,102717,102718],{},"\u003Cbody>",[305,102720,102721],{"align":23729},"刚体",[259,102723,102724,102729],{},[305,102725,102726],{"align":23729},[102,102727,102728],{},"\u003Cgeom>",[305,102730,102731],{"align":23729},"几何体、碰撞体、可视体",[259,102733,102734,102742],{},[305,102735,102736,24963,102739],{"align":23729},[102,102737,102738],{},"\u003Cjoint>",[102,102740,102741],{},"\u003Cfreejoint>",[305,102743,102744],{"align":23729},"关节",[259,102746,102747,102752],{},[305,102748,102749],{"align":23729},[102,102750,102751],{},"\u003Csite>",[305,102753,102754],{"align":23729},"标记点",[259,102756,102757,102762],{},[305,102758,102759],{"align":23729},[102,102760,102761],{},"\u003Cactuator>",[305,102763,102764],{"align":23729},"控制器",[14,102766,102767],{},"初学时可以先记住：",[96,102769,102772],{"className":102770,"code":102771,"language":5179,"meta":22},[5177],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[102,102773,102771],{"__ignoreMap":22},[47,102775,100755],{"id":100754},[14,102777,100758],{},[96,102779,102781],{"className":23815,"code":102780,"language":23817,"meta":22,"style":22},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[102,102782,102783],{"__ignoreMap":22},[105,102784,102785,102787,102789,102791,102793,102795,102797,102799],{"class":107,"line":108},[105,102786,24561],{"class":1954},[105,102788,26300],{"class":220},[105,102790,23827],{"class":220},[105,102792,26385],{"class":164},[105,102794,102486],{"class":220},[105,102796,100799],{"class":220},[105,102798,102491],{"class":220},[105,102800,102801],{"class":220}," glfw-devel\n",[14,102803,102804],{},"pip:",[96,102806,102807],{"className":23815,"code":100904,"language":23817,"meta":22,"style":22},[102,102808,102809],{"__ignoreMap":22},[105,102810,102811,102813,102815,102817],{"class":107,"line":108},[105,102812,23824],{"class":1954},[105,102814,23827],{"class":220},[105,102816,100915],{"class":220},[105,102818,100918],{"class":220},[14,102820,102821],{},"conda:",[96,102823,102825],{"className":23815,"code":102824,"language":23817,"meta":22,"style":22},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[102,102826,102827,102844,102853],{"__ignoreMap":22},[105,102828,102829,102831,102833,102835,102838,102840,102842],{"class":107,"line":108},[105,102830,30315],{"class":1954},[105,102832,29161],{"class":220},[105,102834,25100],{"class":164},[105,102836,102837],{"class":220}," mujoco-xml",[105,102839,100960],{"class":220},[105,102841,100963],{"class":164},[105,102843,100966],{"class":164},[105,102845,102846,102848,102850],{"class":107,"line":28},[105,102847,30315],{"class":1954},[105,102849,100973],{"class":220},[105,102851,102852],{"class":220}," mujoco-xml\n",[105,102854,102855,102857,102859,102861],{"class":107,"line":1171},[105,102856,23824],{"class":1954},[105,102858,23827],{"class":220},[105,102860,100915],{"class":220},[105,102862,100918],{"class":220},[14,102864,100989],{},[59,102866,102867,102870,102875],{},[62,102868,102869],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[62,102871,102872,102873,28370],{},"本章使用基础标签，适用于 ",[102,102874,101012],{},[62,102876,102877],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[47,102879,101030],{"id":101029},[14,102881,102882],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[96,102884,102886],{"className":53052,"code":102885,"language":53054,"meta":22,"style":22},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[102,102887,102888,102902,102910,102915,102923],{"__ignoreMap":22},[105,102889,102890,102892,102894,102896,102898,102900],{"class":107,"line":108},[105,102891,1026],{"class":115},[105,102893,101006],{"class":51285},[105,102895,101760],{"class":1954},[105,102897,161],{"class":115},[105,102899,62664],{"class":220},[105,102901,51292],{"class":115},[105,102903,102904,102906,102908],{"class":107,"line":28},[105,102905,52129],{"class":115},[105,102907,101826],{"class":51285},[105,102909,51292],{"class":115},[105,102911,102912],{"class":107,"line":1171},[105,102913,102914],{"class":115},"    ...\n",[105,102916,102917,102919,102921],{"class":107,"line":1186},[105,102918,52402],{"class":115},[105,102920,101826],{"class":51285},[105,102922,51292],{"class":115},[105,102924,102925,102927,102929],{"class":107,"line":1192},[105,102926,51770],{"class":115},[105,102928,101006],{"class":51285},[105,102930,51292],{"class":115},[14,102932,102933,102935,102936,102938,102939,102942],{},[102,102934,51785],{}," 表示刚体。",[102,102937,101105],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[102,102940,102941],{},"joint"," 表示刚体相对父刚体如何运动。",[76,102944,102945],{"id":102945},"层级结构非常重要",[14,102947,102948],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[96,102950,102953],{"className":102951,"code":102952,"language":5179,"meta":22},[5177],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[102,102954,102952],{"__ignoreMap":22},[14,102956,102957,101003,102960,102963,102964,102967],{},[102,102958,102959],{},"red_box_geom",[102,102961,102962],{},"box_center"," 都属于 ",[102,102965,102966],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[96,102969,102971],{"className":53052,"code":102970,"language":53054,"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",[102,102972,102973,102993,103007,103027],{"__ignoreMap":22},[105,102974,102975,102977,102979,102981,102983,102985,102987,102989,102991],{"class":107,"line":108},[105,102976,1026],{"class":115},[105,102978,51785],{"class":51285},[105,102980,14912],{"class":1954},[105,102982,161],{"class":115},[105,102984,53476],{"class":220},[105,102986,101091],{"class":1954},[105,102988,161],{"class":115},[105,102990,101096],{"class":220},[105,102992,51292],{"class":115},[105,102994,102995,102997,102999,103001,103003,103005],{"class":107,"line":28},[105,102996,52129],{"class":115},[105,102998,101605],{"class":51285},[105,103000,14912],{"class":1954},[105,103002,161],{"class":115},[105,103004,101946],{"class":220},[105,103006,101129],{"class":115},[105,103008,103009,103011,103013,103015,103017,103019,103021,103023,103025],{"class":107,"line":1171},[105,103010,52129],{"class":115},[105,103012,101105],{"class":51285},[105,103014,53809],{"class":1954},[105,103016,161],{"class":115},[105,103018,53476],{"class":220},[105,103020,101121],{"class":1954},[105,103022,161],{"class":115},[105,103024,101126],{"class":220},[105,103026,101129],{"class":115},[105,103028,103029,103031,103033],{"class":107,"line":1186},[105,103030,51770],{"class":115},[105,103032,51785],{"class":51285},[105,103034,51292],{"class":115},[14,103036,103037],{},"含义:",[59,103039,103040,103046,103051,103054],{},[62,103041,103042,103043,103045],{},"创建名为 ",[102,103044,53699],{}," 的刚体",[62,103047,103048,103049],{},"初始位置在世界坐标 ",[102,103050,101154],{},[62,103052,103053],{},"它有一个自由关节",[62,103055,103056],{},"它有一个盒子几何体",[76,103058,103059],{"id":103059},"坐标怎么理解",[14,103061,103062],{},"MuJoCo 默认使用三维坐标：",[96,103064,103067],{"className":103065,"code":103066,"language":5179,"meta":22},[5177],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[102,103068,103066],{"__ignoreMap":22},[14,103070,14625],{},[96,103072,103074],{"className":53052,"code":103073,"language":53054,"meta":22,"style":22},"pos=\"0 0 1\"\n",[102,103075,103076],{"__ignoreMap":22},[105,103077,103078],{"class":107,"line":108},[105,103079,103073],{"class":115},[14,103081,103082],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[76,103084,103086],{"id":103085},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103088,103089,103090,82515,103093,103095],{},"不同 ",[102,103091,103092],{},"type",[102,103094,31481],{}," 含义不同：",[253,103097,103098,103113],{},[256,103099,103100],{},[259,103101,103102,103106,103111],{},[262,103103,103104],{"align":23729},[102,103105,103092],{},[262,103107,103108,103110],{"align":23729},[102,103109,31481],{}," 示例",[262,103112,100685],{"align":23729},[300,103114,103115,103129,103144,103163],{},[259,103116,103117,103121,103126],{},[305,103118,103119],{"align":23729},[102,103120,53699],{},[305,103122,103123],{"align":23729},[102,103124,103125],{},"size=\"0.1 0.2 0.3\"",[305,103127,103128],{"align":23729},"x\u002Fy\u002Fz 半边长，不是完整长度",[259,103130,103131,103136,103141],{},[305,103132,103133],{"align":23729},[102,103134,103135],{},"sphere",[305,103137,103138],{"align":23729},[102,103139,103140],{},"size=\"0.1\"",[305,103142,103143],{"align":23729},"球半径",[259,103145,103146,103151,103156],{},[305,103147,103148],{"align":23729},[102,103149,103150],{},"capsule",[305,103152,103153],{"align":23729},[102,103154,103155],{},"size=\"0.03\"",[305,103157,103158,103159,103162],{"align":23729},"胶囊半径，长度常用 ",[102,103160,103161],{},"fromto"," 指定",[259,103164,103165,103170,103175],{},[305,103166,103167],{"align":23729},[102,103168,103169],{},"plane",[305,103171,103172],{"align":23729},[102,103173,103174],{},"size=\"3 3 0.1\"",[305,103176,103177],{"align":23729},"可视平面大小，通常当地面",[14,103179,103180,103181,103183,103184,103186],{},"最容易踩坑的是 box：",[102,103182,102009],{}," 表示边长大约是 ",[102,103185,32022],{},"，因为 MuJoCo 用的是半边长。",[76,103188,103190],{"id":103189},"site-是什么","site 是什么",[14,103192,103193,103196],{},[102,103194,103195],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[59,103198,103199,103202,103205,103208],{},[62,103200,103201],{},"标记机械臂末端。",[62,103203,103204],{},"标记目标位置。",[62,103206,103207],{},"放传感器或相机参考点。",[62,103209,103210],{},"在 Python 中读取某个关键点的世界坐标。",[14,103212,103213,103214,101003,103217,103220],{},"在后面的 Reacher 任务中，",[102,103215,103216],{},"tip",[102,103218,103219],{},"target"," 就会用 site 表示。",[47,103222,101238],{"id":101237},[96,103224,103226],{"className":30363,"code":103225,"language":30365,"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",[102,103227,103228,103234,103244,103248,103252,103260,103265,103269,103273,103277,103282,103286,103291,103296,103301,103306,103310,103314,103318,103322,103326,103330,103342,103354,103362,103366,103381,103396,103400,103413,103428,103441,103454,103458,103474,103478,103482,103493,103505,103517,103529,103533,103537,103549],{"__ignoreMap":22},[105,103229,103230,103232],{"class":107,"line":108},[105,103231,30377],{"class":111},[105,103233,101286],{"class":115},[105,103235,103236,103238,103240,103242],{"class":107,"line":28},[105,103237,30377],{"class":111},[105,103239,31365],{"class":115},[105,103241,31368],{"class":111},[105,103243,31371],{"class":115},[105,103245,103246],{"class":107,"line":1171},[105,103247,2391],{"emptyLinePlaceholder":32},[105,103249,103250],{"class":107,"line":1186},[105,103251,2391],{"emptyLinePlaceholder":32},[105,103253,103254,103256,103258],{"class":107,"line":1192},[105,103255,101299],{"class":164},[105,103257,13556],{"class":111},[105,103259,101304],{"class":220},[105,103261,103262],{"class":107,"line":1206},[105,103263,103264],{"class":220},"\u003Cmujoco model=\"xml_basic\">\n",[105,103266,103267],{"class":107,"line":1212},[105,103268,101314],{"class":220},[105,103270,103271],{"class":107,"line":1303},[105,103272,2391],{"emptyLinePlaceholder":32},[105,103274,103275],{"class":107,"line":1309},[105,103276,101323],{"class":220},[105,103278,103279],{"class":107,"line":1321},[105,103280,103281],{"class":220},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[105,103283,103284],{"class":107,"line":1603},[105,103285,2391],{"emptyLinePlaceholder":32},[105,103287,103288],{"class":107,"line":1608},[105,103289,103290],{"class":220},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[105,103292,103293],{"class":107,"line":1614},[105,103294,103295],{"class":220},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[105,103297,103298],{"class":107,"line":1619},[105,103299,103300],{"class":220},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[105,103302,103303],{"class":107,"line":1633},[105,103304,103305],{"class":220},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[105,103307,103308],{"class":107,"line":1638},[105,103309,101352],{"class":220},[105,103311,103312],{"class":107,"line":1644},[105,103313,101357],{"class":220},[105,103315,103316],{"class":107,"line":1665},[105,103317,101362],{"class":220},[105,103319,103320],{"class":107,"line":1670},[105,103321,95683],{"class":220},[105,103323,103324],{"class":107,"line":1684},[105,103325,2391],{"emptyLinePlaceholder":32},[105,103327,103328],{"class":107,"line":1689},[105,103329,2391],{"emptyLinePlaceholder":32},[105,103331,103332,103334,103336,103338,103340],{"class":107,"line":1718},[105,103333,31932],{"class":111},[105,103335,1964],{"class":1954},[105,103337,101383],{"class":115},[105,103339,95671],{"class":164},[105,103341,3730],{"class":115},[105,103343,103344,103346,103348,103350,103352],{"class":107,"line":1723},[105,103345,101392],{"class":115},[105,103347,161],{"class":111},[105,103349,101397],{"class":115},[105,103351,101299],{"class":164},[105,103353,122],{"class":115},[105,103355,103356,103358,103360],{"class":107,"line":1740},[105,103357,101406],{"class":115},[105,103359,161],{"class":111},[105,103361,101411],{"class":115},[105,103363,103364],{"class":107,"line":1745},[105,103365,2391],{"emptyLinePlaceholder":32},[105,103367,103368,103371,103373,103376,103379],{"class":107,"line":1750},[105,103369,103370],{"class":115},"    box_body_id ",[105,103372,161],{"class":111},[105,103374,103375],{"class":115}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[105,103377,103378],{"class":220},"\"red_box\"",[105,103380,122],{"class":115},[105,103382,103383,103386,103388,103391,103394],{"class":107,"line":1755},[105,103384,103385],{"class":115},"    site_id ",[105,103387,161],{"class":111},[105,103389,103390],{"class":115}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[105,103392,103393],{"class":220},"\"box_center\"",[105,103395,122],{"class":115},[105,103397,103398],{"class":107,"line":1769},[105,103399,2391],{"emptyLinePlaceholder":32},[105,103401,103402,103404,103407,103409,103411],{"class":107,"line":1774},[105,103403,3092],{"class":111},[105,103405,103406],{"class":115}," box_body_id ",[105,103408,1026],{"class":111},[105,103410,4084],{"class":164},[105,103412,3730],{"class":115},[105,103414,103415,103418,103421,103423,103426],{"class":107,"line":2568},[105,103416,103417],{"class":111},"        raise",[105,103419,103420],{"class":164}," RuntimeError",[105,103422,116],{"class":115},[105,103424,103425],{"class":220},"\"body red_box not found\"",[105,103427,122],{"class":115},[105,103429,103430,103432,103435,103437,103439],{"class":107,"line":2582},[105,103431,3092],{"class":111},[105,103433,103434],{"class":115}," site_id ",[105,103436,1026],{"class":111},[105,103438,4084],{"class":164},[105,103440,3730],{"class":115},[105,103442,103443,103445,103447,103449,103452],{"class":107,"line":2590},[105,103444,103417],{"class":111},[105,103446,103420],{"class":164},[105,103448,116],{"class":115},[105,103450,103451],{"class":220},"\"site box_center not found\"",[105,103453,122],{"class":115},[105,103455,103456],{"class":107,"line":2595},[105,103457,2391],{"emptyLinePlaceholder":32},[105,103459,103460,103462,103464,103466,103468,103470,103472],{"class":107,"line":2601},[105,103461,3192],{"class":111},[105,103463,101486],{"class":115},[105,103465,26028],{"class":111},[105,103467,32428],{"class":164},[105,103469,116],{"class":115},[105,103471,1713],{"class":164},[105,103473,30771],{"class":115},[105,103475,103476],{"class":107,"line":2607},[105,103477,101501],{"class":115},[105,103479,103480],{"class":107,"line":2612},[105,103481,2391],{"emptyLinePlaceholder":32},[105,103483,103484,103486,103488,103491],{"class":107,"line":7940},[105,103485,31284],{"class":164},[105,103487,116],{"class":115},[105,103489,103490],{"class":220},"\"simulation time:\"",[105,103492,101463],{"class":115},[105,103494,103495,103497,103499,103502],{"class":107,"line":7964},[105,103496,31284],{"class":164},[105,103498,116],{"class":115},[105,103500,103501],{"class":220},"\"box body position:\"",[105,103503,103504],{"class":115},", data.xpos[box_body_id].copy())\n",[105,103506,103507,103509,103511,103514],{"class":107,"line":7969},[105,103508,31284],{"class":164},[105,103510,116],{"class":115},[105,103512,103513],{"class":220},"\"site position:\"",[105,103515,103516],{"class":115},", data.site_xpos[site_id].copy())\n",[105,103518,103519,103521,103523,103526],{"class":107,"line":7975},[105,103520,31284],{"class":164},[105,103522,116],{"class":115},[105,103524,103525],{"class":220},"\"box qpos:\"",[105,103527,103528],{"class":115},", np.array(data.qpos))\n",[105,103530,103531],{"class":107,"line":8002},[105,103532,2391],{"emptyLinePlaceholder":32},[105,103534,103535],{"class":107,"line":8007},[105,103536,2391],{"emptyLinePlaceholder":32},[105,103538,103539,103541,103543,103545,103547],{"class":107,"line":8013},[105,103540,1522],{"class":111},[105,103542,31205],{"class":164},[105,103544,101544],{"class":111},[105,103546,101547],{"class":220},[105,103548,3730],{"class":115},[105,103550,103551],{"class":107,"line":8025},[105,103552,101554],{"class":115},[14,103554,103555],{},"保存为：",[96,103557,103559],{"className":23815,"code":103558,"language":23817,"meta":22,"style":22},"touch ch2_xml_basic.py\n",[102,103560,103561],{"__ignoreMap":22},[105,103562,103563,103565],{"class":107,"line":108},[105,103564,101268],{"class":1954},[105,103566,103567],{"class":220}," ch2_xml_basic.py\n",[14,103569,102286],{},[96,103571,103573],{"className":23815,"code":103572,"language":23817,"meta":22,"style":22},"python ch2_xml_basic.py\n",[102,103574,103575],{"__ignoreMap":22},[105,103576,103577,103579],{"class":107,"line":108},[105,103578,30365],{"class":1954},[105,103580,103567],{"class":220},[76,103582,101557],{"id":101557},[14,103584,103585],{},"用名字查找 body：",[96,103587,103589],{"className":30363,"code":103588,"language":30365,"meta":22,"style":22},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[102,103590,103591],{"__ignoreMap":22},[105,103592,103593,103596,103598,103600,103602],{"class":107,"line":108},[105,103594,103595],{"class":115},"box_body_id ",[105,103597,161],{"class":111},[105,103599,103375],{"class":115},[105,103601,103378],{"class":220},[105,103603,122],{"class":115},[14,103605,103606],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103608,103609],{},"用名字查找 site：",[96,103611,103613],{"className":30363,"code":103612,"language":30365,"meta":22,"style":22},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[102,103614,103615],{"__ignoreMap":22},[105,103616,103617,103620,103622,103624,103626],{"class":107,"line":108},[105,103618,103619],{"class":115},"site_id ",[105,103621,161],{"class":111},[105,103623,103390],{"class":115},[105,103625,103393],{"class":220},[105,103627,122],{"class":115},[14,103629,103630,103631,103634,103635,103638],{},"注意第二个参数是对象类型。查 body 就用 ",[102,103632,103633],{},"mjOBJ_BODY","，查 site 就用 ",[102,103636,103637],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103640,103641],{},"读取世界坐标：",[96,103643,103645],{"className":30363,"code":103644,"language":30365,"meta":22,"style":22},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[102,103646,103647,103652],{"__ignoreMap":22},[105,103648,103649],{"class":107,"line":108},[105,103650,103651],{"class":115},"data.xpos[box_body_id]\n",[105,103653,103654],{"class":107,"line":28},[105,103655,103656],{"class":115},"data.site_xpos[site_id]\n",[14,103658,103659,103662,103663,103666],{},[102,103660,103661],{},"xpos"," 是 body 的世界坐标，",[102,103664,103665],{},"site_xpos"," 是 site 的世界坐标。",[76,103668,101693],{"id":101693},[96,103670,103672],{"className":30363,"code":103671,"language":30365,"meta":22,"style":22},"import mujoco\nimport numpy as np\n",[102,103673,103674,103680],{"__ignoreMap":22},[105,103675,103676,103678],{"class":107,"line":108},[105,103677,30377],{"class":111},[105,103679,101286],{"class":115},[105,103681,103682,103684,103686,103688],{"class":107,"line":28},[105,103683,30377],{"class":111},[105,103685,31365],{"class":115},[105,103687,31368],{"class":111},[105,103689,31371],{"class":115},[14,103691,103692,103693,103696,103697,103700,103701,328,103704,28370],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[102,103694,103695],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[102,103698,103699],{},"as np"," 是习惯写法，后面就可以写 ",[102,103702,103703],{},"np.array(...)",[102,103705,103706],{},"np.round(...)",[96,103708,103709],{"className":30363,"code":101580,"language":30365,"meta":22,"style":22},[102,103710,103711,103719,103723],{"__ignoreMap":22},[105,103712,103713,103715,103717],{"class":107,"line":108},[105,103714,101299],{"class":164},[105,103716,13556],{"class":111},[105,103718,101304],{"class":220},[105,103720,103721],{"class":107,"line":28},[105,103722,101595],{"class":220},[105,103724,103725],{"class":107,"line":1171},[105,103726,95683],{"class":220},[14,103728,103729,103730,28370],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[102,103731,103732],{},"mujoco.MjModel.from_xml_string(XML)",[96,103734,103736],{"className":53052,"code":103735,"language":53054,"meta":22,"style":22},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[102,103737,103738],{"__ignoreMap":22},[105,103739,103740,103742,103744,103746,103748,103750,103752,103754,103757,103759,103761,103764,103766,103768,103771],{"class":107,"line":108},[105,103741,1026],{"class":115},[105,103743,103195],{"class":51285},[105,103745,14912],{"class":1954},[105,103747,161],{"class":115},[105,103749,103393],{"class":220},[105,103751,101091],{"class":1954},[105,103753,161],{"class":115},[105,103755,103756],{"class":220},"\"0 0 0\"",[105,103758,101121],{"class":1954},[105,103760,161],{"class":115},[105,103762,103763],{"class":220},"\"0.03\"",[105,103765,78752],{"class":1954},[105,103767,161],{"class":115},[105,103769,103770],{"class":220},"\"0 1 0 1\"",[105,103772,101129],{"class":115},[14,103774,103775,103777,103778,103781,103782,103784,103785,103788],{},[102,103776,103195],{}," 是标记点。",[102,103779,103780],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[102,103783,103155],{}," 表示显示出来的小球大小。",[102,103786,103787],{},"rgba=\"0 1 0 1\""," 表示绿色。",[96,103790,103791],{"className":30363,"code":103588,"language":30365,"meta":22,"style":22},[102,103792,103793],{"__ignoreMap":22},[105,103794,103795,103797,103799,103801,103803],{"class":107,"line":108},[105,103796,103595],{"class":115},[105,103798,161],{"class":111},[105,103800,103375],{"class":115},[105,103802,103378],{"class":220},[105,103804,122],{"class":115},[14,103806,103807,103808,103810],{},"这行的作用是：根据名字 ",[102,103809,103378],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103812,103813],{},"拆开看：",[59,103815,103816,103822,103827,103833],{},[62,103817,103818,103821],{},[102,103819,103820],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[62,103823,103824,103826],{},[102,103825,102070],{}," 是被查询的模型。",[62,103828,103829,103832],{},[102,103830,103831],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[62,103834,103835,103837],{},[102,103836,103378],{}," 是 XML 里写的名字。",[96,103839,103840],{"className":30363,"code":103612,"language":30365,"meta":22,"style":22},[102,103841,103842],{"__ignoreMap":22},[105,103843,103844,103846,103848,103850,103852],{"class":107,"line":108},[105,103845,103619],{"class":115},[105,103847,161],{"class":111},[105,103849,103390],{"class":115},[105,103851,103393],{"class":220},[105,103853,122],{"class":115},[14,103855,103856,103857,28370],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[102,103858,103393],{},[96,103860,103862],{"className":30363,"code":103861,"language":30365,"meta":22,"style":22},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[102,103863,103864,103876],{"__ignoreMap":22},[105,103865,103866,103868,103870,103872,103874],{"class":107,"line":108},[105,103867,1522],{"class":111},[105,103869,103406],{"class":115},[105,103871,1026],{"class":111},[105,103873,4084],{"class":164},[105,103875,3730],{"class":115},[105,103877,103878,103881,103883,103885,103887],{"class":107,"line":28},[105,103879,103880],{"class":111},"    raise",[105,103882,103420],{"class":164},[105,103884,116],{"class":115},[105,103886,103425],{"class":220},[105,103888,122],{"class":115},[14,103890,103891,103893,103894,103897,103898,103901,103902,103905],{},[102,103892,1522],{}," 是条件判断。",[102,103895,103896],{},"mj_name2id"," 找不到对象时会返回 ",[102,103899,103900],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[102,103903,103904],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[96,103907,103909],{"className":30363,"code":103908,"language":30365,"meta":22,"style":22},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[102,103910,103911,103927],{"__ignoreMap":22},[105,103912,103913,103915,103917,103919,103921,103923,103925],{"class":107,"line":108},[105,103914,3016],{"class":111},[105,103916,101486],{"class":115},[105,103918,26028],{"class":111},[105,103920,32428],{"class":164},[105,103922,116],{"class":115},[105,103924,1713],{"class":164},[105,103926,30771],{"class":115},[105,103928,103929],{"class":107,"line":28},[105,103930,101684],{"class":115},[14,103932,103933],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[96,103935,103937],{"className":30363,"code":103936,"language":30365,"meta":22,"style":22},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[102,103938,103939],{"__ignoreMap":22},[105,103940,103941,103943,103945,103947],{"class":107,"line":108},[105,103942,30400],{"class":164},[105,103944,116],{"class":115},[105,103946,103501],{"class":220},[105,103948,103504],{"class":115},[14,103950,103951,103953,103954,103957],{},[102,103952,101064],{}," 保存所有 body 的世界坐标。",[102,103955,103956],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[96,103959,103961],{"className":30363,"code":103960,"language":30365,"meta":22,"style":22},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[102,103962,103963],{"__ignoreMap":22},[105,103964,103965,103967,103969,103971],{"class":107,"line":108},[105,103966,30400],{"class":164},[105,103968,116],{"class":115},[105,103970,103513],{"class":220},[105,103972,103516],{"class":115},[14,103974,103975,103978,103979,103981],{},[102,103976,103977],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[102,103980,102962],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[96,103983,103985],{"className":30363,"code":103984,"language":30365,"meta":22,"style":22},"print(\"box qpos:\", np.array(data.qpos))\n",[102,103986,103987],{"__ignoreMap":22},[105,103988,103989,103991,103993,103995],{"class":107,"line":108},[105,103990,30400],{"class":164},[105,103992,116],{"class":115},[105,103994,103525],{"class":220},[105,103996,103528],{"class":115},[14,103998,103999,104000,104003],{},"这里打印广义位置数组。",[102,104001,104002],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[47,104005,102301],{"id":102300},[14,104007,104008,104009,104012,104013,28370],{},"程序会输出 ",[102,104010,104011],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[102,104014,104015],{},"qpos",[14,104017,104018,104020,104021,104024,104025,104028],{},[102,104019,103956],{}," 是 body 的世界坐标位置。",[102,104022,104023],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[102,104026,104027],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104030,82207,104031,82515,104033,104035],{},[102,104032,102962],{},[102,104034,103780],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104037,104038],{},"如果你把 site 改成：",[96,104040,104042],{"className":53052,"code":104041,"language":53054,"meta":22,"style":22},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[102,104043,104044],{"__ignoreMap":22},[105,104045,104046,104048,104050,104052,104054,104057,104059,104061,104064,104066,104068,104070,104072,104074,104076],{"class":107,"line":108},[105,104047,1026],{"class":115},[105,104049,103195],{"class":51285},[105,104051,14912],{"class":1954},[105,104053,161],{"class":115},[105,104055,104056],{"class":220},"\"box_top\"",[105,104058,101091],{"class":1954},[105,104060,161],{"class":115},[105,104062,104063],{"class":220},"\"0 0 0.15\"",[105,104065,101121],{"class":1954},[105,104067,161],{"class":115},[105,104069,103763],{"class":220},[105,104071,78752],{"class":1954},[105,104073,161],{"class":115},[105,104075,103770],{"class":220},[105,104077,101129],{"class":115},[14,104079,104080,104081,104084],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[102,104082,104083],{},"site position"," 就会比 body position 的 z 坐标更高。",[47,104086,102333],{"id":102332},[59,104088,104089,104098,104101,104108,104114,104125],{},[62,104090,102396,104091,104093,104094,102399,104096,28370],{},[102,104092,102966],{}," 的初始高度从 ",[102,104095,333],{},[102,104097,193],{},[62,104099,104100],{},"重新运行程序。",[62,104102,104103,104104,104107],{},"观察 ",[102,104105,104106],{},"box qpos"," 和最终位置是否变化。",[62,104109,104110,104111,104113],{},"故意把 ",[102,104112,103195],{}," 名称改错，确认程序能报错。",[62,104115,102396,104116,104118,104119,102399,104121,104124],{},[102,104117,101105],{}," 的颜色 ",[102,104120,102017],{},[102,104122,104123],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[62,104126,102396,104127,82515,104129,102399,104132,104135,104136,104138],{},[102,104128,102962],{},[102,104130,104131],{},"pos",[102,104133,104134],{},"0 0 0.2","，观察 ",[102,104137,104083],{}," 如何变化。",[47,104140,102438],{"id":102437},[76,104142,104144],{"id":104143},"xml-error-schema-violation",[102,104145,104146],{},"XML Error: Schema violation",[14,104148,104149],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[76,104151,104153,81275,104155],{"id":104152},"mj_name2id-返回-1",[102,104154,103896],{},[102,104156,103900],{},[14,104158,104159,104160,104163],{},"说明名字没有找到。检查 XML 中 ",[102,104161,104162],{},"name=\"...\"","，并确认对象类型正确。",[76,104165,104166],{"id":104166},"物体不下落",[14,104168,102508],{},[59,104170,104171,104176,104181],{},[62,104172,104173,104174],{},"body 是否有 ",[102,104175,101605],{},[62,104177,104178,104179],{},"gravity 是否为 ",[102,104180,102574],{},[62,104182,104183,104184,104186],{},"body 是否被固定在 ",[102,104185,101826],{}," 中",[76,104188,104189],{"id":104189},"坐标看起来不符合预期",[14,104191,104192],{},"先区分两种坐标：",[253,104194,104195,104204],{},[256,104196,104197],{},[259,104198,104199,104202],{},[262,104200,104201],{"align":23729},"坐标",[262,104203,100685],{"align":23729},[300,104205,104206,104216],{},[259,104207,104208,104213],{},[305,104209,104210,104211],{"align":23729},"XML 里的 ",[102,104212,104131],{},[305,104214,104215],{"align":23729},"相对父 body 的局部坐标",[259,104217,104218,104224],{},[305,104219,104220,24963,104222],{"align":23729},[102,104221,101064],{},[102,104223,103977],{},[305,104225,104226],{"align":23729},"仿真更新后的世界坐标",[14,104228,104229,104230,104232,104233,82524,104236,104238],{},"如果你修改了 ",[102,104231,101055],{},"，但还没调用 ",[102,104234,104235],{},"mj_forward",[102,104237,101200],{},"，世界坐标可能还没有更新。",[47,104240,102592],{"id":102591},[14,104242,104243],{},"MJCF 建模先掌握四件事：",[59,104245,104246,104251,104256,104261],{},[62,104247,104248,104250],{},[102,104249,51785],{}," 表示刚体层级。",[62,104252,104253,104255],{},[102,104254,101105],{}," 表示形状、碰撞和质量。",[62,104257,104258,104260],{},[102,104259,102941],{}," 决定 body 能不能动、怎么动。",[62,104262,104263,104265],{},[102,104264,103195],{}," 用来标记关键点，方便 Python 读取位置。",[14,104267,104268],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5118,104270,104271],{},"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":28,"depth":28,"links":104273},[104274,104275,104276,104282,104286,104287,104288,104295],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":104277},[104278,104279,104280,104281],{"id":102945,"depth":1171,"text":102945},{"id":103059,"depth":1171,"text":103059},{"id":103085,"depth":1171,"text":103086},{"id":103189,"depth":1171,"text":103190},{"id":101237,"depth":28,"text":101238,"children":104283},[104284,104285],{"id":101557,"depth":1171,"text":101557},{"id":101693,"depth":1171,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":104289},[104290,104291,104293,104294],{"id":104143,"depth":1171,"text":104146},{"id":104152,"depth":1171,"text":104292},"mj_name2id 返回 -1",{"id":104166,"depth":1171,"text":104166},{"id":104189,"depth":1171,"text":104189},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102639,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104302,"title":104303,"body":104304,"description":22,"extension":30,"meta":105799,"navigation":32,"path":105800,"seo":105801,"stem":105802,"__hash__":105803},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104305,"toc":105771},[104306,104309,104311,104314,104317,104355,104358,104364,104367,104369,104371,104398,104400,104414,104416,104457,104459,104483,104485,104488,104497,104506,104509,104518,104526,104535,104538,104548,104551,104603,104610,104616,104624,104672,104675,104694,104697,104705,104709,104718,104751,104753,105101,105103,105115,105117,105128,105130,105133,105154,105160,105163,105188,105198,105201,105209,105212,105215,105236,105247,105249,105269,105272,105293,105302,105321,105327,105352,105355,105369,105376,105400,105403,105411,105420,105436,105448,105456,105465,105467,105470,105494,105499,105502,105524,105526,105565,105567,105574,105576,105584,105587,105590,105602,105643,105650,105661,105668,105671,105720,105723,105726,105732,105734,105739,105765,105768],[10,104307,104303],{"id":104308},"_3python-控制接口读取状态与推进仿真",[47,104310,100632],{"id":100631},[14,104312,104313],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104315,104316],{},"你将学习:",[59,104318,104319,104324,104329,104333,104338,104349],{},[62,104320,104321],{},[102,104322,104323],{},"MjModel.from_xml_string",[62,104325,104326],{},[102,104327,104328],{},"MjData(model)",[62,104330,104331],{},[102,104332,101200],{},[62,104334,104335],{},[102,104336,104337],{},"mj_resetData",[62,104339,104340,104341,328,104343,328,104346],{},"读取 ",[102,104342,104015],{},[102,104344,104345],{},"qvel",[102,104347,104348],{},"ctrl",[62,104350,104351,104352],{},"使用 ",[102,104353,104354],{},"model.opt.timestep",[14,104356,104357],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[96,104359,104362],{"className":104360,"code":104361,"language":5179,"meta":22},[5177],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[102,104363,104361],{"__ignoreMap":22},[14,104365,104366],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[47,104368,100755],{"id":100754},[14,104370,100758],{},[96,104372,104374],{"className":23815,"code":104373,"language":23817,"meta":22,"style":22},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[102,104375,104376],{"__ignoreMap":22},[105,104377,104378,104380,104382,104384,104386,104389,104391,104393,104395],{"class":107,"line":108},[105,104379,24561],{"class":1954},[105,104381,26300],{"class":220},[105,104383,23827],{"class":220},[105,104385,26385],{"class":164},[105,104387,104388],{"class":220}," python3",[105,104390,100783],{"class":220},[105,104392,102486],{"class":220},[105,104394,100799],{"class":220},[105,104396,104397],{"class":220}," glfw\n",[14,104399,102804],{},[96,104401,104402],{"className":23815,"code":100904,"language":23817,"meta":22,"style":22},[102,104403,104404],{"__ignoreMap":22},[105,104405,104406,104408,104410,104412],{"class":107,"line":108},[105,104407,23824],{"class":1954},[105,104409,23827],{"class":220},[105,104411,100915],{"class":220},[105,104413,100918],{"class":220},[14,104415,102821],{},[96,104417,104419],{"className":23815,"code":104418,"language":23817,"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",[102,104420,104421,104438,104447],{"__ignoreMap":22},[105,104422,104423,104425,104427,104429,104432,104434,104436],{"class":107,"line":108},[105,104424,30315],{"class":1954},[105,104426,29161],{"class":220},[105,104428,25100],{"class":164},[105,104430,104431],{"class":220}," mujoco-python-api",[105,104433,100960],{"class":220},[105,104435,100963],{"class":164},[105,104437,100966],{"class":164},[105,104439,104440,104442,104444],{"class":107,"line":28},[105,104441,30315],{"class":1954},[105,104443,100973],{"class":220},[105,104445,104446],{"class":220}," mujoco-python-api\n",[105,104448,104449,104451,104453,104455],{"class":107,"line":1171},[105,104450,23824],{"class":1954},[105,104452,23827],{"class":220},[105,104454,100915],{"class":220},[105,104456,100918],{"class":220},[14,104458,100989],{},[59,104460,104461,104468,104477],{},[62,104462,104463,101003,104465,104467],{},[102,104464,100660],{},[102,104466,100665],{}," 是官方 Python bindings 的类名。",[62,104469,104470,104471,104474,104475,28370],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[102,104472,104473],{},"mjModel"," 在 Python 中是 ",[102,104476,100694],{},[62,104478,104479,104480,28370],{},"不要使用 ",[102,104481,104482],{},"sim = mujoco_py.MjSim(...)",[47,104484,101030],{"id":101029},[14,104486,104487],{},"仿真推进核心代码:",[96,104489,104491],{"className":30363,"code":104490,"language":30365,"meta":22,"style":22},"mujoco.mj_step(model, data)\n",[102,104492,104493],{"__ignoreMap":22},[105,104494,104495],{"class":107,"line":108},[105,104496,104490],{"class":115},[14,104498,104499,104500,328,104502,328,104504,28370],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[102,104501,101055],{},[102,104503,101058],{},[102,104505,101052],{},[14,104507,104508],{},"重置仿真:",[96,104510,104512],{"className":30363,"code":104511,"language":30365,"meta":22,"style":22},"mujoco.mj_resetData(model, data)\n",[102,104513,104514],{"__ignoreMap":22},[105,104515,104516],{"class":107,"line":108},[105,104517,104511],{"class":115},[14,104519,104520,104521,82524,104523,104525],{},"如果手动修改了 ",[102,104522,101055],{},[102,104524,101058],{},"，通常应调用:",[96,104527,104529],{"className":30363,"code":104528,"language":30365,"meta":22,"style":22},"mujoco.mj_forward(model, data)\n",[102,104530,104531],{"__ignoreMap":22},[105,104532,104533],{"class":107,"line":108},[105,104534,104528],{"class":115},[14,104536,104537],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[76,104539,104541,328,104543,328,104545,104547],{"id":104540},"qposqvelctrl-是什么",[102,104542,104015],{},[102,104544,104345],{},[102,104546,104348],{}," 是什么",[14,104549,104550],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[253,104552,104553,104565],{},[256,104554,104555],{},[259,104556,104557,104560,104562],{},[262,104558,104559],{"align":23729},"字段",[262,104561,100685],{"align":23729},[262,104563,104564],{"align":23729},"谁来修改",[300,104566,104567,104579,104591],{},[259,104568,104569,104573,104576],{},[305,104570,104571],{"align":23729},[102,104572,101055],{},[305,104574,104575],{"align":23729},"广义位置，例如小车位置、关节角、自由物体位置姿态",[305,104577,104578],{"align":23729},"MuJoCo 更新，也可以手动设置初始状态",[259,104580,104581,104585,104588],{},[305,104582,104583],{"align":23729},[102,104584,101058],{},[305,104586,104587],{"align":23729},"广义速度，例如小车速度、关节角速度",[305,104589,104590],{"align":23729},"MuJoCo 更新，也可以手动清零",[259,104592,104593,104597,104600],{},[305,104594,104595],{"align":23729},[102,104596,101061],{},[305,104598,104599],{"align":23729},"actuator 的控制输入",[305,104601,104602],{"align":23729},"主要由你的控制代码写入",[14,104604,9017,104605,101003,104607,104609],{},[102,104606,104015],{},[102,104608,104345],{}," 不一定同维。自由刚体就是典型例子：",[96,104611,104614],{"className":104612,"code":104613,"language":5179,"meta":22},[5177],"freejoint: qpos 7 维，qvel 6 维\n",[102,104615,104613],{"__ignoreMap":22},[76,104617,104619,101003,104621,104623],{"id":104618},"mj_step-和-mj_forward-的区别",[102,104620,101200],{},[102,104622,104235],{}," 的区别",[253,104625,104626,104639],{},[256,104627,104628],{},[259,104629,104630,104633,104636],{},[262,104631,104632],{"align":23729},"函数",[262,104634,104635],{"align":23729},"是否推进时间",[262,104637,104638],{"align":23729},"什么时候用",[300,104640,104641,104654],{},[259,104642,104643,104648,104651],{},[305,104644,104645],{"align":23729},[102,104646,104647],{},"mj_step(model, data)",[305,104649,104650],{"align":23729},"是",[305,104652,104653],{"align":23729},"正常仿真循环，每调用一次前进一步",[259,104655,104656,104661,104664],{},[305,104657,104658],{"align":23729},[102,104659,104660],{},"mj_forward(model, data)",[305,104662,104663],{"align":23729},"否",[305,104665,104666,104667,328,104669,104671],{"align":23729},"手动改了 ",[102,104668,104015],{},[102,104670,104345],{}," 后，刷新派生量",[14,104673,104674],{},"例如你写：",[96,104676,104678],{"className":30363,"code":104677,"language":30365,"meta":22,"style":22},"data.qpos[2] = 2.0\n",[102,104679,104680],{"__ignoreMap":22},[105,104681,104682,104685,104687,104689,104691],{"class":107,"line":108},[105,104683,104684],{"class":115},"data.qpos[",[105,104686,193],{"class":164},[105,104688,4434],{"class":115},[105,104690,161],{"class":111},[105,104692,104693],{"class":164}," 2.0\n",[14,104695,104696],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[96,104698,104699],{"className":30363,"code":104528,"language":30365,"meta":22,"style":22},[102,104700,104701],{"__ignoreMap":22},[105,104702,104703],{"class":107,"line":108},[105,104704,104528],{"class":115},[76,104706,104708],{"id":104707},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104710,104711,104714,104715,104717],{},[102,104712,104713],{},"mujoco.mj_resetData(model, data)"," 会把 ",[102,104716,33386],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[96,104719,104721],{"className":30363,"code":104720,"language":30365,"meta":22,"style":22},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[102,104722,104723,104727,104737,104747],{"__ignoreMap":22},[105,104724,104725],{"class":107,"line":108},[105,104726,104511],{"class":115},[105,104728,104729,104732,104734],{"class":107,"line":28},[105,104730,104731],{"class":115},"data.qpos[:] ",[105,104733,161],{"class":111},[105,104735,104736],{"class":115}," random_qpos\n",[105,104738,104739,104742,104744],{"class":107,"line":1171},[105,104740,104741],{"class":115},"data.qvel[:] ",[105,104743,161],{"class":111},[105,104745,104746],{"class":164}," 0.0\n",[105,104748,104749],{"class":107,"line":1186},[105,104750,104528],{"class":115},[47,104752,101238],{"id":101237},[96,104754,104756],{"className":30363,"code":104755,"language":30365,"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",[102,104757,104758,104764,104774,104778,104782,104790,104795,104799,104803,104807,104812,104816,104821,104826,104831,104835,104839,104843,104847,104851,104855,104874,104881,104893,104904,104920,104936,104940,104944,104956,104968,104976,104980,104991,104995,105011,105015,105019,105028,105032,105037,105046,105050,105063,105068,105077,105081,105085,105097],{"__ignoreMap":22},[105,104759,104760,104762],{"class":107,"line":108},[105,104761,30377],{"class":111},[105,104763,101286],{"class":115},[105,104765,104766,104768,104770,104772],{"class":107,"line":28},[105,104767,30377],{"class":111},[105,104769,31365],{"class":115},[105,104771,31368],{"class":111},[105,104773,31371],{"class":115},[105,104775,104776],{"class":107,"line":1171},[105,104777,2391],{"emptyLinePlaceholder":32},[105,104779,104780],{"class":107,"line":1186},[105,104781,2391],{"emptyLinePlaceholder":32},[105,104783,104784,104786,104788],{"class":107,"line":1192},[105,104785,101299],{"class":164},[105,104787,13556],{"class":111},[105,104789,101304],{"class":220},[105,104791,104792],{"class":107,"line":1206},[105,104793,104794],{"class":220},"\u003Cmujoco model=\"state_api\">\n",[105,104796,104797],{"class":107,"line":1212},[105,104798,101314],{"class":220},[105,104800,104801],{"class":107,"line":1303},[105,104802,2391],{"emptyLinePlaceholder":32},[105,104804,104805],{"class":107,"line":1309},[105,104806,101323],{"class":220},[105,104808,104809],{"class":107,"line":1321},[105,104810,104811],{"class":220},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[105,104813,104814],{"class":107,"line":1603},[105,104815,2391],{"emptyLinePlaceholder":32},[105,104817,104818],{"class":107,"line":1608},[105,104819,104820],{"class":220},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[105,104822,104823],{"class":107,"line":1614},[105,104824,104825],{"class":220},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[105,104827,104828],{"class":107,"line":1619},[105,104829,104830],{"class":220},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[105,104832,104833],{"class":107,"line":1633},[105,104834,101352],{"class":220},[105,104836,104837],{"class":107,"line":1638},[105,104838,101357],{"class":220},[105,104840,104841],{"class":107,"line":1644},[105,104842,101362],{"class":220},[105,104844,104845],{"class":107,"line":1665},[105,104846,95683],{"class":220},[105,104848,104849],{"class":107,"line":1670},[105,104850,2391],{"emptyLinePlaceholder":32},[105,104852,104853],{"class":107,"line":1684},[105,104854,2391],{"emptyLinePlaceholder":32},[105,104856,104857,104859,104862,104865,104867,104870,104872],{"class":107,"line":1689},[105,104858,31932],{"class":111},[105,104860,104861],{"class":1954}," print_state",[105,104863,104864],{"class":115},"(prefix: ",[105,104866,1291],{"class":164},[105,104868,104869],{"class":115},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[105,104871,95671],{"class":164},[105,104873,3730],{"class":115},[105,104875,104876,104878],{"class":107,"line":1718},[105,104877,31284],{"class":164},[105,104879,104880],{"class":115},"(prefix)\n",[105,104882,104883,104885,104887,104890],{"class":107,"line":1723},[105,104884,31284],{"class":164},[105,104886,116],{"class":115},[105,104888,104889],{"class":220},"\"  timestep:\"",[105,104891,104892],{"class":115},", model.opt.timestep)\n",[105,104894,104895,104897,104899,104902],{"class":107,"line":1740},[105,104896,31284],{"class":164},[105,104898,116],{"class":115},[105,104900,104901],{"class":220},"\"  time:\"",[105,104903,101463],{"class":115},[105,104905,104906,104908,104910,104913,104916,104918],{"class":107,"line":1745},[105,104907,31284],{"class":164},[105,104909,116],{"class":115},[105,104911,104912],{"class":220},"\"  qpos:\"",[105,104914,104915],{"class":115},", np.round(data.qpos.copy(), ",[105,104917,409],{"class":164},[105,104919,30482],{"class":115},[105,104921,104922,104924,104926,104929,104932,104934],{"class":107,"line":1750},[105,104923,31284],{"class":164},[105,104925,116],{"class":115},[105,104927,104928],{"class":220},"\"  qvel:\"",[105,104930,104931],{"class":115},", np.round(data.qvel.copy(), ",[105,104933,409],{"class":164},[105,104935,30482],{"class":115},[105,104937,104938],{"class":107,"line":1755},[105,104939,2391],{"emptyLinePlaceholder":32},[105,104941,104942],{"class":107,"line":1769},[105,104943,2391],{"emptyLinePlaceholder":32},[105,104945,104946,104948,104950,104952,104954],{"class":107,"line":1774},[105,104947,31932],{"class":111},[105,104949,1964],{"class":1954},[105,104951,101383],{"class":115},[105,104953,95671],{"class":164},[105,104955,3730],{"class":115},[105,104957,104958,104960,104962,104964,104966],{"class":107,"line":2568},[105,104959,101392],{"class":115},[105,104961,161],{"class":111},[105,104963,101397],{"class":115},[105,104965,101299],{"class":164},[105,104967,122],{"class":115},[105,104969,104970,104972,104974],{"class":107,"line":2582},[105,104971,101406],{"class":115},[105,104973,161],{"class":111},[105,104975,101411],{"class":115},[105,104977,104978],{"class":107,"line":2590},[105,104979,2391],{"emptyLinePlaceholder":32},[105,104981,104982,104985,104988],{"class":107,"line":2595},[105,104983,104984],{"class":115},"    print_state(",[105,104986,104987],{"class":220},"\"initial\"",[105,104989,104990],{"class":115},", model, data)\n",[105,104992,104993],{"class":107,"line":2601},[105,104994,2391],{"emptyLinePlaceholder":32},[105,104996,104997,104999,105001,105003,105005,105007,105009],{"class":107,"line":2607},[105,104998,3192],{"class":111},[105,105000,101486],{"class":115},[105,105002,26028],{"class":111},[105,105004,32428],{"class":164},[105,105006,116],{"class":115},[105,105008,772],{"class":164},[105,105010,30771],{"class":115},[105,105012,105013],{"class":107,"line":2612},[105,105014,101501],{"class":115},[105,105016,105017],{"class":107,"line":7940},[105,105018,2391],{"emptyLinePlaceholder":32},[105,105020,105021,105023,105026],{"class":107,"line":7964},[105,105022,104984],{"class":115},[105,105024,105025],{"class":220},"\"after 50 steps\"",[105,105027,104990],{"class":115},[105,105029,105030],{"class":107,"line":7969},[105,105031,2391],{"emptyLinePlaceholder":32},[105,105033,105034],{"class":107,"line":7975},[105,105035,105036],{"class":115},"    mujoco.mj_resetData(model, data)\n",[105,105038,105039,105041,105044],{"class":107,"line":8002},[105,105040,104984],{"class":115},[105,105042,105043],{"class":220},"\"after reset\"",[105,105045,104990],{"class":115},[105,105047,105048],{"class":107,"line":8007},[105,105049,2391],{"emptyLinePlaceholder":32},[105,105051,105052,105055,105057,105059,105061],{"class":107,"line":8013},[105,105053,105054],{"class":115},"    data.qpos[",[105,105056,193],{"class":164},[105,105058,4434],{"class":115},[105,105060,161],{"class":111},[105,105062,104693],{"class":164},[105,105064,105065],{"class":107,"line":8025},[105,105066,105067],{"class":115},"    mujoco.mj_forward(model, data)\n",[105,105069,105070,105072,105075],{"class":107,"line":8037},[105,105071,104984],{"class":115},[105,105073,105074],{"class":220},"\"after manual qpos edit\"",[105,105076,104990],{"class":115},[105,105078,105079],{"class":107,"line":8049},[105,105080,2391],{"emptyLinePlaceholder":32},[105,105082,105083],{"class":107,"line":9708},[105,105084,2391],{"emptyLinePlaceholder":32},[105,105086,105087,105089,105091,105093,105095],{"class":107,"line":9733},[105,105088,1522],{"class":111},[105,105090,31205],{"class":164},[105,105092,101544],{"class":111},[105,105094,101547],{"class":220},[105,105096,3730],{"class":115},[105,105098,105099],{"class":107,"line":9756},[105,105100,101554],{"class":115},[14,105102,103555],{},[96,105104,105106],{"className":23815,"code":105105,"language":23817,"meta":22,"style":22},"touch ch3_python_state.py\n",[102,105107,105108],{"__ignoreMap":22},[105,105109,105110,105112],{"class":107,"line":108},[105,105111,101268],{"class":1954},[105,105113,105114],{"class":220}," ch3_python_state.py\n",[14,105116,102286],{},[96,105118,105120],{"className":23815,"code":105119,"language":23817,"meta":22,"style":22},"python ch3_python_state.py\n",[102,105121,105122],{"__ignoreMap":22},[105,105123,105124,105126],{"class":107,"line":108},[105,105125,30365],{"class":1954},[105,105127,105114],{"class":220},[76,105129,101557],{"id":101557},[14,105131,105132],{},"打印状态的函数：",[96,105134,105136],{"className":30363,"code":105135,"language":30365,"meta":22,"style":22},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[102,105137,105138],{"__ignoreMap":22},[105,105139,105140,105142,105144,105146,105148,105150,105152],{"class":107,"line":108},[105,105141,31932],{"class":111},[105,105143,104861],{"class":1954},[105,105145,104864],{"class":115},[105,105147,1291],{"class":164},[105,105149,104869],{"class":115},[105,105151,95671],{"class":164},[105,105153,3730],{"class":115},[14,105155,105156,105157,105159],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[102,105158,33386],{}," 里发生了什么。",[14,105161,105162],{},"推进 50 步：",[96,105164,105166],{"className":30363,"code":105165,"language":30365,"meta":22,"style":22},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[102,105167,105168,105184],{"__ignoreMap":22},[105,105169,105170,105172,105174,105176,105178,105180,105182],{"class":107,"line":108},[105,105171,3016],{"class":111},[105,105173,101486],{"class":115},[105,105175,26028],{"class":111},[105,105177,32428],{"class":164},[105,105179,116],{"class":115},[105,105181,772],{"class":164},[105,105183,30771],{"class":115},[105,105185,105186],{"class":107,"line":28},[105,105187,101684],{"class":115},[14,105189,105190,105191,105194,105195,105197],{},"由于 ",[102,105192,105193],{},"timestep=0.01","，所以 50 步后时间约为 ",[102,105196,35314],{}," 秒。",[14,105199,105200],{},"重置：",[96,105202,105203],{"className":30363,"code":104511,"language":30365,"meta":22,"style":22},[102,105204,105205],{"__ignoreMap":22},[105,105206,105207],{"class":107,"line":108},[105,105208,104511],{"class":115},[14,105210,105211],{},"这会把时间、位置、速度恢复到初始状态。",[14,105213,105214],{},"手动改高度：",[96,105216,105218],{"className":30363,"code":105217,"language":30365,"meta":22,"style":22},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[102,105219,105220,105232],{"__ignoreMap":22},[105,105221,105222,105224,105226,105228,105230],{"class":107,"line":108},[105,105223,104684],{"class":115},[105,105225,193],{"class":164},[105,105227,4434],{"class":115},[105,105229,161],{"class":111},[105,105231,104693],{"class":164},[105,105233,105234],{"class":107,"line":28},[105,105235,104528],{"class":115},[14,105237,105238,105239,105242,105243,105246],{},"这个例子里 ",[102,105240,105241],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[102,105244,105245],{},"2.0"," 表示把小球放到更高的位置。",[76,105248,101693],{"id":101693},[96,105250,105251],{"className":30363,"code":105135,"language":30365,"meta":22,"style":22},[102,105252,105253],{"__ignoreMap":22},[105,105254,105255,105257,105259,105261,105263,105265,105267],{"class":107,"line":108},[105,105256,31932],{"class":111},[105,105258,104861],{"class":1954},[105,105260,104864],{"class":115},[105,105262,1291],{"class":164},[105,105264,104869],{"class":115},[105,105266,95671],{"class":164},[105,105268,3730],{"class":115},[14,105270,105271],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[59,105273,105274,105283,105288],{},[62,105275,105276,105279,105280,105282],{},[102,105277,105278],{},"prefix","：一段文字，比如 ",[102,105281,104987],{},"，用来说明现在打印的是哪个阶段。",[62,105284,105285,105287],{},[102,105286,102070],{},"：MuJoCo 模型。",[62,105289,105290,105292],{},[102,105291,33386],{},"：MuJoCo 当前状态。",[14,105294,105295,328,105298,105301],{},[102,105296,105297],{},"prefix: str",[102,105299,105300],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[96,105303,105305],{"className":30363,"code":105304,"language":30365,"meta":22,"style":22},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[102,105306,105307],{"__ignoreMap":22},[105,105308,105309,105311,105313,105315,105317,105319],{"class":107,"line":108},[105,105310,30400],{"class":164},[105,105312,116],{"class":115},[105,105314,104912],{"class":220},[105,105316,104915],{"class":115},[105,105318,409],{"class":164},[105,105320,30482],{"class":115},[14,105322,105323,105326],{},[102,105324,105325],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[96,105328,105330],{"className":30363,"code":105329,"language":30365,"meta":22,"style":22},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[102,105331,105332,105344],{"__ignoreMap":22},[105,105333,105334,105336,105338,105340,105342],{"class":107,"line":108},[105,105335,101619],{"class":115},[105,105337,161],{"class":111},[105,105339,101397],{"class":115},[105,105341,101299],{"class":164},[105,105343,122],{"class":115},[105,105345,105346,105348,105350],{"class":107,"line":28},[105,105347,101643],{"class":115},[105,105349,161],{"class":111},[105,105351,101411],{"class":115},[14,105353,105354],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[96,105356,105358],{"className":30363,"code":105357,"language":30365,"meta":22,"style":22},"print_state(\"initial\", model, data)\n",[102,105359,105360],{"__ignoreMap":22},[105,105361,105362,105365,105367],{"class":107,"line":108},[105,105363,105364],{"class":115},"print_state(",[105,105366,104987],{"class":220},[105,105368,104990],{"class":115},[14,105370,105371,105372,105375],{},"调用刚才定义的 ",[102,105373,105374],{},"print_state"," 函数，打印初始状态。",[96,105377,105378],{"className":30363,"code":105165,"language":30365,"meta":22,"style":22},[102,105379,105380,105396],{"__ignoreMap":22},[105,105381,105382,105384,105386,105388,105390,105392,105394],{"class":107,"line":108},[105,105383,3016],{"class":111},[105,105385,101486],{"class":115},[105,105387,26028],{"class":111},[105,105389,32428],{"class":164},[105,105391,116],{"class":115},[105,105393,772],{"class":164},[105,105395,30771],{"class":115},[105,105397,105398],{"class":107,"line":28},[105,105399,101684],{"class":115},[14,105401,105402],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[96,105404,105405],{"className":30363,"code":104511,"language":30365,"meta":22,"style":22},[102,105406,105407],{"__ignoreMap":22},[105,105408,105409],{"class":107,"line":108},[105,105410,104511],{"class":115},[14,105412,105413,105414,105416,105417,105419],{},"重置 ",[102,105415,33386],{},"。注意它不会重新创建 ",[102,105418,102070],{},"，因为模型结构没有变，只是状态回到初始值。",[96,105421,105422],{"className":30363,"code":104677,"language":30365,"meta":22,"style":22},[102,105423,105424],{"__ignoreMap":22},[105,105425,105426,105428,105430,105432,105434],{"class":107,"line":108},[105,105427,104684],{"class":115},[105,105429,193],{"class":164},[105,105431,4434],{"class":115},[105,105433,161],{"class":111},[105,105435,104693],{"class":164},[14,105437,105438,105439,328,105442,328,105445,105447],{},"这行是“手动改状态”。在 freejoint 中，",[102,105440,105441],{},"qpos[0]",[102,105443,105444],{},"qpos[1]",[102,105446,105241],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[96,105449,105450],{"className":30363,"code":104528,"language":30365,"meta":22,"style":22},[102,105451,105452],{"__ignoreMap":22},[105,105453,105454],{"class":107,"line":108},[105,105455,104528],{"class":115},[14,105457,105458,105459,105461,105462,105464],{},"手动改完 ",[102,105460,104015],{}," 后，调用 ",[102,105463,104235],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[47,105466,102301],{"id":102300},[14,105468,105469],{},"你会看到:",[59,105471,105472,105477,105482,105485],{},[62,105473,105474,105475],{},"初始时间为 ",[102,105476,307],{},[62,105478,105479,105480],{},"50 步后时间约为 ",[102,105481,35314],{},[62,105483,105484],{},"reset 后状态恢复",[62,105486,105487,105488,105491,105492],{},"手动修改 ",[102,105489,105490],{},"data.qpos[2]"," 后，小球高度变为 ",[102,105493,105245],{},[14,105495,105496,105498],{},[102,105497,105241],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105500,105501],{},"输出里可以重点看三件事：",[59,105503,105504,105512,105517],{},[62,105505,105506,105508,105509,105511],{},[102,105507,2378],{}," 是否随着 ",[102,105510,101200],{}," 增加。",[62,105513,105514,105516],{},[102,105515,104015],{}," 的 z 坐标是否因为下落而变化。",[62,105518,105519,105521,105522,28370],{},[102,105520,104337],{}," 后时间是否回到 ",[102,105523,307],{},[47,105525,102333],{"id":102332},[59,105527,105528,105534,105540,105546,105549,105558],{},[62,105529,105530,105531,28370],{},"修改 timestep 为 ",[102,105532,105533],{},"0.005",[62,105535,105536,105537,28370],{},"重新运行，检查 50 步后时间是否约为 ",[102,105538,105539],{},"0.25",[62,105541,105542,105543,28370],{},"修改重力为 ",[102,105544,105545],{},"0 0 -1.0",[62,105547,105548],{},"观察小球下降速度是否变慢。",[62,105550,102396,105551,102399,105554,105557],{},[102,105552,105553],{},"data.qpos[2] = 2.0",[102,105555,105556],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[62,105559,105560,105561,105564],{},"注释掉 ",[102,105562,105563],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[47,105566,102438],{"id":102437},[76,105568,105570,105571,105573],{"id":105569},"修改-dataqpos-后位置没有更新","修改 ",[102,105572,101055],{}," 后位置没有更新",[14,105575,102447],{},[96,105577,105578],{"className":30363,"code":104528,"language":30365,"meta":22,"style":22},[102,105579,105580],{"__ignoreMap":22},[105,105581,105582],{"class":107,"line":108},[105,105583,104528],{"class":115},[76,105585,105586],{"id":105586},"数组维度看不懂",[14,105588,105589],{},"打印模型维度:",[96,105591,105593],{"className":30363,"code":105592,"language":30365,"meta":22,"style":22},"print(model.nq, model.nv, model.nu)\n",[102,105594,105595],{"__ignoreMap":22},[105,105596,105597,105599],{"class":107,"line":108},[105,105598,30400],{"class":164},[105,105600,105601],{"class":115},"(model.nq, model.nv, model.nu)\n",[253,105603,105604,105612],{},[256,105605,105606],{},[259,105607,105608,105610],{},[262,105609,104559],{"align":23729},[262,105611,100685],{"align":23729},[300,105613,105614,105624,105634],{},[259,105615,105616,105621],{},[305,105617,105618],{"align":23729},[102,105619,105620],{},"nq",[305,105622,105623],{"align":23729},"位置变量数量",[259,105625,105626,105631],{},[305,105627,105628],{"align":23729},[102,105629,105630],{},"nv",[305,105632,105633],{"align":23729},"速度变量数量",[259,105635,105636,105640],{},[305,105637,105638],{"align":23729},[102,105639,102147],{},[305,105641,105642],{"align":23729},"控制输入数量",[76,105644,105646,105647,105649],{"id":105645},"误以为-qpos-一定等于关节数","误以为 ",[102,105648,104015],{}," 一定等于关节数",[14,105651,105652,105653,82515,105655,105657,105658,105660],{},"不是。例如 ",[102,105654,101605],{},[102,105656,104015],{}," 是 7 维，但 ",[102,105659,104345],{}," 是 6 维。",[76,105662,105664,105665,105667],{"id":105663},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[102,105666,104015],{}," 的第几位",[14,105669,105670],{},"初学时可以先打印：",[96,105672,105674],{"className":30363,"code":105673,"language":30365,"meta":22,"style":22},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[102,105675,105676,105686,105696,105708],{"__ignoreMap":22},[105,105677,105678,105680,105682,105684],{"class":107,"line":108},[105,105679,30400],{"class":164},[105,105681,116],{"class":115},[105,105683,101424],{"class":220},[105,105685,101427],{"class":115},[105,105687,105688,105690,105692,105694],{"class":107,"line":28},[105,105689,30400],{"class":164},[105,105691,116],{"class":115},[105,105693,101436],{"class":220},[105,105695,101439],{"class":115},[105,105697,105698,105700,105702,105705],{"class":107,"line":1171},[105,105699,30400],{"class":164},[105,105701,116],{"class":115},[105,105703,105704],{"class":220},"\"qpos:\"",[105,105706,105707],{"class":115},", data.qpos)\n",[105,105709,105710,105712,105714,105717],{"class":107,"line":1186},[105,105711,30400],{"class":164},[105,105713,116],{"class":115},[105,105715,105716],{"class":220},"\"qvel:\"",[105,105718,105719],{"class":115},", data.qvel)\n",[14,105721,105722],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[76,105724,105725],{"id":105725},"仿真结果每次都一样",[14,105727,105728,105729,105731],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[102,105730,104015],{},"、目标点或控制输入。",[47,105733,102592],{"id":102591},[14,105735,105736,105737,24603],{},"Python 控制 MuJoCo 的核心就是读写 ",[102,105738,33386],{},[59,105740,105741,105749,105754,105759],{},[62,105742,105743,105744,101003,105746,105748],{},"用 ",[102,105745,101055],{},[102,105747,101058],{}," 读取状态。",[62,105750,105743,105751,105753],{},[102,105752,101061],{}," 写入控制。",[62,105755,105743,105756,105758],{},[102,105757,101200],{}," 推进时间。",[62,105760,105761,105762,105764],{},"手动改状态后用 ",[102,105763,104235],{}," 刷新派生量。",[14,105766,105767],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5118,105769,105770],{},"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":28,"depth":28,"links":105772},[105773,105774,105775,105782,105786,105787,105788,105798],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":105776},[105777,105779,105781],{"id":104540,"depth":1171,"text":105778},"qpos、qvel、ctrl 是什么",{"id":104618,"depth":1171,"text":105780},"mj_step 和 mj_forward 的区别",{"id":104707,"depth":1171,"text":104708},{"id":101237,"depth":28,"text":101238,"children":105783},[105784,105785],{"id":101557,"depth":1171,"text":101557},{"id":101693,"depth":1171,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":105789},[105790,105792,105793,105795,105797],{"id":105569,"depth":1171,"text":105791},"修改 data.qpos 后位置没有更新",{"id":105586,"depth":1171,"text":105586},{"id":105645,"depth":1171,"text":105794},"误以为 qpos 一定等于关节数",{"id":105663,"depth":1171,"text":105796},"不知道某个元素在 qpos 的第几位",{"id":105725,"depth":1171,"text":105725},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104303,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105805,"title":105806,"body":105807,"description":22,"extension":30,"meta":107497,"navigation":32,"path":107498,"seo":107499,"stem":107500,"__hash__":107501},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105808,"toc":107473},[105809,105812,105814,105817,105819,105844,105847,105866,105869,105871,105873,105897,105899,105913,105915,105956,105958,105982,105984,105987,106021,106023,106036,106039,106107,106116,106120,106123,106157,106163,106166,106170,106209,106212,106232,106236,106279,106281,106310,106313,106319,106322,106324,106718,106720,106732,106734,106745,106747,106750,106779,106787,106790,106825,106828,106830,106838,106841,106843,106854,106864,106884,106887,106923,106935,106983,107002,107044,107057,107085,107090,107111,107121,107139,107142,107176,107179,107199,107202,107221,107227,107229,107232,107238,107244,107254,107257,107263,107272,107274,107320,107322,107328,107334,107337,107340,107360,107363,107369,107375,107377,107400,107403,107406,107415,107418,107456,107458,107461,107467,107470],[10,105810,105806],{"id":105811},"_4关节actuator-与力控制",[47,105813,100632],{"id":100631},[14,105815,105816],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105818,104316],{},[59,105820,105821,105827,105832,105836,105841],{},[62,105822,105823,105826],{},[102,105824,105825],{},"hinge"," 关节",[62,105828,105829],{},[102,105830,105831],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[62,105833,105834],{},[102,105835,101061],{},[62,105837,105838],{},[102,105839,105840],{},"ctrlrange",[62,105842,105843],{},"读取关节角和角速度",[14,105845,105846],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[96,105848,105850],{"className":30363,"code":105849,"language":30365,"meta":22,"style":22},"data.ctrl[0] = ...\n",[102,105851,105852],{"__ignoreMap":22},[105,105853,105854,105857,105859,105861,105863],{"class":107,"line":108},[105,105855,105856],{"class":115},"data.ctrl[",[105,105858,307],{"class":164},[105,105860,4434],{"class":115},[105,105862,161],{"class":111},[105,105864,105865],{"class":164}," ...\n",[14,105867,105868],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[47,105870,100755],{"id":100754},[14,105872,100758],{},[96,105874,105875],{"className":23815,"code":104373,"language":23817,"meta":22,"style":22},[102,105876,105877],{"__ignoreMap":22},[105,105878,105879,105881,105883,105885,105887,105889,105891,105893,105895],{"class":107,"line":108},[105,105880,24561],{"class":1954},[105,105882,26300],{"class":220},[105,105884,23827],{"class":220},[105,105886,26385],{"class":164},[105,105888,104388],{"class":220},[105,105890,100783],{"class":220},[105,105892,102486],{"class":220},[105,105894,100799],{"class":220},[105,105896,104397],{"class":220},[14,105898,102804],{},[96,105900,105901],{"className":23815,"code":100904,"language":23817,"meta":22,"style":22},[102,105902,105903],{"__ignoreMap":22},[105,105904,105905,105907,105909,105911],{"class":107,"line":108},[105,105906,23824],{"class":1954},[105,105908,23827],{"class":220},[105,105910,100915],{"class":220},[105,105912,100918],{"class":220},[14,105914,102821],{},[96,105916,105918],{"className":23815,"code":105917,"language":23817,"meta":22,"style":22},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[102,105919,105920,105937,105946],{"__ignoreMap":22},[105,105921,105922,105924,105926,105928,105931,105933,105935],{"class":107,"line":108},[105,105923,30315],{"class":1954},[105,105925,29161],{"class":220},[105,105927,25100],{"class":164},[105,105929,105930],{"class":220}," mujoco-control",[105,105932,100960],{"class":220},[105,105934,100963],{"class":164},[105,105936,100966],{"class":164},[105,105938,105939,105941,105943],{"class":107,"line":28},[105,105940,30315],{"class":1954},[105,105942,100973],{"class":220},[105,105944,105945],{"class":220}," mujoco-control\n",[105,105947,105948,105950,105952,105954],{"class":107,"line":1171},[105,105949,23824],{"class":1954},[105,105951,23827],{"class":220},[105,105953,100915],{"class":220},[105,105955,100918],{"class":220},[14,105957,100989],{},[59,105959,105960,105966,105973,105979],{},[62,105961,105962,105965],{},[102,105963,105964],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[62,105967,105968,105970,105971,28370],{},[102,105969,101061],{}," 长度等于 ",[102,105972,102143],{},[62,105974,82207,105975,105978],{},[102,105976,105977],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[62,105980,105981],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[47,105983,101030],{"id":101029},[14,105985,105986],{},"关节决定 body 如何运动:",[96,105988,105990],{"className":53052,"code":105989,"language":53054,"meta":22,"style":22},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[102,105991,105992],{"__ignoreMap":22},[105,105993,105994,105996,105998,106000,106002,106005,106007,106009,106011,106014,106016,106019],{"class":107,"line":108},[105,105995,1026],{"class":115},[105,105997,102941],{"class":51285},[105,105999,14912],{"class":1954},[105,106001,161],{"class":115},[105,106003,106004],{"class":220},"\"hinge\"",[105,106006,53809],{"class":1954},[105,106008,161],{"class":115},[105,106010,106004],{"class":220},[105,106012,106013],{"class":1954}," axis",[105,106015,161],{"class":115},[105,106017,106018],{"class":220},"\"0 1 0\"",[105,106020,101129],{"class":115},[14,106022,103037],{},[59,106024,106025,106030,106033],{},[62,106026,106027,106028],{},"名字是 ",[102,106029,105825],{},[62,106031,106032],{},"类型是旋转关节",[62,106034,106035],{},"绕 y 轴旋转",[14,106037,106038],{},"actuator 决定如何施加控制:",[96,106040,106042],{"className":53052,"code":106041,"language":53054,"meta":22,"style":22},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[102,106043,106044,106053,106099],{"__ignoreMap":22},[105,106045,106046,106048,106051],{"class":107,"line":108},[105,106047,1026],{"class":115},[105,106049,106050],{"class":51285},"actuator",[105,106052,51292],{"class":115},[105,106054,106055,106057,106060,106062,106064,106067,106070,106072,106074,106077,106079,106081,106084,106086,106089,106092,106094,106097],{"class":107,"line":28},[105,106056,52129],{"class":115},[105,106058,106059],{"class":51285},"motor",[105,106061,14912],{"class":1954},[105,106063,161],{"class":115},[105,106065,106066],{"class":220},"\"hinge_motor\"",[105,106068,106069],{"class":1954}," joint",[105,106071,161],{"class":115},[105,106073,106004],{"class":220},[105,106075,106076],{"class":1954}," gear",[105,106078,161],{"class":115},[105,106080,3669],{"class":220},[105,106082,106083],{"class":1954}," ctrlrange",[105,106085,161],{"class":115},[105,106087,106088],{"class":220},"\"-2 2\"",[105,106090,106091],{"class":1954}," ctrllimited",[105,106093,161],{"class":115},[105,106095,106096],{"class":220},"\"true\"",[105,106098,101129],{"class":115},[105,106100,106101,106103,106105],{"class":107,"line":1171},[105,106102,51770],{"class":115},[105,106104,106050],{"class":51285},[105,106106,51292],{"class":115},[14,106108,106109,106112,106113,28370],{},[102,106110,106111],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[102,106114,106115],{},"[-2, 2]",[76,106117,106119],{"id":106118},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106121,106122],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[253,106124,106125,106135],{},[256,106126,106127],{},[259,106128,106129,106131,106133],{},[262,106130,25738],{"align":23729},[262,106132,102681],{"align":23729},[262,106134,100719],{"align":23729},[300,106136,106137,106147],{},[259,106138,106139,106141,106144],{},[305,106140,102941],{"align":23729},[305,106142,106143],{"align":23729},"定义能怎么动",[305,106145,106146],{"align":23729},"门轴允许门旋转",[259,106148,106149,106151,106154],{},[305,106150,106050],{"align":23729},[305,106152,106153],{"align":23729},"定义怎么施力或控制",[305,106155,106156],{"align":23729},"人推门、马达带动门",[14,106158,106159,106160,106162],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[102,106161,101061],{}," 主动控制它。",[14,106164,106165],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[76,106167,106169],{"id":106168},"hinge-joint","hinge joint",[96,106171,106173],{"className":53052,"code":106172,"language":53054,"meta":22,"style":22},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[102,106174,106175],{"__ignoreMap":22},[105,106176,106177,106179,106181,106183,106185,106187,106189,106191,106193,106195,106197,106199,106202,106204,106207],{"class":107,"line":108},[105,106178,1026],{"class":115},[105,106180,102941],{"class":51285},[105,106182,14912],{"class":1954},[105,106184,161],{"class":115},[105,106186,106004],{"class":220},[105,106188,53809],{"class":1954},[105,106190,161],{"class":115},[105,106192,106004],{"class":220},[105,106194,106013],{"class":1954},[105,106196,161],{"class":115},[105,106198,106018],{"class":220},[105,106200,106201],{"class":1954}," damping",[105,106203,161],{"class":115},[105,106205,106206],{"class":220},"\"0.1\"",[105,106208,101129],{"class":115},[14,106210,106211],{},"含义：",[59,106213,106214,106220,106226],{},[62,106215,106216,106219],{},[102,106217,106218],{},"type=\"hinge\"","：只能绕一个轴旋转。",[62,106221,106222,106225],{},[102,106223,106224],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[62,106227,106228,106231],{},[102,106229,106230],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[76,106233,106235],{"id":106234},"motor-actuator","motor actuator",[96,106237,106239],{"className":53052,"code":106238,"language":53054,"meta":22,"style":22},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[102,106240,106241],{"__ignoreMap":22},[105,106242,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261,106263,106265,106267,106269,106271,106273,106275,106277],{"class":107,"line":108},[105,106244,1026],{"class":115},[105,106246,106059],{"class":51285},[105,106248,14912],{"class":1954},[105,106250,161],{"class":115},[105,106252,106066],{"class":220},[105,106254,106069],{"class":1954},[105,106256,161],{"class":115},[105,106258,106004],{"class":220},[105,106260,106076],{"class":1954},[105,106262,161],{"class":115},[105,106264,3669],{"class":220},[105,106266,106083],{"class":1954},[105,106268,161],{"class":115},[105,106270,106088],{"class":220},[105,106272,106091],{"class":1954},[105,106274,161],{"class":115},[105,106276,106096],{"class":220},[105,106278,101129],{"class":115},[14,106280,106211],{},[59,106282,106283,106292,106298,106304],{},[62,106284,106285,106288,106289,106291],{},[102,106286,106287],{},"joint=\"hinge\"","：这个电机作用在名为 ",[102,106290,105825],{}," 的关节上。",[62,106293,106294,106297],{},[102,106295,106296],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[62,106299,106300,106303],{},[102,106301,106302],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[62,106305,106306,106309],{},[102,106307,106308],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106311,106312],{},"简单理解：",[96,106314,106317],{"className":106315,"code":106316,"language":5179,"meta":22},[5177],"实际施加效果 ≈ data.ctrl[0] * gear\n",[102,106318,106316],{"__ignoreMap":22},[14,106320,106321],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[47,106323,101238],{"id":101237},[96,106325,106327],{"className":30363,"code":106326,"language":30365,"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",[102,106328,106329,106336,106340,106346,106356,106360,106364,106372,106377,106382,106386,106390,106395,106400,106404,106409,106414,106419,106424,106428,106432,106436,106441,106446,106451,106455,106459,106463,106467,106479,106491,106499,106503,106513,106523,106533,106537,106550,106563,106567,106584,106598,106633,106637,106641,106652,106667,106682,106694,106698,106702,106714],{"__ignoreMap":22},[105,106330,106331,106333],{"class":107,"line":108},[105,106332,30377],{"class":111},[105,106334,106335],{"class":115}," math\n",[105,106337,106338],{"class":107,"line":28},[105,106339,2391],{"emptyLinePlaceholder":32},[105,106341,106342,106344],{"class":107,"line":1171},[105,106343,30377],{"class":111},[105,106345,101286],{"class":115},[105,106347,106348,106350,106352,106354],{"class":107,"line":1186},[105,106349,30377],{"class":111},[105,106351,31365],{"class":115},[105,106353,31368],{"class":111},[105,106355,31371],{"class":115},[105,106357,106358],{"class":107,"line":1192},[105,106359,2391],{"emptyLinePlaceholder":32},[105,106361,106362],{"class":107,"line":1206},[105,106363,2391],{"emptyLinePlaceholder":32},[105,106365,106366,106368,106370],{"class":107,"line":1212},[105,106367,101299],{"class":164},[105,106369,13556],{"class":111},[105,106371,101304],{"class":220},[105,106373,106374],{"class":107,"line":1303},[105,106375,106376],{"class":220},"\u003Cmujoco model=\"one_link_motor\">\n",[105,106378,106379],{"class":107,"line":1309},[105,106380,106381],{"class":220},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[105,106383,106384],{"class":107,"line":1321},[105,106385,2391],{"emptyLinePlaceholder":32},[105,106387,106388],{"class":107,"line":1603},[105,106389,101323],{"class":220},[105,106391,106392],{"class":107,"line":1608},[105,106393,106394],{"class":220},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[105,106396,106397],{"class":107,"line":1614},[105,106398,106399],{"class":220},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[105,106401,106402],{"class":107,"line":1619},[105,106403,2391],{"emptyLinePlaceholder":32},[105,106405,106406],{"class":107,"line":1633},[105,106407,106408],{"class":220},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[105,106410,106411],{"class":107,"line":1638},[105,106412,106413],{"class":220},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[105,106415,106416],{"class":107,"line":1644},[105,106417,106418],{"class":220},"        \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",[105,106420,106421],{"class":107,"line":1665},[105,106422,106423],{"class":220},"      \u003C\u002Fbody>\n",[105,106425,106426],{"class":107,"line":1670},[105,106427,101352],{"class":220},[105,106429,106430],{"class":107,"line":1684},[105,106431,101357],{"class":220},[105,106433,106434],{"class":107,"line":1689},[105,106435,2391],{"emptyLinePlaceholder":32},[105,106437,106438],{"class":107,"line":1718},[105,106439,106440],{"class":220},"  \u003Cactuator>\n",[105,106442,106443],{"class":107,"line":1723},[105,106444,106445],{"class":220},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[105,106447,106448],{"class":107,"line":1740},[105,106449,106450],{"class":220},"  \u003C\u002Factuator>\n",[105,106452,106453],{"class":107,"line":1745},[105,106454,101362],{"class":220},[105,106456,106457],{"class":107,"line":1750},[105,106458,95683],{"class":220},[105,106460,106461],{"class":107,"line":1755},[105,106462,2391],{"emptyLinePlaceholder":32},[105,106464,106465],{"class":107,"line":1769},[105,106466,2391],{"emptyLinePlaceholder":32},[105,106468,106469,106471,106473,106475,106477],{"class":107,"line":1774},[105,106470,31932],{"class":111},[105,106472,1964],{"class":1954},[105,106474,101383],{"class":115},[105,106476,95671],{"class":164},[105,106478,3730],{"class":115},[105,106480,106481,106483,106485,106487,106489],{"class":107,"line":2568},[105,106482,101392],{"class":115},[105,106484,161],{"class":111},[105,106486,101397],{"class":115},[105,106488,101299],{"class":164},[105,106490,122],{"class":115},[105,106492,106493,106495,106497],{"class":107,"line":2582},[105,106494,101406],{"class":115},[105,106496,161],{"class":111},[105,106498,101411],{"class":115},[105,106500,106501],{"class":107,"line":2590},[105,106502,2391],{"emptyLinePlaceholder":32},[105,106504,106505,106507,106509,106511],{"class":107,"line":2595},[105,106506,31284],{"class":164},[105,106508,116],{"class":115},[105,106510,101424],{"class":220},[105,106512,101427],{"class":115},[105,106514,106515,106517,106519,106521],{"class":107,"line":2601},[105,106516,31284],{"class":164},[105,106518,116],{"class":115},[105,106520,101436],{"class":220},[105,106522,101439],{"class":115},[105,106524,106525,106527,106529,106531],{"class":107,"line":2607},[105,106526,31284],{"class":164},[105,106528,116],{"class":115},[105,106530,101448],{"class":220},[105,106532,101451],{"class":115},[105,106534,106535],{"class":107,"line":2612},[105,106536,2391],{"emptyLinePlaceholder":32},[105,106538,106539,106541,106544,106546,106548],{"class":107,"line":7940},[105,106540,3092],{"class":111},[105,106542,106543],{"class":115}," model.nu ",[105,106545,20940],{"class":111},[105,106547,25103],{"class":164},[105,106549,3730],{"class":115},[105,106551,106552,106554,106556,106558,106561],{"class":107,"line":7964},[105,106553,103417],{"class":111},[105,106555,103420],{"class":164},[105,106557,116],{"class":115},[105,106559,106560],{"class":220},"\"expected exactly one actuator\"",[105,106562,122],{"class":115},[105,106564,106565],{"class":107,"line":7969},[105,106566,2391],{"emptyLinePlaceholder":32},[105,106568,106569,106571,106573,106575,106577,106579,106582],{"class":107,"line":7975},[105,106570,3192],{"class":111},[105,106572,31601],{"class":115},[105,106574,26028],{"class":111},[105,106576,32428],{"class":164},[105,106578,116],{"class":115},[105,106580,106581],{"class":164},"2000",[105,106583,30771],{"class":115},[105,106585,106586,106589,106591,106593,106595],{"class":107,"line":8002},[105,106587,106588],{"class":115},"        t ",[105,106590,161],{"class":111},[105,106592,31601],{"class":115},[105,106594,571],{"class":111},[105,106596,106597],{"class":115}," model.opt.timestep\n",[105,106599,106600,106603,106605,106607,106609,106612,106614,106617,106619,106621,106624,106626,106628,106630],{"class":107,"line":8007},[105,106601,106602],{"class":115},"        data.ctrl[",[105,106604,307],{"class":164},[105,106606,4434],{"class":115},[105,106608,161],{"class":111},[105,106610,106611],{"class":164}," 1.5",[105,106613,6510],{"class":111},[105,106615,106616],{"class":115}," math.sin(",[105,106618,105245],{"class":164},[105,106620,6510],{"class":111},[105,106622,106623],{"class":115}," math.pi ",[105,106625,571],{"class":111},[105,106627,61852],{"class":164},[105,106629,6510],{"class":111},[105,106631,106632],{"class":115}," t)\n",[105,106634,106635],{"class":107,"line":8013},[105,106636,101501],{"class":115},[105,106638,106639],{"class":107,"line":8025},[105,106640,2391],{"emptyLinePlaceholder":32},[105,106642,106643,106645,106647,106650],{"class":107,"line":8037},[105,106644,31284],{"class":164},[105,106646,116],{"class":115},[105,106648,106649],{"class":220},"\"time:\"",[105,106651,101463],{"class":115},[105,106653,106654,106656,106658,106661,106663,106665],{"class":107,"line":8049},[105,106655,31284],{"class":164},[105,106657,116],{"class":115},[105,106659,106660],{"class":220},"\"joint qpos:\"",[105,106662,104915],{"class":115},[105,106664,409],{"class":164},[105,106666,30482],{"class":115},[105,106668,106669,106671,106673,106676,106678,106680],{"class":107,"line":9708},[105,106670,31284],{"class":164},[105,106672,116],{"class":115},[105,106674,106675],{"class":220},"\"joint qvel:\"",[105,106677,104931],{"class":115},[105,106679,409],{"class":164},[105,106681,30482],{"class":115},[105,106683,106684,106686,106688,106691],{"class":107,"line":9733},[105,106685,31284],{"class":164},[105,106687,116],{"class":115},[105,106689,106690],{"class":220},"\"last ctrl:\"",[105,106692,106693],{"class":115},", data.ctrl.copy())\n",[105,106695,106696],{"class":107,"line":9756},[105,106697,2391],{"emptyLinePlaceholder":32},[105,106699,106700],{"class":107,"line":9780},[105,106701,2391],{"emptyLinePlaceholder":32},[105,106703,106704,106706,106708,106710,106712],{"class":107,"line":9785},[105,106705,1522],{"class":111},[105,106707,31205],{"class":164},[105,106709,101544],{"class":111},[105,106711,101547],{"class":220},[105,106713,3730],{"class":115},[105,106715,106716],{"class":107,"line":9790},[105,106717,101554],{"class":115},[14,106719,103555],{},[96,106721,106723],{"className":23815,"code":106722,"language":23817,"meta":22,"style":22},"touch ch4_joint_motor.py\n",[102,106724,106725],{"__ignoreMap":22},[105,106726,106727,106729],{"class":107,"line":108},[105,106728,101268],{"class":1954},[105,106730,106731],{"class":220}," ch4_joint_motor.py\n",[14,106733,102286],{},[96,106735,106737],{"className":23815,"code":106736,"language":23817,"meta":22,"style":22},"python ch4_joint_motor.py\n",[102,106738,106739],{"__ignoreMap":22},[105,106740,106741,106743],{"class":107,"line":108},[105,106742,30365],{"class":1954},[105,106744,106731],{"class":220},[76,106746,101557],{"id":101557},[14,106748,106749],{},"检查 actuator 数量：",[96,106751,106753],{"className":30363,"code":106752,"language":30365,"meta":22,"style":22},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[102,106754,106755,106767],{"__ignoreMap":22},[105,106756,106757,106759,106761,106763,106765],{"class":107,"line":108},[105,106758,1522],{"class":111},[105,106760,106543],{"class":115},[105,106762,20940],{"class":111},[105,106764,25103],{"class":164},[105,106766,3730],{"class":115},[105,106768,106769,106771,106773,106775,106777],{"class":107,"line":28},[105,106770,103880],{"class":111},[105,106772,103420],{"class":164},[105,106774,116],{"class":115},[105,106776,106560],{"class":220},[105,106778,122],{"class":115},[14,106780,106781,106783,106784,106786],{},[102,106782,102143],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[102,106785,101061],{}," 长度应该是 1。",[14,106788,106789],{},"产生正弦控制信号：",[96,106791,106793],{"className":30363,"code":106792,"language":30365,"meta":22,"style":22},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[102,106794,106795],{"__ignoreMap":22},[105,106796,106797,106799,106801,106803,106805,106807,106809,106811,106813,106815,106817,106819,106821,106823],{"class":107,"line":108},[105,106798,105856],{"class":115},[105,106800,307],{"class":164},[105,106802,4434],{"class":115},[105,106804,161],{"class":111},[105,106806,106611],{"class":164},[105,106808,6510],{"class":111},[105,106810,106616],{"class":115},[105,106812,105245],{"class":164},[105,106814,6510],{"class":111},[105,106816,106623],{"class":115},[105,106818,571],{"class":111},[105,106820,61852],{"class":164},[105,106822,6510],{"class":111},[105,106824,106632],{"class":115},[14,106826,106827],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106829,101658],{},[96,106831,106832],{"className":30363,"code":104490,"language":30365,"meta":22,"style":22},[102,106833,106834],{"__ignoreMap":22},[105,106835,106836],{"class":107,"line":108},[105,106837,104490],{"class":115},[14,106839,106840],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[76,106842,101693],{"id":101693},[96,106844,106846],{"className":30363,"code":106845,"language":30365,"meta":22,"style":22},"import math\n",[102,106847,106848],{"__ignoreMap":22},[105,106849,106850,106852],{"class":107,"line":108},[105,106851,30377],{"class":111},[105,106853,106335],{"class":115},[14,106855,106856,106857,101003,106860,106863],{},"导入 Python 标准库里的数学模块。后面要用 ",[102,106858,106859],{},"math.sin",[102,106861,106862],{},"math.pi"," 生成周期变化的控制信号。",[96,106865,106866],{"className":30363,"code":103671,"language":30365,"meta":22,"style":22},[102,106867,106868,106874],{"__ignoreMap":22},[105,106869,106870,106872],{"class":107,"line":108},[105,106871,30377],{"class":111},[105,106873,101286],{"class":115},[105,106875,106876,106878,106880,106882],{"class":107,"line":28},[105,106877,30377],{"class":111},[105,106879,31365],{"class":115},[105,106881,31368],{"class":111},[105,106883,31371],{"class":115},[14,106885,106886],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[96,106888,106889],{"className":53052,"code":106172,"language":53054,"meta":22,"style":22},[102,106890,106891],{"__ignoreMap":22},[105,106892,106893,106895,106897,106899,106901,106903,106905,106907,106909,106911,106913,106915,106917,106919,106921],{"class":107,"line":108},[105,106894,1026],{"class":115},[105,106896,102941],{"class":51285},[105,106898,14912],{"class":1954},[105,106900,161],{"class":115},[105,106902,106004],{"class":220},[105,106904,53809],{"class":1954},[105,106906,161],{"class":115},[105,106908,106004],{"class":220},[105,106910,106013],{"class":1954},[105,106912,161],{"class":115},[105,106914,106018],{"class":220},[105,106916,106201],{"class":1954},[105,106918,161],{"class":115},[105,106920,106206],{"class":220},[105,106922,101129],{"class":115},[14,106924,106925,106926,106928,106929,106931,106932,106934],{},"这行定义关节。",[102,106927,105825],{}," 表示旋转关节。",[102,106930,106224],{}," 表示绕 y 轴旋转。",[102,106933,106230],{}," 表示有一点阻尼，运动不会完全无损耗。",[96,106936,106938],{"className":53052,"code":106937,"language":53054,"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",[102,106939,106940],{"__ignoreMap":22},[105,106941,106942,106944,106946,106948,106950,106953,106955,106957,106960,106963,106965,106968,106970,106972,106974,106976,106978,106981],{"class":107,"line":108},[105,106943,1026],{"class":115},[105,106945,101105],{"class":51285},[105,106947,14912],{"class":1954},[105,106949,161],{"class":115},[105,106951,106952],{"class":220},"\"link_geom\"",[105,106954,53809],{"class":1954},[105,106956,161],{"class":115},[105,106958,106959],{"class":220},"\"capsule\"",[105,106961,106962],{"class":1954}," fromto",[105,106964,161],{"class":115},[105,106966,106967],{"class":220},"\"0 0 0 0 0 0.5\"",[105,106969,101121],{"class":1954},[105,106971,161],{"class":115},[105,106973,103763],{"class":220},[105,106975,101986],{"class":1954},[105,106977,161],{"class":115},[105,106979,106980],{"class":220},"\"0.5\"",[105,106982,101129],{"class":115},[14,106984,106985,106986,106988,106989,106991,106992,106995,106996,28370,106999,107001],{},"这行定义摆杆的形状。",[102,106987,103150],{}," 是胶囊体，适合表示杆子。",[102,106990,103161],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[102,106993,106994],{},"(0,0,0)"," 延伸到 ",[102,106997,106998],{},"(0,0,0.5)",[102,107000,103155],{}," 是半径。",[96,107003,107004],{"className":53052,"code":106238,"language":53054,"meta":22,"style":22},[102,107005,107006],{"__ignoreMap":22},[105,107007,107008,107010,107012,107014,107016,107018,107020,107022,107024,107026,107028,107030,107032,107034,107036,107038,107040,107042],{"class":107,"line":108},[105,107009,1026],{"class":115},[105,107011,106059],{"class":51285},[105,107013,14912],{"class":1954},[105,107015,161],{"class":115},[105,107017,106066],{"class":220},[105,107019,106069],{"class":1954},[105,107021,161],{"class":115},[105,107023,106004],{"class":220},[105,107025,106076],{"class":1954},[105,107027,161],{"class":115},[105,107029,3669],{"class":220},[105,107031,106083],{"class":1954},[105,107033,161],{"class":115},[105,107035,106088],{"class":220},[105,107037,106091],{"class":1954},[105,107039,161],{"class":115},[105,107041,106096],{"class":220},[105,107043,101129],{"class":115},[14,107045,107046,107047,107049,107050,107053,107054,107056],{},"这行定义电机。它作用在 ",[102,107048,105825],{}," 关节上。",[102,107051,107052],{},"gear"," 可以理解成放大倍数。",[102,107055,105840],{}," 限制控制输入范围。",[96,107058,107059],{"className":30363,"code":106752,"language":30365,"meta":22,"style":22},[102,107060,107061,107073],{"__ignoreMap":22},[105,107062,107063,107065,107067,107069,107071],{"class":107,"line":108},[105,107064,1522],{"class":111},[105,107066,106543],{"class":115},[105,107068,20940],{"class":111},[105,107070,25103],{"class":164},[105,107072,3730],{"class":115},[105,107074,107075,107077,107079,107081,107083],{"class":107,"line":28},[105,107076,103880],{"class":111},[105,107078,103420],{"class":164},[105,107080,116],{"class":115},[105,107082,106560],{"class":220},[105,107084,122],{"class":115},[14,107086,107087,107089],{},[102,107088,102143],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[96,107091,107093],{"className":30363,"code":107092,"language":30365,"meta":22,"style":22},"for step in range(2000):\n",[102,107094,107095],{"__ignoreMap":22},[105,107096,107097,107099,107101,107103,107105,107107,107109],{"class":107,"line":108},[105,107098,3016],{"class":111},[105,107100,31601],{"class":115},[105,107102,26028],{"class":111},[105,107104,32428],{"class":164},[105,107106,116],{"class":115},[105,107108,106581],{"class":164},[105,107110,30771],{"class":115},[14,107112,107113,107114,107116,107117,107120],{},"循环 2000 步。这里没有用 ",[102,107115,1108],{},"，而是用 ",[102,107118,107119],{},"step","，因为后面要用当前步数计算时间。",[96,107122,107124],{"className":30363,"code":107123,"language":30365,"meta":22,"style":22},"t = step * model.opt.timestep\n",[102,107125,107126],{"__ignoreMap":22},[105,107127,107128,107131,107133,107135,107137],{"class":107,"line":108},[105,107129,107130],{"class":115},"t ",[105,107132,161],{"class":111},[105,107134,31601],{"class":115},[105,107136,571],{"class":111},[105,107138,106597],{"class":115},[14,107140,107141],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[96,107143,107144],{"className":30363,"code":106792,"language":30365,"meta":22,"style":22},[102,107145,107146],{"__ignoreMap":22},[105,107147,107148,107150,107152,107154,107156,107158,107160,107162,107164,107166,107168,107170,107172,107174],{"class":107,"line":108},[105,107149,105856],{"class":115},[105,107151,307],{"class":164},[105,107153,4434],{"class":115},[105,107155,161],{"class":111},[105,107157,106611],{"class":164},[105,107159,6510],{"class":111},[105,107161,106616],{"class":115},[105,107163,105245],{"class":164},[105,107165,6510],{"class":111},[105,107167,106623],{"class":115},[105,107169,571],{"class":111},[105,107171,61852],{"class":164},[105,107173,6510],{"class":111},[105,107175,106632],{"class":115},[14,107177,107178],{},"这行给电机输入一个正弦波。拆开看：",[59,107180,107181,107187,107193],{},[62,107182,107183,107186],{},[102,107184,107185],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[62,107188,107189,107192],{},[102,107190,107191],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[62,107194,107195,107198],{},[102,107196,107197],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107200,107201],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[96,107203,107205],{"className":30363,"code":107204,"language":30365,"meta":22,"style":22},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[102,107206,107207],{"__ignoreMap":22},[105,107208,107209,107211,107213,107215,107217,107219],{"class":107,"line":108},[105,107210,30400],{"class":164},[105,107212,116],{"class":115},[105,107214,106660],{"class":220},[105,107216,104915],{"class":115},[105,107218,409],{"class":164},[105,107220,30482],{"class":115},[14,107222,107223,107224,107226],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[102,107225,101055],{}," 只有一个数。",[47,107228,102301],{"id":102300},[14,107230,107231],{},"输出类似:",[96,107233,107236],{"className":107234,"code":107235,"language":5179,"meta":22},[5177],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[102,107237,107235],{"__ignoreMap":22},[14,107239,107240,107241,107243],{},"这里 ",[102,107242,106111],{}," 是电机输入。",[14,107245,107246,107249,107250,107253],{},[102,107247,107248],{},"joint qpos"," 是关节角度，单位通常是弧度。",[102,107251,107252],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107255,107256],{},"角度单位提示：",[96,107258,107261],{"className":107259,"code":107260,"language":5179,"meta":22},[5177],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[102,107262,107260],{"__ignoreMap":22},[14,107264,107265,107266,107268,107269,107271],{},"如果你看到 ",[102,107267,104015],{}," 是 ",[102,107270,35314],{},"，大约就是 28.6 度。",[47,107273,102333],{"id":102332},[59,107275,107276,107283,107286,107293,107296,107304,107312],{},[62,107277,102396,107278,102399,107280,28370],{},[102,107279,106296],{},[102,107281,107282],{},"gear=\"5\"",[62,107284,107285],{},"重新运行，观察关节运动是否更剧烈。",[62,107287,102396,107288,102399,107290,28370],{},[102,107289,105840],{},[102,107291,107292],{},"-0.2 0.2",[62,107294,107295],{},"重新运行，观察控制能力是否变弱。",[62,107297,107298,107299,107301,107302,28370],{},"去掉 actuator，确认 ",[102,107300,102143],{}," 变成 ",[102,107303,307],{},[62,107305,102396,107306,102399,107308,107311],{},[102,107307,106230],{},[102,107309,107310],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[62,107313,102396,107314,102399,107316,107319],{},[102,107315,106224],{},[102,107317,107318],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[47,107321,102438],{"id":102437},[76,107323,107325],{"id":107324},"indexerror-index-0-is-out-of-bounds",[102,107326,107327],{},"IndexError: index 0 is out of bounds",[14,107329,107330,107331,107333],{},"原因是 ",[102,107332,105977],{},"，没有 actuator。",[76,107335,107336],{"id":107336},"关节几乎不动",[14,107338,107339],{},"可能原因:",[59,107341,107342,107347,107351,107357],{},[62,107343,107344,107346],{},[102,107345,107052],{}," 太小",[62,107348,107349,107346],{},[102,107350,105840],{},[62,107352,107353,107356],{},[102,107354,107355],{},"damping"," 太大",[62,107358,107359],{},"重力方向导致运动不明显",[76,107361,107362],{"id":107362},"模型编译失败",[14,107364,107365,107366,107368],{},"检查 actuator 引用的 ",[102,107367,106287],{}," 是否存在，joint 名称是否拼写一致。",[76,107370,107372,107374],{"id":107371},"datactrl0-写了但没有效果",[102,107373,106111],{}," 写了但没有效果",[14,107376,102560],{},[59,107378,107379,107384,107387,107392,107397],{},[62,107380,107381,107383],{},[102,107382,102143],{}," 是否大于 0。",[62,107385,107386],{},"motor 是否引用了正确 joint。",[62,107388,107389,107391],{},[102,107390,107052],{}," 是否太小。",[62,107393,107394,107396],{},[102,107395,105840],{}," 是否把输入限制得太小。",[62,107398,107399],{},"body 是否真的有可动 joint。",[76,107401,107402],{"id":107402},"控制输入超过范围会怎样",[14,107404,107405],{},"如果设置了：",[96,107407,107409],{"className":53052,"code":107408,"language":53054,"meta":22,"style":22},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[102,107410,107411],{"__ignoreMap":22},[105,107412,107413],{"class":107,"line":108},[105,107414,107408],{"class":115},[14,107416,107417],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[96,107419,107421],{"className":30363,"code":107420,"language":30365,"meta":22,"style":22},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[102,107422,107423,107443],{"__ignoreMap":22},[105,107424,107425,107428,107430,107433,107435,107437,107439,107441],{"class":107,"line":108},[105,107426,107427],{"class":115},"action ",[105,107429,161],{"class":111},[105,107431,107432],{"class":115}," np.clip(action, ",[105,107434,648],{"class":111},[105,107436,105245],{"class":164},[105,107438,12427],{"class":115},[105,107440,105245],{"class":164},[105,107442,122],{"class":115},[105,107444,107445,107447,107449,107451,107453],{"class":107,"line":28},[105,107446,105856],{"class":115},[105,107448,307],{"class":164},[105,107450,4434],{"class":115},[105,107452,161],{"class":111},[105,107454,107455],{"class":115}," action\n",[47,107457,102592],{"id":102591},[14,107459,107460],{},"这一章建立了控制任务的基本形式：",[96,107462,107465],{"className":107463,"code":107464,"language":5179,"meta":22},[5177],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[102,107466,107464],{"__ignoreMap":22},[14,107468,107469],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5118,107471,107472],{},"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":28,"depth":28,"links":107474},[107475,107476,107477,107482,107486,107487,107488,107496],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":107478},[107479,107480,107481],{"id":106118,"depth":1171,"text":106119},{"id":106168,"depth":1171,"text":106169},{"id":106234,"depth":1171,"text":106235},{"id":101237,"depth":28,"text":101238,"children":107483},[107484,107485],{"id":101557,"depth":1171,"text":101557},{"id":101693,"depth":1171,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":107489},[107490,107491,107492,107493,107495],{"id":107324,"depth":1171,"text":107327},{"id":107336,"depth":1171,"text":107336},{"id":107362,"depth":1171,"text":107362},{"id":107371,"depth":1171,"text":107494},"data.ctrl[0] 写了但没有效果",{"id":107402,"depth":1171,"text":107402},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105806,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107503,"title":107504,"body":107505,"description":22,"extension":30,"meta":109414,"navigation":32,"path":109415,"seo":109416,"stem":109417,"__hash__":109418},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107506,"toc":109390},[107507,107510,107512,107515,107523,107526,107543,107546,107571,107574,107620,107622,107624,107679,107681,107700,107702,107745,107748,107765,107768,107784,107794,107801,107803,107806,107809,107843,107846,107894,107898,107901,107915,107924,107928,107931,107956,107959,107963,107976,107979,107985,107988,108003,108005,108008,108268,108270,108282,108285,108597,108599,108611,108613,108616,108631,108636,108639,108661,108664,108667,108701,108704,108708,108719,108722,108739,108742,108756,108763,108783,108790,108804,108807,108819,108834,108854,108857,108879,108882,108886,108901,108912,108927,108930,108960,108976,109005,109013,109037,109040,109058,109068,109080,109087,109096,109102,109111,109114,109116,109125,109128,109143,109145,109148,109159,109162,109173,109176,109194,109196,109213,109216,109244,109246,109250,109253,109283,109289,109292,109296,109304,109307,109309,109330,109333,109336,109352,109355,109371,109373,109376,109387],[10,107508,107504],{"id":107509},"_5viewer-可视化与-renderer-离屏渲染",[47,107511,100632],{"id":100631},[14,107513,107514],{},"本章掌握两类可视化方式:",[59,107516,107517,107520],{},[62,107518,107519],{},"交互式 viewer: 适合人工观察仿真",[62,107521,107522],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107524,107525],{},"使用官方接口:",[96,107527,107529],{"className":30363,"code":107528,"language":30365,"meta":22,"style":22},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[102,107530,107531,107538],{"__ignoreMap":22},[105,107532,107533,107535],{"class":107,"line":108},[105,107534,30377],{"class":111},[105,107536,107537],{"class":115}," mujoco.viewer\n",[105,107539,107540],{"class":107,"line":28},[105,107541,107542],{"class":115},"mujoco.viewer.launch_passive(model, data)\n",[14,107544,107545],{},"以及:",[96,107547,107549],{"className":30363,"code":107548,"language":30365,"meta":22,"style":22},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[102,107550,107551,107561],{"__ignoreMap":22},[105,107552,107553,107556,107558],{"class":107,"line":108},[105,107554,107555],{"class":115},"renderer ",[105,107557,161],{"class":111},[105,107559,107560],{"class":115}," mujoco.Renderer(model)\n",[105,107562,107563,107566,107568],{"class":107,"line":28},[105,107564,107565],{"class":115},"image ",[105,107567,161],{"class":111},[105,107569,107570],{"class":115}," renderer.render()\n",[14,107572,107573],{},"新手建议先理解二者区别：",[253,107575,107576,107592],{},[256,107577,107578],{},[259,107579,107580,107583,107586,107589],{},[262,107581,107582],{"align":23729},"工具",[262,107584,107585],{"align":23729},"用途",[262,107587,107588],{"align":23729},"是否打开窗口",[262,107590,107591],{"align":23729},"常见场景",[300,107593,107594,107607],{},[259,107595,107596,107599,107602,107604],{},[305,107597,107598],{"align":23729},"Viewer",[305,107600,107601],{"align":23729},"人眼实时观察仿真",[305,107603,104650],{"align":23729},[305,107605,107606],{"align":23729},"调试模型、看控制效果",[259,107608,107609,107612,107615,107617],{},[305,107610,107611],{"align":23729},"Renderer",[305,107613,107614],{"align":23729},"生成图像数组",[305,107616,104663],{"align":23729},[305,107618,107619],{"align":23729},"保存图片、训练视觉策略、服务器批量采集",[47,107621,100755],{"id":100754},[14,107623,100758],{},[96,107625,107627],{"className":23815,"code":107626,"language":23817,"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",[102,107628,107629,107641,107651,107659,107667],{"__ignoreMap":22},[105,107630,107631,107633,107635,107637,107639],{"class":107,"line":108},[105,107632,24561],{"class":1954},[105,107634,26300],{"class":220},[105,107636,23827],{"class":220},[105,107638,26385],{"class":164},[105,107640,24663],{"class":164},[105,107642,107643,107645,107647,107649],{"class":107,"line":28},[105,107644,100793],{"class":220},[105,107646,100796],{"class":220},[105,107648,100799],{"class":220},[105,107650,24663],{"class":164},[105,107652,107653,107655,107657],{"class":107,"line":1171},[105,107654,100806],{"class":220},[105,107656,100809],{"class":220},[105,107658,24663],{"class":164},[105,107660,107661,107663,107665],{"class":107,"line":1186},[105,107662,100816],{"class":220},[105,107664,100819],{"class":220},[105,107666,24663],{"class":164},[105,107668,107669,107671,107673,107675,107677],{"class":107,"line":1192},[105,107670,100826],{"class":220},[105,107672,100829],{"class":220},[105,107674,100832],{"class":220},[105,107676,100835],{"class":220},[105,107678,102501],{"class":220},[14,107680,102804],{},[96,107682,107684],{"className":23815,"code":107683,"language":23817,"meta":22,"style":22},"pip install \"mujoco>=2.3\" numpy pillow\n",[102,107685,107686],{"__ignoreMap":22},[105,107687,107688,107690,107692,107694,107697],{"class":107,"line":108},[105,107689,23824],{"class":1954},[105,107691,23827],{"class":220},[105,107693,100915],{"class":220},[105,107695,107696],{"class":220}," numpy",[105,107698,107699],{"class":220}," pillow\n",[14,107701,102821],{},[96,107703,107705],{"className":23815,"code":107704,"language":23817,"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",[102,107706,107707,107724,107733],{"__ignoreMap":22},[105,107708,107709,107711,107713,107715,107718,107720,107722],{"class":107,"line":108},[105,107710,30315],{"class":1954},[105,107712,29161],{"class":220},[105,107714,25100],{"class":164},[105,107716,107717],{"class":220}," mujoco-render",[105,107719,100960],{"class":220},[105,107721,100963],{"class":164},[105,107723,100966],{"class":164},[105,107725,107726,107728,107730],{"class":107,"line":28},[105,107727,30315],{"class":1954},[105,107729,100973],{"class":220},[105,107731,107732],{"class":220}," mujoco-render\n",[105,107734,107735,107737,107739,107741,107743],{"class":107,"line":1171},[105,107736,23824],{"class":1954},[105,107738,23827],{"class":220},[105,107740,100915],{"class":220},[105,107742,107696],{"class":220},[105,107744,107699],{"class":220},[14,107746,107747],{},"离屏渲染后端:",[96,107749,107751],{"className":23815,"code":107750,"language":23817,"meta":22,"style":22},"export MUJOCO_GL=egl\n",[102,107752,107753],{"__ignoreMap":22},[105,107754,107755,107757,107760,107762],{"class":107,"line":108},[105,107756,25027],{"class":111},[105,107758,107759],{"class":115}," MUJOCO_GL",[105,107761,161],{"class":111},[105,107763,107764],{"class":115},"egl\n",[14,107766,107767],{},"或:",[96,107769,107771],{"className":23815,"code":107770,"language":23817,"meta":22,"style":22},"export MUJOCO_GL=osmesa\n",[102,107772,107773],{"__ignoreMap":22},[105,107774,107775,107777,107779,107781],{"class":107,"line":108},[105,107776,25027],{"class":111},[105,107778,107759],{"class":115},[105,107780,161],{"class":111},[105,107782,107783],{"class":115},"osmesa\n",[14,107785,107786,107787,107790,107791,28370],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[102,107788,107789],{},"egl"," 失败，再尝试 ",[102,107792,107793],{},"osmesa",[14,107795,107796,107797,107800],{},"如果你在本机桌面环境运行，通常先不要设置 ",[102,107798,107799],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[47,107802,101030],{"id":101029},[14,107804,107805],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107807,107808],{},"典型 viewer 流程:",[96,107810,107812],{"className":30363,"code":107811,"language":30365,"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",[102,107813,107814,107827,107834,107838],{"__ignoreMap":22},[105,107815,107816,107819,107822,107824],{"class":107,"line":108},[105,107817,107818],{"class":111},"with",[105,107820,107821],{"class":115}," mujoco.viewer.launch_passive(model, data) ",[105,107823,31368],{"class":111},[105,107825,107826],{"class":115}," viewer:\n",[105,107828,107829,107831],{"class":107,"line":28},[105,107830,2242],{"class":111},[105,107832,107833],{"class":115}," viewer.is_running():\n",[105,107835,107836],{"class":107,"line":1171},[105,107837,101501],{"class":115},[105,107839,107840],{"class":107,"line":1186},[105,107841,107842],{"class":115},"        viewer.sync()\n",[14,107844,107845],{},"典型 renderer 流程:",[96,107847,107849],{"className":30363,"code":107848,"language":30365,"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",[102,107850,107851,107877,107881,107886],{"__ignoreMap":22},[105,107852,107853,107855,107857,107860,107862,107864,107866,107868,107870,107872,107875],{"class":107,"line":108},[105,107854,107555],{"class":115},[105,107856,161],{"class":111},[105,107858,107859],{"class":115}," mujoco.Renderer(model, ",[105,107861,24966],{"class":5208},[105,107863,161],{"class":111},[105,107865,42327],{"class":164},[105,107867,12427],{"class":115},[105,107869,24962],{"class":5208},[105,107871,161],{"class":111},[105,107873,107874],{"class":164},"640",[105,107876,122],{"class":115},[105,107878,107879],{"class":107,"line":28},[105,107880,104490],{"class":115},[105,107882,107883],{"class":107,"line":1171},[105,107884,107885],{"class":115},"renderer.update_scene(data)\n",[105,107887,107888,107890,107892],{"class":107,"line":1186},[105,107889,107565],{"class":115},[105,107891,161],{"class":111},[105,107893,107570],{"class":115},[76,107895,107897],{"id":107896},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107899,107900],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[96,107902,107904],{"className":30363,"code":107903,"language":30365,"meta":22,"style":22},"mujoco.mj_step(model, data)\nviewer.sync()\n",[102,107905,107906,107910],{"__ignoreMap":22},[105,107907,107908],{"class":107,"line":108},[105,107909,104490],{"class":115},[105,107911,107912],{"class":107,"line":28},[105,107913,107914],{"class":115},"viewer.sync()\n",[14,107916,107917,107919,107920,107923],{},[102,107918,101200],{}," 负责算物理，",[102,107921,107922],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[76,107925,107927],{"id":107926},"为什么要-sleep","为什么要 sleep",[14,107929,107930],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[96,107932,107934],{"className":30363,"code":107933,"language":30365,"meta":22,"style":22},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[102,107935,107936],{"__ignoreMap":22},[105,107937,107938,107941,107943,107946,107948,107951,107953],{"class":107,"line":108},[105,107939,107940],{"class":115},"sleep_time ",[105,107942,161],{"class":111},[105,107944,107945],{"class":115}," model.opt.timestep ",[105,107947,648],{"class":111},[105,107949,107950],{"class":115}," (time.time() ",[105,107952,648],{"class":111},[105,107954,107955],{"class":115}," step_start)\n",[14,107957,107958],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[76,107960,107962],{"id":107961},"renderer-输出是什么","renderer 输出是什么",[96,107964,107966],{"className":30363,"code":107965,"language":30365,"meta":22,"style":22},"image = renderer.render()\n",[102,107967,107968],{"__ignoreMap":22},[105,107969,107970,107972,107974],{"class":107,"line":108},[105,107971,107565],{"class":115},[105,107973,161],{"class":111},[105,107975,107570],{"class":115},[14,107977,107978],{},"得到的是 NumPy 数组，形状通常是：",[96,107980,107983],{"className":107981,"code":107982,"language":5179,"meta":22},[5177],"(height, width, 3)\n",[102,107984,107982],{"__ignoreMap":22},[14,107986,107987],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[96,107989,107991],{"className":30363,"code":107990,"language":30365,"meta":22,"style":22},"Image.fromarray(image).save(\"render_output.png\")\n",[102,107992,107993],{"__ignoreMap":22},[105,107994,107995,107998,108001],{"class":107,"line":108},[105,107996,107997],{"class":115},"Image.fromarray(image).save(",[105,107999,108000],{"class":220},"\"render_output.png\"",[105,108002,122],{"class":115},[47,108004,101238],{"id":101237},[14,108006,108007],{},"交互式 Viewer:",[96,108009,108011],{"className":30363,"code":108010,"language":30365,"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",[102,108012,108013,108019,108023,108029,108035,108039,108043,108051,108056,108060,108064,108068,108073,108078,108082,108086,108090,108095,108099,108103,108107,108111,108115,108119,108131,108143,108151,108155,108165,108185,108195,108200,108205,108209,108226,108239,108244,108248,108252,108264],{"__ignoreMap":22},[105,108014,108015,108017],{"class":107,"line":108},[105,108016,30377],{"class":111},[105,108018,31814],{"class":115},[105,108020,108021],{"class":107,"line":28},[105,108022,2391],{"emptyLinePlaceholder":32},[105,108024,108025,108027],{"class":107,"line":1171},[105,108026,30377],{"class":111},[105,108028,101286],{"class":115},[105,108030,108031,108033],{"class":107,"line":1186},[105,108032,30377],{"class":111},[105,108034,107537],{"class":115},[105,108036,108037],{"class":107,"line":1192},[105,108038,2391],{"emptyLinePlaceholder":32},[105,108040,108041],{"class":107,"line":1206},[105,108042,2391],{"emptyLinePlaceholder":32},[105,108044,108045,108047,108049],{"class":107,"line":1212},[105,108046,101299],{"class":164},[105,108048,13556],{"class":111},[105,108050,101304],{"class":220},[105,108052,108053],{"class":107,"line":1303},[105,108054,108055],{"class":220},"\u003Cmujoco model=\"viewer_demo\">\n",[105,108057,108058],{"class":107,"line":1309},[105,108059,101314],{"class":220},[105,108061,108062],{"class":107,"line":1321},[105,108063,2391],{"emptyLinePlaceholder":32},[105,108065,108066],{"class":107,"line":1603},[105,108067,101323],{"class":220},[105,108069,108070],{"class":107,"line":1608},[105,108071,108072],{"class":220},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[105,108074,108075],{"class":107,"line":1614},[105,108076,108077],{"class":220},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[105,108079,108080],{"class":107,"line":1619},[105,108081,2391],{"emptyLinePlaceholder":32},[105,108083,108084],{"class":107,"line":1633},[105,108085,101337],{"class":220},[105,108087,108088],{"class":107,"line":1638},[105,108089,101342],{"class":220},[105,108091,108092],{"class":107,"line":1644},[105,108093,108094],{"class":220},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[105,108096,108097],{"class":107,"line":1665},[105,108098,101352],{"class":220},[105,108100,108101],{"class":107,"line":1670},[105,108102,101357],{"class":220},[105,108104,108105],{"class":107,"line":1684},[105,108106,101362],{"class":220},[105,108108,108109],{"class":107,"line":1689},[105,108110,95683],{"class":220},[105,108112,108113],{"class":107,"line":1718},[105,108114,2391],{"emptyLinePlaceholder":32},[105,108116,108117],{"class":107,"line":1723},[105,108118,2391],{"emptyLinePlaceholder":32},[105,108120,108121,108123,108125,108127,108129],{"class":107,"line":1740},[105,108122,31932],{"class":111},[105,108124,1964],{"class":1954},[105,108126,101383],{"class":115},[105,108128,95671],{"class":164},[105,108130,3730],{"class":115},[105,108132,108133,108135,108137,108139,108141],{"class":107,"line":1745},[105,108134,101392],{"class":115},[105,108136,161],{"class":111},[105,108138,101397],{"class":115},[105,108140,101299],{"class":164},[105,108142,122],{"class":115},[105,108144,108145,108147,108149],{"class":107,"line":1750},[105,108146,101406],{"class":115},[105,108148,161],{"class":111},[105,108150,101411],{"class":115},[105,108152,108153],{"class":107,"line":1755},[105,108154,2391],{"emptyLinePlaceholder":32},[105,108156,108157,108159,108161,108163],{"class":107,"line":1769},[105,108158,34163],{"class":111},[105,108160,107821],{"class":115},[105,108162,31368],{"class":111},[105,108164,107826],{"class":115},[105,108166,108167,108170,108173,108175,108178,108180,108183],{"class":107,"line":1774},[105,108168,108169],{"class":111},"        while",[105,108171,108172],{"class":115}," viewer.is_running() ",[105,108174,30447],{"class":111},[105,108176,108177],{"class":115}," data.time ",[105,108179,1026],{"class":111},[105,108181,108182],{"class":164}," 5.0",[105,108184,3730],{"class":115},[105,108186,108187,108190,108192],{"class":107,"line":2568},[105,108188,108189],{"class":115},"            step_start ",[105,108191,161],{"class":111},[105,108193,108194],{"class":115}," time.time()\n",[105,108196,108197],{"class":107,"line":2582},[105,108198,108199],{"class":115},"            mujoco.mj_step(model, data)\n",[105,108201,108202],{"class":107,"line":2590},[105,108203,108204],{"class":115},"            viewer.sync()\n",[105,108206,108207],{"class":107,"line":2595},[105,108208,2391],{"emptyLinePlaceholder":32},[105,108210,108211,108214,108216,108218,108220,108222,108224],{"class":107,"line":2601},[105,108212,108213],{"class":115},"            sleep_time ",[105,108215,161],{"class":111},[105,108217,107945],{"class":115},[105,108219,648],{"class":111},[105,108221,107950],{"class":115},[105,108223,648],{"class":111},[105,108225,107955],{"class":115},[105,108227,108228,108230,108233,108235,108237],{"class":107,"line":2607},[105,108229,4633],{"class":111},[105,108231,108232],{"class":115}," sleep_time ",[105,108234,1076],{"class":111},[105,108236,4084],{"class":164},[105,108238,3730],{"class":115},[105,108240,108241],{"class":107,"line":2612},[105,108242,108243],{"class":115},"                time.sleep(sleep_time)\n",[105,108245,108246],{"class":107,"line":7940},[105,108247,2391],{"emptyLinePlaceholder":32},[105,108249,108250],{"class":107,"line":7964},[105,108251,2391],{"emptyLinePlaceholder":32},[105,108253,108254,108256,108258,108260,108262],{"class":107,"line":7969},[105,108255,1522],{"class":111},[105,108257,31205],{"class":164},[105,108259,101544],{"class":111},[105,108261,101547],{"class":220},[105,108263,3730],{"class":115},[105,108265,108266],{"class":107,"line":7975},[105,108267,101554],{"class":115},[14,108269,103555],{},[96,108271,108273],{"className":23815,"code":108272,"language":23817,"meta":22,"style":22},"touch ch5_viewer.py\n",[102,108274,108275],{"__ignoreMap":22},[105,108276,108277,108279],{"class":107,"line":108},[105,108278,101268],{"class":1954},[105,108280,108281],{"class":220}," ch5_viewer.py\n",[14,108283,108284],{},"离屏 Renderer 保存图片:",[96,108286,108288],{"className":30363,"code":108287,"language":30365,"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",[102,108289,108290,108302,108306,108312,108322,108326,108330,108338,108343,108347,108351,108355,108359,108364,108368,108372,108376,108380,108384,108388,108392,108396,108400,108404,108408,108420,108432,108440,108465,108469,108485,108489,108493,108508,108517,108521,108535,108540,108545,108549,108561,108573,108577,108581,108593],{"__ignoreMap":22},[105,108291,108292,108294,108297,108299],{"class":107,"line":108},[105,108293,30722],{"class":111},[105,108295,108296],{"class":115}," pathlib ",[105,108298,30377],{"class":111},[105,108300,108301],{"class":115}," Path\n",[105,108303,108304],{"class":107,"line":28},[105,108305,2391],{"emptyLinePlaceholder":32},[105,108307,108308,108310],{"class":107,"line":1171},[105,108309,30377],{"class":111},[105,108311,101286],{"class":115},[105,108313,108314,108316,108318,108320],{"class":107,"line":1186},[105,108315,30722],{"class":111},[105,108317,47248],{"class":164},[105,108319,47251],{"class":111},[105,108321,47254],{"class":115},[105,108323,108324],{"class":107,"line":1192},[105,108325,2391],{"emptyLinePlaceholder":32},[105,108327,108328],{"class":107,"line":1206},[105,108329,2391],{"emptyLinePlaceholder":32},[105,108331,108332,108334,108336],{"class":107,"line":1212},[105,108333,101299],{"class":164},[105,108335,13556],{"class":111},[105,108337,101304],{"class":220},[105,108339,108340],{"class":107,"line":1303},[105,108341,108342],{"class":220},"\u003Cmujoco model=\"renderer_demo\">\n",[105,108344,108345],{"class":107,"line":1309},[105,108346,101314],{"class":220},[105,108348,108349],{"class":107,"line":1321},[105,108350,2391],{"emptyLinePlaceholder":32},[105,108352,108353],{"class":107,"line":1603},[105,108354,101323],{"class":220},[105,108356,108357],{"class":107,"line":1608},[105,108358,108072],{"class":220},[105,108360,108361],{"class":107,"line":1614},[105,108362,108363],{"class":220},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[105,108365,108366],{"class":107,"line":1619},[105,108367,108077],{"class":220},[105,108369,108370],{"class":107,"line":1633},[105,108371,2391],{"emptyLinePlaceholder":32},[105,108373,108374],{"class":107,"line":1638},[105,108375,101337],{"class":220},[105,108377,108378],{"class":107,"line":1644},[105,108379,101342],{"class":220},[105,108381,108382],{"class":107,"line":1665},[105,108383,108094],{"class":220},[105,108385,108386],{"class":107,"line":1670},[105,108387,101352],{"class":220},[105,108389,108390],{"class":107,"line":1684},[105,108391,101357],{"class":220},[105,108393,108394],{"class":107,"line":1689},[105,108395,101362],{"class":220},[105,108397,108398],{"class":107,"line":1718},[105,108399,95683],{"class":220},[105,108401,108402],{"class":107,"line":1723},[105,108403,2391],{"emptyLinePlaceholder":32},[105,108405,108406],{"class":107,"line":1740},[105,108407,2391],{"emptyLinePlaceholder":32},[105,108409,108410,108412,108414,108416,108418],{"class":107,"line":1745},[105,108411,31932],{"class":111},[105,108413,1964],{"class":1954},[105,108415,101383],{"class":115},[105,108417,95671],{"class":164},[105,108419,3730],{"class":115},[105,108421,108422,108424,108426,108428,108430],{"class":107,"line":1750},[105,108423,101392],{"class":115},[105,108425,161],{"class":111},[105,108427,101397],{"class":115},[105,108429,101299],{"class":164},[105,108431,122],{"class":115},[105,108433,108434,108436,108438],{"class":107,"line":1755},[105,108435,101406],{"class":115},[105,108437,161],{"class":111},[105,108439,101411],{"class":115},[105,108441,108442,108445,108447,108449,108451,108453,108455,108457,108459,108461,108463],{"class":107,"line":1769},[105,108443,108444],{"class":115},"    renderer ",[105,108446,161],{"class":111},[105,108448,107859],{"class":115},[105,108450,24966],{"class":5208},[105,108452,161],{"class":111},[105,108454,42327],{"class":164},[105,108456,12427],{"class":115},[105,108458,24962],{"class":5208},[105,108460,161],{"class":111},[105,108462,107874],{"class":164},[105,108464,122],{"class":115},[105,108466,108467],{"class":107,"line":1774},[105,108468,2391],{"emptyLinePlaceholder":32},[105,108470,108471,108473,108475,108477,108479,108481,108483],{"class":107,"line":2568},[105,108472,3192],{"class":111},[105,108474,101486],{"class":115},[105,108476,26028],{"class":111},[105,108478,32428],{"class":164},[105,108480,116],{"class":115},[105,108482,427],{"class":164},[105,108484,30771],{"class":115},[105,108486,108487],{"class":107,"line":2582},[105,108488,101501],{"class":115},[105,108490,108491],{"class":107,"line":2590},[105,108492,2391],{"emptyLinePlaceholder":32},[105,108494,108495,108498,108501,108503,108506],{"class":107,"line":2595},[105,108496,108497],{"class":115},"    renderer.update_scene(data, ",[105,108499,108500],{"class":5208},"camera",[105,108502,161],{"class":111},[105,108504,108505],{"class":220},"\"fixed_camera\"",[105,108507,122],{"class":115},[105,108509,108510,108513,108515],{"class":107,"line":2601},[105,108511,108512],{"class":115},"    image ",[105,108514,161],{"class":111},[105,108516,107570],{"class":115},[105,108518,108519],{"class":107,"line":2607},[105,108520,2391],{"emptyLinePlaceholder":32},[105,108522,108523,108526,108528,108531,108533],{"class":107,"line":2612},[105,108524,108525],{"class":115},"    output_path ",[105,108527,161],{"class":111},[105,108529,108530],{"class":115}," Path(",[105,108532,108000],{"class":220},[105,108534,122],{"class":115},[105,108536,108537],{"class":107,"line":7940},[105,108538,108539],{"class":115},"    Image.fromarray(image).save(output_path)\n",[105,108541,108542],{"class":107,"line":7964},[105,108543,108544],{"class":115},"    renderer.close()\n",[105,108546,108547],{"class":107,"line":7969},[105,108548,2391],{"emptyLinePlaceholder":32},[105,108550,108551,108553,108555,108558],{"class":107,"line":7975},[105,108552,31284],{"class":164},[105,108554,116],{"class":115},[105,108556,108557],{"class":220},"\"saved:\"",[105,108559,108560],{"class":115},", output_path.resolve())\n",[105,108562,108563,108565,108567,108570],{"class":107,"line":8002},[105,108564,31284],{"class":164},[105,108566,116],{"class":115},[105,108568,108569],{"class":220},"\"image shape:\"",[105,108571,108572],{"class":115},", image.shape)\n",[105,108574,108575],{"class":107,"line":8007},[105,108576,2391],{"emptyLinePlaceholder":32},[105,108578,108579],{"class":107,"line":8013},[105,108580,2391],{"emptyLinePlaceholder":32},[105,108582,108583,108585,108587,108589,108591],{"class":107,"line":8025},[105,108584,1522],{"class":111},[105,108586,31205],{"class":164},[105,108588,101544],{"class":111},[105,108590,101547],{"class":220},[105,108592,3730],{"class":115},[105,108594,108595],{"class":107,"line":8037},[105,108596,101554],{"class":115},[14,108598,103555],{},[96,108600,108602],{"className":23815,"code":108601,"language":23817,"meta":22,"style":22},"touch ch5_renderer.py\n",[102,108603,108604],{"__ignoreMap":22},[105,108605,108606,108608],{"class":107,"line":108},[105,108607,101268],{"class":1954},[105,108609,108610],{"class":220}," ch5_renderer.py\n",[76,108612,101557],{"id":101557},[14,108614,108615],{},"viewer 上下文：",[96,108617,108619],{"className":30363,"code":108618,"language":30365,"meta":22,"style":22},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[102,108620,108621],{"__ignoreMap":22},[105,108622,108623,108625,108627,108629],{"class":107,"line":108},[105,108624,107818],{"class":111},[105,108626,107821],{"class":115},[105,108628,31368],{"class":111},[105,108630,107826],{"class":115},[14,108632,108633,108635],{},[102,108634,107818],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108637,108638],{},"窗口循环：",[96,108640,108642],{"className":30363,"code":108641,"language":30365,"meta":22,"style":22},"while viewer.is_running() and data.time \u003C 5.0:\n",[102,108643,108644],{"__ignoreMap":22},[105,108645,108646,108649,108651,108653,108655,108657,108659],{"class":107,"line":108},[105,108647,108648],{"class":111},"while",[105,108650,108172],{"class":115},[105,108652,30447],{"class":111},[105,108654,108177],{"class":115},[105,108656,1026],{"class":111},[105,108658,108182],{"class":164},[105,108660,3730],{"class":115},[14,108662,108663],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108665,108666],{},"固定相机：",[96,108668,108670],{"className":53052,"code":108669,"language":53054,"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",[102,108671,108672],{"__ignoreMap":22},[105,108673,108674,108676,108678,108680,108682,108684,108686,108688,108691,108694,108696,108699],{"class":107,"line":108},[105,108675,1026],{"class":115},[105,108677,108500],{"class":51285},[105,108679,14912],{"class":1954},[105,108681,161],{"class":115},[105,108683,108505],{"class":220},[105,108685,101091],{"class":1954},[105,108687,161],{"class":115},[105,108689,108690],{"class":220},"\"1.5 -2.0 1.2\"",[105,108692,108693],{"class":1954}," xyaxes",[105,108695,161],{"class":115},[105,108697,108698],{"class":220},"\"1 0.75 0 0 0 1\"",[105,108700,101129],{"class":115},[14,108702,108703],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[76,108705,108707],{"id":108706},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[96,108709,108711],{"className":30363,"code":108710,"language":30365,"meta":22,"style":22},"import time\n",[102,108712,108713],{"__ignoreMap":22},[105,108714,108715,108717],{"class":107,"line":108},[105,108716,30377],{"class":111},[105,108718,31814],{"class":115},[14,108720,108721],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[96,108723,108725],{"className":30363,"code":108724,"language":30365,"meta":22,"style":22},"import mujoco\nimport mujoco.viewer\n",[102,108726,108727,108733],{"__ignoreMap":22},[105,108728,108729,108731],{"class":107,"line":108},[105,108730,30377],{"class":111},[105,108732,101286],{"class":115},[105,108734,108735,108737],{"class":107,"line":28},[105,108736,30377],{"class":111},[105,108738,107537],{"class":115},[14,108740,108741],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[96,108743,108744],{"className":30363,"code":108618,"language":30365,"meta":22,"style":22},[102,108745,108746],{"__ignoreMap":22},[105,108747,108748,108750,108752,108754],{"class":107,"line":108},[105,108749,107818],{"class":111},[105,108751,107821],{"class":115},[105,108753,31368],{"class":111},[105,108755,107826],{"class":115},[14,108757,108758,108759,108762],{},"打开一个 viewer 窗口。",[102,108760,108761],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[96,108764,108765],{"className":30363,"code":108641,"language":30365,"meta":22,"style":22},[102,108766,108767],{"__ignoreMap":22},[105,108768,108769,108771,108773,108775,108777,108779,108781],{"class":107,"line":108},[105,108770,108648],{"class":111},[105,108772,108172],{"class":115},[105,108774,30447],{"class":111},[105,108776,108177],{"class":115},[105,108778,1026],{"class":111},[105,108780,108182],{"class":164},[105,108782,3730],{"class":115},[14,108784,108785,108786,108789],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[102,108787,108788],{},"viewer.is_running()"," 会变成 false，循环结束。",[96,108791,108793],{"className":30363,"code":108792,"language":30365,"meta":22,"style":22},"step_start = time.time()\n",[102,108794,108795],{"__ignoreMap":22},[105,108796,108797,108800,108802],{"class":107,"line":108},[105,108798,108799],{"class":115},"step_start ",[105,108801,161],{"class":111},[105,108803,108194],{"class":115},[14,108805,108806],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[96,108808,108809],{"className":30363,"code":107903,"language":30365,"meta":22,"style":22},[102,108810,108811,108815],{"__ignoreMap":22},[105,108812,108813],{"class":107,"line":108},[105,108814,104490],{"class":115},[105,108816,108817],{"class":107,"line":28},[105,108818,107914],{"class":115},[14,108820,108821,108823,108824,108826,108827,108829,108830,108833],{},[102,108822,101200],{}," 推进物理仿真。",[102,108825,107922],{}," 把最新的 ",[102,108828,33386],{}," 同步到窗口里显示。没有 ",[102,108831,108832],{},"sync()","，窗口可能看不到最新状态。",[96,108835,108836],{"className":30363,"code":107933,"language":30365,"meta":22,"style":22},[102,108837,108838],{"__ignoreMap":22},[105,108839,108840,108842,108844,108846,108848,108850,108852],{"class":107,"line":108},[105,108841,107940],{"class":115},[105,108843,161],{"class":111},[105,108845,107945],{"class":115},[105,108847,648],{"class":111},[105,108849,107950],{"class":115},[105,108851,648],{"class":111},[105,108853,107955],{"class":115},[14,108855,108856],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[96,108858,108860],{"className":30363,"code":108859,"language":30365,"meta":22,"style":22},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[102,108861,108862,108874],{"__ignoreMap":22},[105,108863,108864,108866,108868,108870,108872],{"class":107,"line":108},[105,108865,1522],{"class":111},[105,108867,108232],{"class":115},[105,108869,1076],{"class":111},[105,108871,4084],{"class":164},[105,108873,3730],{"class":115},[105,108875,108876],{"class":107,"line":28},[105,108877,108878],{"class":115},"    time.sleep(sleep_time)\n",[14,108880,108881],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[76,108883,108885],{"id":108884},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[96,108887,108889],{"className":30363,"code":108888,"language":30365,"meta":22,"style":22},"from pathlib import Path\n",[102,108890,108891],{"__ignoreMap":22},[105,108892,108893,108895,108897,108899],{"class":107,"line":108},[105,108894,30722],{"class":111},[105,108896,108296],{"class":115},[105,108898,30377],{"class":111},[105,108900,108301],{"class":115},[14,108902,108903,108904,108907,108908,108911],{},"导入 ",[102,108905,108906],{},"Path","，用来处理文件路径。相比直接写字符串，",[102,108909,108910],{},"Path(\"render_output.png\")"," 更清晰。",[96,108913,108915],{"className":30363,"code":108914,"language":30365,"meta":22,"style":22},"from PIL import Image\n",[102,108916,108917],{"__ignoreMap":22},[105,108918,108919,108921,108923,108925],{"class":107,"line":108},[105,108920,30722],{"class":111},[105,108922,47248],{"class":164},[105,108924,47251],{"class":111},[105,108926,47254],{"class":115},[14,108928,108929],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[96,108931,108932],{"className":53052,"code":108669,"language":53054,"meta":22,"style":22},[102,108933,108934],{"__ignoreMap":22},[105,108935,108936,108938,108940,108942,108944,108946,108948,108950,108952,108954,108956,108958],{"class":107,"line":108},[105,108937,1026],{"class":115},[105,108939,108500],{"class":51285},[105,108941,14912],{"class":1954},[105,108943,161],{"class":115},[105,108945,108505],{"class":220},[105,108947,101091],{"class":1954},[105,108949,161],{"class":115},[105,108951,108690],{"class":220},[105,108953,108693],{"class":1954},[105,108955,161],{"class":115},[105,108957,108698],{"class":220},[105,108959,101129],{"class":115},[14,108961,108962,108963,108965,108966,108968,108969,108972,108973,108975],{},"定义一个相机。",[102,108964,79795],{}," 是相机名字。",[102,108967,104131],{}," 是相机在世界里的位置。",[102,108970,108971],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[102,108974,104131],{}," 来调视角。",[96,108977,108979],{"className":30363,"code":108978,"language":30365,"meta":22,"style":22},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[102,108980,108981],{"__ignoreMap":22},[105,108982,108983,108985,108987,108989,108991,108993,108995,108997,108999,109001,109003],{"class":107,"line":108},[105,108984,107555],{"class":115},[105,108986,161],{"class":111},[105,108988,107859],{"class":115},[105,108990,24966],{"class":5208},[105,108992,161],{"class":111},[105,108994,42327],{"class":164},[105,108996,12427],{"class":115},[105,108998,24962],{"class":5208},[105,109000,161],{"class":111},[105,109002,107874],{"class":164},[105,109004,122],{"class":115},[14,109006,109007,109008,101003,109010,109012],{},"创建离屏渲染器。",[102,109009,24966],{},[102,109011,24962],{}," 决定输出图片大小。",[96,109014,109015],{"className":30363,"code":101661,"language":30365,"meta":22,"style":22},[102,109016,109017,109033],{"__ignoreMap":22},[105,109018,109019,109021,109023,109025,109027,109029,109031],{"class":107,"line":108},[105,109020,3016],{"class":111},[105,109022,101486],{"class":115},[105,109024,26028],{"class":111},[105,109026,32428],{"class":164},[105,109028,116],{"class":115},[105,109030,427],{"class":164},[105,109032,30771],{"class":115},[105,109034,109035],{"class":107,"line":28},[105,109036,101684],{"class":115},[14,109038,109039],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[96,109041,109043],{"className":30363,"code":109042,"language":30365,"meta":22,"style":22},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[102,109044,109045],{"__ignoreMap":22},[105,109046,109047,109050,109052,109054,109056],{"class":107,"line":108},[105,109048,109049],{"class":115},"renderer.update_scene(data, ",[105,109051,108500],{"class":5208},[105,109053,161],{"class":111},[105,109055,108505],{"class":220},[105,109057,122],{"class":115},[14,109059,109060,109061,109063,109064,109067],{},"告诉 renderer：用当前 ",[102,109062,33386],{}," 的状态更新画面，并使用名为 ",[102,109065,109066],{},"fixed_camera"," 的相机视角。",[96,109069,109070],{"className":30363,"code":107965,"language":30365,"meta":22,"style":22},[102,109071,109072],{"__ignoreMap":22},[105,109073,109074,109076,109078],{"class":107,"line":108},[105,109075,107565],{"class":115},[105,109077,161],{"class":111},[105,109079,107570],{"class":115},[14,109081,109082,109083,109086],{},"真正渲染出图像。",[102,109084,109085],{},"image"," 是一个 NumPy 数组，不是文件。",[96,109088,109090],{"className":30363,"code":109089,"language":30365,"meta":22,"style":22},"Image.fromarray(image).save(output_path)\n",[102,109091,109092],{"__ignoreMap":22},[105,109093,109094],{"class":107,"line":108},[105,109095,109089],{"class":115},[14,109097,109098,109099,28370],{},"把数组转换成图片，并保存到 ",[102,109100,109101],{},"render_output.png",[96,109103,109105],{"className":30363,"code":109104,"language":30365,"meta":22,"style":22},"renderer.close()\n",[102,109106,109107],{"__ignoreMap":22},[105,109108,109109],{"class":107,"line":108},[105,109110,109104],{"class":115},[14,109112,109113],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[47,109115,102301],{"id":102300},[14,109117,109118,109119,109121,109122,28370],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[102,109120,109101],{},"，并输出图像数组形状，例如 ",[102,109123,109124],{},"(480, 640, 3)",[14,109126,109127],{},"如果图片里看不到方块，先检查：",[59,109129,109130,109133,109136],{},[62,109131,109132],{},"方块是否掉到相机视野外。",[62,109134,109135],{},"camera 位置是否合理。",[62,109137,109138,109139,109142],{},"是否在 ",[102,109140,109141],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[47,109144,102333],{"id":102332},[14,109146,109147],{},"运行 viewer:",[96,109149,109151],{"className":23815,"code":109150,"language":23817,"meta":22,"style":22},"python ch5_viewer.py\n",[102,109152,109153],{"__ignoreMap":22},[105,109154,109155,109157],{"class":107,"line":108},[105,109156,30365],{"class":1954},[105,109158,108281],{"class":220},[14,109160,109161],{},"运行 renderer:",[96,109163,109165],{"className":23815,"code":109164,"language":23817,"meta":22,"style":22},"python ch5_renderer.py\n",[102,109166,109167],{"__ignoreMap":22},[105,109168,109169,109171],{"class":107,"line":108},[105,109170,30365],{"class":1954},[105,109172,108610],{"class":220},[14,109174,109175],{},"如果在服务器上运行:",[96,109177,109179],{"className":23815,"code":109178,"language":23817,"meta":22,"style":22},"MUJOCO_GL=egl python ch5_renderer.py\n",[102,109180,109181],{"__ignoreMap":22},[105,109182,109183,109185,109187,109189,109192],{"class":107,"line":108},[105,109184,107799],{"class":115},[105,109186,161],{"class":111},[105,109188,107789],{"class":220},[105,109190,109191],{"class":1954}," python",[105,109193,108610],{"class":220},[14,109195,107767],{},[96,109197,109199],{"className":23815,"code":109198,"language":23817,"meta":22,"style":22},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[102,109200,109201],{"__ignoreMap":22},[105,109202,109203,109205,109207,109209,109211],{"class":107,"line":108},[105,109204,107799],{"class":115},[105,109206,161],{"class":111},[105,109208,107793],{"class":220},[105,109210,109191],{"class":1954},[105,109212,108610],{"class":220},[14,109214,109215],{},"再做几个练习：",[59,109217,109218,109225,109228,109234],{},[62,109219,109220,109221,109224],{},"把 renderer 分辨率改成 ",[102,109222,109223],{},"height=240, width=320","，观察输出 shape。",[62,109226,109227],{},"把方块颜色改成蓝色，重新保存图片。",[62,109229,109230,109231,109233],{},"把相机 ",[102,109232,104131],{}," 改远一点，观察画面中物体是否变小。",[62,109235,109236,109237,102399,109240,109243],{},"把 viewer 示例中的 ",[102,109238,109239],{},"data.time \u003C 5.0",[102,109241,109242],{},"data.time \u003C 20.0","，观察更长时间。",[47,109245,102438],{"id":102437},[76,109247,109249],{"id":109248},"viewer-窗口打不开","viewer 窗口打不开",[14,109251,109252],{},"安装:",[96,109254,109256],{"className":23815,"code":109255,"language":23817,"meta":22,"style":22},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[102,109257,109258],{"__ignoreMap":22},[105,109259,109260,109262,109264,109266,109268,109270,109272,109274,109276,109278,109280],{"class":107,"line":108},[105,109261,24561],{"class":1954},[105,109263,26300],{"class":220},[105,109265,23827],{"class":220},[105,109267,26385],{"class":164},[105,109269,102491],{"class":220},[105,109271,100819],{"class":220},[105,109273,102496],{"class":220},[105,109275,100832],{"class":220},[105,109277,100838],{"class":220},[105,109279,100829],{"class":220},[105,109281,109282],{"class":220}," libXinerama\n",[76,109284,109286],{"id":109285},"glfwerror",[102,109287,109288],{},"GLFWError",[14,109290,109291],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[76,109293,109295],{"id":109294},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109297,109298,109299,82524,109301,109303],{},"尝试 ",[102,109300,101022],{},[102,109302,101025],{},"。可能存在版本差异。",[76,109305,109306],{"id":109306},"保存图片是黑的",[14,109308,102560],{},[59,109310,109311,109314,109317,109327],{},[62,109312,109313],{},"XML 里是否有 light。",[62,109315,109316],{},"相机是否对着模型。",[62,109318,109319,109320,109323,109324,28370],{},"是否先 ",[102,109321,109322],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[102,109325,109326],{},"renderer.render()",[62,109328,109329],{},"物体是否已经掉出视野。",[76,109331,109332],{"id":109332},"远程服务器没有显示器",[14,109334,109335],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[96,109337,109338],{"className":23815,"code":109178,"language":23817,"meta":22,"style":22},[102,109339,109340],{"__ignoreMap":22},[105,109341,109342,109344,109346,109348,109350],{"class":107,"line":108},[105,109343,107799],{"class":115},[105,109345,161],{"class":111},[105,109347,107789],{"class":220},[105,109349,109191],{"class":1954},[105,109351,108610],{"class":220},[14,109353,109354],{},"如果 EGL 不可用，再尝试：",[96,109356,109357],{"className":23815,"code":109198,"language":23817,"meta":22,"style":22},[102,109358,109359],{"__ignoreMap":22},[105,109360,109361,109363,109365,109367,109369],{"class":107,"line":108},[105,109362,107799],{"class":115},[105,109364,161],{"class":111},[105,109366,107793],{"class":220},[105,109368,109191],{"class":1954},[105,109370,108610],{"class":220},[47,109372,102592],{"id":102591},[14,109374,109375],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[59,109377,109378,109381,109384],{},[62,109379,109380],{},"先用 viewer 看模型和控制是否正常。",[62,109382,109383],{},"再用 renderer 保存图片或构造视觉观测。",[62,109385,109386],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5118,109388,109389],{},"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":28,"depth":28,"links":109391},[109392,109393,109394,109399,109404,109405,109406,109413],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":109395},[109396,109397,109398],{"id":107896,"depth":1171,"text":107897},{"id":107926,"depth":1171,"text":107927},{"id":107961,"depth":1171,"text":107962},{"id":101237,"depth":28,"text":101238,"children":109400},[109401,109402,109403],{"id":101557,"depth":1171,"text":101557},{"id":108706,"depth":1171,"text":108707},{"id":108884,"depth":1171,"text":108885},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":109407},[109408,109409,109410,109411,109412],{"id":109248,"depth":1171,"text":109249},{"id":109285,"depth":1171,"text":109288},{"id":109294,"depth":1171,"text":109295},{"id":109306,"depth":1171,"text":109306},{"id":109332,"depth":1171,"text":109332},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107504,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109420,"title":109421,"body":109422,"description":22,"extension":30,"meta":111333,"navigation":32,"path":111334,"seo":111335,"stem":111336,"__hash__":111337},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109423,"toc":111309},[109424,109427,109429,109432,109434,109453,109456,109462,109465,109467,109469,109493,109495,109509,109511,109552,109554,109565,109567,109570,109576,109579,109613,109616,109648,109651,109683,109687,109690,109730,109733,109739,109742,109748,109752,109755,109761,109764,109768,109771,109811,109813,109826,109829,109831,110413,110415,110427,110430,110441,110443,110446,110465,110477,110480,110501,110504,110507,110550,110553,110556,110576,110583,110585,110603,110618,110621,110627,110630,110636,110653,110660,110691,110702,110736,110747,110764,110773,110781,110786,110800,110803,110824,110830,110844,110849,110879,110889,110914,110922,110945,110948,110964,110967,110975,110981,111003,111016,111037,111046,111085,111096,111098,111101,111107,111110,111113,111119,111122,111142,111145,111147,111186,111188,111191,111199,111202,111205,111232,111235,111245,111251,111254,111260,111262,111268,111272,111275,111277,111280,111304,111307],[10,109425,109421],{"id":109426},"_6控制任务cartpole",[47,109428,100632],{"id":100631},[14,109430,109431],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109433,104316],{},[59,109435,109436,109439,109441,109444,109447,109450],{},[62,109437,109438],{},"slide joint",[62,109440,106169],{},[62,109442,109443],{},"cart force actuator",[62,109445,109446],{},"状态观测",[62,109448,109449],{},"简单控制循环",[62,109451,109452],{},"reward 设计雏形",[14,109454,109455],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[96,109457,109460],{"className":109458,"code":109459,"language":5179,"meta":22},[5177],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[102,109461,109459],{"__ignoreMap":22},[14,109463,109464],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[47,109466,100755],{"id":100754},[14,109468,100758],{},[96,109470,109471],{"className":23815,"code":104373,"language":23817,"meta":22,"style":22},[102,109472,109473],{"__ignoreMap":22},[105,109474,109475,109477,109479,109481,109483,109485,109487,109489,109491],{"class":107,"line":108},[105,109476,24561],{"class":1954},[105,109478,26300],{"class":220},[105,109480,23827],{"class":220},[105,109482,26385],{"class":164},[105,109484,104388],{"class":220},[105,109486,100783],{"class":220},[105,109488,102486],{"class":220},[105,109490,100799],{"class":220},[105,109492,104397],{"class":220},[14,109494,102804],{},[96,109496,109497],{"className":23815,"code":100904,"language":23817,"meta":22,"style":22},[102,109498,109499],{"__ignoreMap":22},[105,109500,109501,109503,109505,109507],{"class":107,"line":108},[105,109502,23824],{"class":1954},[105,109504,23827],{"class":220},[105,109506,100915],{"class":220},[105,109508,100918],{"class":220},[14,109510,102821],{},[96,109512,109514],{"className":23815,"code":109513,"language":23817,"meta":22,"style":22},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[102,109515,109516,109533,109542],{"__ignoreMap":22},[105,109517,109518,109520,109522,109524,109527,109529,109531],{"class":107,"line":108},[105,109519,30315],{"class":1954},[105,109521,29161],{"class":220},[105,109523,25100],{"class":164},[105,109525,109526],{"class":220}," mujoco-cartpole",[105,109528,100960],{"class":220},[105,109530,100963],{"class":164},[105,109532,100966],{"class":164},[105,109534,109535,109537,109539],{"class":107,"line":28},[105,109536,30315],{"class":1954},[105,109538,100973],{"class":220},[105,109540,109541],{"class":220}," mujoco-cartpole\n",[105,109543,109544,109546,109548,109550],{"class":107,"line":1171},[105,109545,23824],{"class":1954},[105,109547,23827],{"class":220},[105,109549,100915],{"class":220},[105,109551,100918],{"class":220},[14,109553,100989],{},[59,109555,109556,109559,109562],{},[62,109557,109558],{},"本章不依赖 Gymnasium。",[62,109560,109561],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[62,109563,109564],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[47,109566,101030],{"id":101029},[14,109568,109569],{},"Cartpole 的模型结构:",[96,109571,109574],{"className":109572,"code":109573,"language":5179,"meta":22},[5177],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[102,109575,109573],{"__ignoreMap":22},[14,109577,109578],{},"小车通过 slide joint 左右移动:",[96,109580,109582],{"className":53052,"code":109581,"language":53054,"meta":22,"style":22},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[102,109583,109584],{"__ignoreMap":22},[105,109585,109586,109588,109590,109592,109594,109597,109599,109601,109604,109606,109608,109611],{"class":107,"line":108},[105,109587,1026],{"class":115},[105,109589,102941],{"class":51285},[105,109591,14912],{"class":1954},[105,109593,161],{"class":115},[105,109595,109596],{"class":220},"\"cart_x\"",[105,109598,53809],{"class":1954},[105,109600,161],{"class":115},[105,109602,109603],{"class":220},"\"slide\"",[105,109605,106013],{"class":1954},[105,109607,161],{"class":115},[105,109609,109610],{"class":220},"\"1 0 0\"",[105,109612,101129],{"class":115},[14,109614,109615],{},"杆子通过 hinge joint 旋转:",[96,109617,109619],{"className":53052,"code":109618,"language":53054,"meta":22,"style":22},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[102,109620,109621],{"__ignoreMap":22},[105,109622,109623,109625,109627,109629,109631,109634,109636,109638,109640,109642,109644,109646],{"class":107,"line":108},[105,109624,1026],{"class":115},[105,109626,102941],{"class":51285},[105,109628,14912],{"class":1954},[105,109630,161],{"class":115},[105,109632,109633],{"class":220},"\"pole_hinge\"",[105,109635,53809],{"class":1954},[105,109637,161],{"class":115},[105,109639,106004],{"class":220},[105,109641,106013],{"class":1954},[105,109643,161],{"class":115},[105,109645,106018],{"class":220},[105,109647,101129],{"class":115},[14,109649,109650],{},"控制力作用在小车 slide joint 上:",[96,109652,109654],{"className":53052,"code":109653,"language":53054,"meta":22,"style":22},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[102,109655,109656],{"__ignoreMap":22},[105,109657,109658,109660,109662,109664,109666,109669,109671,109673,109675,109677,109679,109681],{"class":107,"line":108},[105,109659,1026],{"class":115},[105,109661,106059],{"class":51285},[105,109663,14912],{"class":1954},[105,109665,161],{"class":115},[105,109667,109668],{"class":220},"\"cart_motor\"",[105,109670,106069],{"class":1954},[105,109672,161],{"class":115},[105,109674,109596],{"class":220},[105,109676,106076],{"class":1954},[105,109678,161],{"class":115},[105,109680,54301],{"class":220},[105,109682,101129],{"class":115},[76,109684,109686],{"id":109685},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109688,109689],{},"这个简化模型有两个关节：",[253,109691,109692,109703],{},[256,109693,109694],{},[259,109695,109696,109698,109700],{},[262,109697,102744],{"align":23729},[262,109699,23730],{"align":23729},[262,109701,109702],{"align":23729},"对应状态",[300,109704,109705,109718],{},[259,109706,109707,109712,109715],{},[305,109708,109709],{"align":23729},[102,109710,109711],{},"cart_x",[305,109713,109714],{"align":23729},"slide",[305,109716,109717],{"align":23729},"小车 x 位置",[259,109719,109720,109725,109727],{},[305,109721,109722],{"align":23729},[102,109723,109724],{},"pole_hinge",[305,109726,105825],{"align":23729},[305,109728,109729],{"align":23729},"杆子角度",[14,109731,109732],{},"所以：",[96,109734,109737],{"className":109735,"code":109736,"language":5179,"meta":22},[5177],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[102,109738,109736],{"__ignoreMap":22},[14,109740,109741],{},"把它们拼起来就是观测：",[96,109743,109746],{"className":109744,"code":109745,"language":5179,"meta":22},[5177],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[102,109747,109745],{"__ignoreMap":22},[76,109749,109751],{"id":109750},"action-是什么","action 是什么",[14,109753,109754],{},"本章只有一个 actuator：",[96,109756,109759],{"className":109757,"code":109758,"language":5179,"meta":22},[5177],"data.ctrl[0] = action\n",[102,109760,109758],{"__ignoreMap":22},[14,109762,109763],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[76,109765,109767],{"id":109766},"reward-是什么","reward 是什么",[14,109769,109770],{},"奖励函数：",[96,109772,109774],{"className":30363,"code":109773,"language":30365,"meta":22,"style":22},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[102,109775,109776],{"__ignoreMap":22},[105,109777,109778,109780,109783,109785,109787,109789,109792,109794,109797,109799,109801,109803,109806,109808],{"class":107,"line":108},[105,109779,17038],{"class":111},[105,109781,109782],{"class":164}," float",[105,109784,116],{"class":115},[105,109786,102388],{"class":164},[105,109788,52256],{"class":111},[105,109790,109791],{"class":164}," 0.1",[105,109793,6510],{"class":111},[105,109795,109796],{"class":115}," cart_x ",[105,109798,571],{"class":111},[105,109800,109796],{"class":115},[105,109802,648],{"class":111},[105,109804,109805],{"class":115}," pole_angle ",[105,109807,571],{"class":111},[105,109809,109810],{"class":115}," pole_angle)\n",[14,109812,106211],{},[59,109814,109815,109820,109823],{},[62,109816,109817,109818,28370],{},"基础奖励是 ",[102,109819,102388],{},[62,109821,109822],{},"小车离中心越远，扣分越多。",[62,109824,109825],{},"杆子角度越大，扣分越多。",[14,109827,109828],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[47,109830,101238],{"id":101237},[96,109832,109834],{"className":30363,"code":109833,"language":30365,"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",[102,109835,109836,109842,109852,109856,109860,109868,109873,109877,109881,109885,109890,109894,109899,109904,109909,109913,109918,109923,109928,109932,109936,109940,109944,109948,109953,109957,109961,109965,109969,109973,109983,109990,109994,109998,110012,110026,110039,110069,110073,110077,110089,110101,110109,110113,110126,110130,110134,110143,110147,110163,110173,110186,110199,110203,110226,110244,110248,110260,110264,110268,110278,110288,110292,110308,110349,110353,110373,110389,110393,110397,110409],{"__ignoreMap":22},[105,109837,109838,109840],{"class":107,"line":108},[105,109839,30377],{"class":111},[105,109841,101286],{"class":115},[105,109843,109844,109846,109848,109850],{"class":107,"line":28},[105,109845,30377],{"class":111},[105,109847,31365],{"class":115},[105,109849,31368],{"class":111},[105,109851,31371],{"class":115},[105,109853,109854],{"class":107,"line":1171},[105,109855,2391],{"emptyLinePlaceholder":32},[105,109857,109858],{"class":107,"line":1186},[105,109859,2391],{"emptyLinePlaceholder":32},[105,109861,109862,109864,109866],{"class":107,"line":1192},[105,109863,101299],{"class":164},[105,109865,13556],{"class":111},[105,109867,101304],{"class":220},[105,109869,109870],{"class":107,"line":1206},[105,109871,109872],{"class":220},"\u003Cmujoco model=\"cartpole\">\n",[105,109874,109875],{"class":107,"line":1212},[105,109876,101314],{"class":220},[105,109878,109879],{"class":107,"line":1303},[105,109880,2391],{"emptyLinePlaceholder":32},[105,109882,109883],{"class":107,"line":1309},[105,109884,101323],{"class":220},[105,109886,109887],{"class":107,"line":1321},[105,109888,109889],{"class":220},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[105,109891,109892],{"class":107,"line":1603},[105,109893,2391],{"emptyLinePlaceholder":32},[105,109895,109896],{"class":107,"line":1608},[105,109897,109898],{"class":220},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[105,109900,109901],{"class":107,"line":1614},[105,109902,109903],{"class":220},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[105,109905,109906],{"class":107,"line":1619},[105,109907,109908],{"class":220},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[105,109910,109911],{"class":107,"line":1633},[105,109912,2391],{"emptyLinePlaceholder":32},[105,109914,109915],{"class":107,"line":1638},[105,109916,109917],{"class":220},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[105,109919,109920],{"class":107,"line":1644},[105,109921,109922],{"class":220},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[105,109924,109925],{"class":107,"line":1665},[105,109926,109927],{"class":220},"        \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",[105,109929,109930],{"class":107,"line":1670},[105,109931,106423],{"class":220},[105,109933,109934],{"class":107,"line":1684},[105,109935,101352],{"class":220},[105,109937,109938],{"class":107,"line":1689},[105,109939,101357],{"class":220},[105,109941,109942],{"class":107,"line":1718},[105,109943,2391],{"emptyLinePlaceholder":32},[105,109945,109946],{"class":107,"line":1723},[105,109947,106440],{"class":220},[105,109949,109950],{"class":107,"line":1740},[105,109951,109952],{"class":220},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[105,109954,109955],{"class":107,"line":1745},[105,109956,106450],{"class":220},[105,109958,109959],{"class":107,"line":1750},[105,109960,101362],{"class":220},[105,109962,109963],{"class":107,"line":1755},[105,109964,95683],{"class":220},[105,109966,109967],{"class":107,"line":1769},[105,109968,2391],{"emptyLinePlaceholder":32},[105,109970,109971],{"class":107,"line":1774},[105,109972,2391],{"emptyLinePlaceholder":32},[105,109974,109975,109977,109980],{"class":107,"line":2568},[105,109976,31932],{"class":111},[105,109978,109979],{"class":1954}," get_observation",[105,109981,109982],{"class":115},"(data: mujoco.MjData) -> np.ndarray:\n",[105,109984,109985,109987],{"class":107,"line":2582},[105,109986,4081],{"class":111},[105,109988,109989],{"class":115}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[105,109991,109992],{"class":107,"line":2590},[105,109993,2391],{"emptyLinePlaceholder":32},[105,109995,109996],{"class":107,"line":2595},[105,109997,2391],{"emptyLinePlaceholder":32},[105,109999,110000,110002,110005,110008,110010],{"class":107,"line":2601},[105,110001,31932],{"class":111},[105,110003,110004],{"class":1954}," compute_reward",[105,110006,110007],{"class":115},"(obs: np.ndarray) -> ",[105,110009,155],{"class":164},[105,110011,3730],{"class":115},[105,110013,110014,110017,110019,110022,110024],{"class":107,"line":2607},[105,110015,110016],{"class":115},"    cart_x ",[105,110018,161],{"class":111},[105,110020,110021],{"class":115}," obs[",[105,110023,307],{"class":164},[105,110025,33231],{"class":115},[105,110027,110028,110031,110033,110035,110037],{"class":107,"line":2612},[105,110029,110030],{"class":115},"    pole_angle ",[105,110032,161],{"class":111},[105,110034,110021],{"class":115},[105,110036,333],{"class":164},[105,110038,33231],{"class":115},[105,110040,110041,110043,110045,110047,110049,110051,110053,110055,110057,110059,110061,110063,110065,110067],{"class":107,"line":7940},[105,110042,4081],{"class":111},[105,110044,109782],{"class":164},[105,110046,116],{"class":115},[105,110048,102388],{"class":164},[105,110050,52256],{"class":111},[105,110052,109791],{"class":164},[105,110054,6510],{"class":111},[105,110056,109796],{"class":115},[105,110058,571],{"class":111},[105,110060,109796],{"class":115},[105,110062,648],{"class":111},[105,110064,109805],{"class":115},[105,110066,571],{"class":111},[105,110068,109810],{"class":115},[105,110070,110071],{"class":107,"line":7964},[105,110072,2391],{"emptyLinePlaceholder":32},[105,110074,110075],{"class":107,"line":7969},[105,110076,2391],{"emptyLinePlaceholder":32},[105,110078,110079,110081,110083,110085,110087],{"class":107,"line":7975},[105,110080,31932],{"class":111},[105,110082,1964],{"class":1954},[105,110084,101383],{"class":115},[105,110086,95671],{"class":164},[105,110088,3730],{"class":115},[105,110090,110091,110093,110095,110097,110099],{"class":107,"line":8002},[105,110092,101392],{"class":115},[105,110094,161],{"class":111},[105,110096,101397],{"class":115},[105,110098,101299],{"class":164},[105,110100,122],{"class":115},[105,110102,110103,110105,110107],{"class":107,"line":8007},[105,110104,101406],{"class":115},[105,110106,161],{"class":111},[105,110108,101411],{"class":115},[105,110110,110111],{"class":107,"line":8013},[105,110112,2391],{"emptyLinePlaceholder":32},[105,110114,110115,110117,110119,110121,110123],{"class":107,"line":8025},[105,110116,105054],{"class":115},[105,110118,333],{"class":164},[105,110120,4434],{"class":115},[105,110122,161],{"class":111},[105,110124,110125],{"class":164}," 0.1\n",[105,110127,110128],{"class":107,"line":8037},[105,110129,105067],{"class":115},[105,110131,110132],{"class":107,"line":8049},[105,110133,2391],{"emptyLinePlaceholder":32},[105,110135,110136,110139,110141],{"class":107,"line":9708},[105,110137,110138],{"class":115},"    total_reward ",[105,110140,161],{"class":111},[105,110142,104746],{"class":164},[105,110144,110145],{"class":107,"line":9733},[105,110146,2391],{"emptyLinePlaceholder":32},[105,110148,110149,110151,110153,110155,110157,110159,110161],{"class":107,"line":9756},[105,110150,3192],{"class":111},[105,110152,31601],{"class":115},[105,110154,26028],{"class":111},[105,110156,32428],{"class":164},[105,110158,116],{"class":115},[105,110160,6402],{"class":164},[105,110162,30771],{"class":115},[105,110164,110165,110168,110170],{"class":107,"line":9780},[105,110166,110167],{"class":115},"        obs ",[105,110169,161],{"class":111},[105,110171,110172],{"class":115}," get_observation(data)\n",[105,110174,110175,110178,110180,110182,110184],{"class":107,"line":9785},[105,110176,110177],{"class":115},"        pole_angle ",[105,110179,161],{"class":111},[105,110181,110021],{"class":115},[105,110183,333],{"class":164},[105,110185,33231],{"class":115},[105,110187,110188,110191,110193,110195,110197],{"class":107,"line":9790},[105,110189,110190],{"class":115},"        pole_angular_velocity ",[105,110192,161],{"class":111},[105,110194,110021],{"class":115},[105,110196,187],{"class":164},[105,110198,33231],{"class":115},[105,110200,110201],{"class":107,"line":9795},[105,110202,2391],{"emptyLinePlaceholder":32},[105,110204,110205,110208,110210,110213,110215,110217,110219,110221,110223],{"class":107,"line":9804},[105,110206,110207],{"class":115},"        action ",[105,110209,161],{"class":111},[105,110211,110212],{"class":164}," 2.0",[105,110214,6510],{"class":111},[105,110216,109805],{"class":115},[105,110218,597],{"class":111},[105,110220,61852],{"class":164},[105,110222,6510],{"class":111},[105,110224,110225],{"class":115}," pole_angular_velocity\n",[105,110227,110228,110230,110232,110234,110236,110238,110240,110242],{"class":107,"line":9809},[105,110229,110207],{"class":115},[105,110231,161],{"class":111},[105,110233,107432],{"class":115},[105,110235,648],{"class":111},[105,110237,102388],{"class":164},[105,110239,12427],{"class":115},[105,110241,102388],{"class":164},[105,110243,122],{"class":115},[105,110245,110246],{"class":107,"line":9815},[105,110247,2391],{"emptyLinePlaceholder":32},[105,110249,110250,110252,110254,110256,110258],{"class":107,"line":9836},[105,110251,106602],{"class":115},[105,110253,307],{"class":164},[105,110255,4434],{"class":115},[105,110257,161],{"class":111},[105,110259,107455],{"class":115},[105,110261,110262],{"class":107,"line":9842},[105,110263,101501],{"class":115},[105,110265,110266],{"class":107,"line":9856},[105,110267,2391],{"emptyLinePlaceholder":32},[105,110269,110270,110273,110275],{"class":107,"line":9862},[105,110271,110272],{"class":115},"        reward ",[105,110274,161],{"class":111},[105,110276,110277],{"class":115}," compute_reward(get_observation(data))\n",[105,110279,110280,110283,110285],{"class":107,"line":9889},[105,110281,110282],{"class":115},"        total_reward ",[105,110284,9469],{"class":111},[105,110286,110287],{"class":115}," reward\n",[105,110289,110290],{"class":107,"line":9898},[105,110291,2391],{"emptyLinePlaceholder":32},[105,110293,110294,110296,110298,110300,110302,110304,110306],{"class":107,"line":9904},[105,110295,2488],{"class":111},[105,110297,31601],{"class":115},[105,110299,444],{"class":111},[105,110301,5746],{"class":164},[105,110303,101544],{"class":111},[105,110305,4084],{"class":164},[105,110307,3730],{"class":115},[105,110309,110310,110312,110314,110317,110320,110323,110326,110328,110331,110334,110336,110338,110340,110342,110345,110347],{"class":107,"line":9912},[105,110311,34635],{"class":164},[105,110313,116],{"class":115},[105,110315,110316],{"class":220},"\"step:\"",[105,110318,110319],{"class":115},", step, ",[105,110321,110322],{"class":220},"\"obs:\"",[105,110324,110325],{"class":115},", np.round(obs, ",[105,110327,187],{"class":164},[105,110329,110330],{"class":115},"), ",[105,110332,110333],{"class":220},"\"action:\"",[105,110335,12427],{"class":115},[105,110337,32003],{"class":164},[105,110339,116],{"class":115},[105,110341,155],{"class":164},[105,110343,110344],{"class":115},"(action), ",[105,110346,187],{"class":164},[105,110348,30482],{"class":115},[105,110350,110351],{"class":107,"line":9917},[105,110352,2391],{"emptyLinePlaceholder":32},[105,110354,110355,110357,110359,110362,110364,110366,110369,110371],{"class":107,"line":16596},[105,110356,31284],{"class":164},[105,110358,116],{"class":115},[105,110360,110361],{"class":220},"\"total_reward:\"",[105,110363,12427],{"class":115},[105,110365,32003],{"class":164},[105,110367,110368],{"class":115},"(total_reward, ",[105,110370,187],{"class":164},[105,110372,30482],{"class":115},[105,110374,110375,110377,110379,110382,110385,110387],{"class":107,"line":16602},[105,110376,31284],{"class":164},[105,110378,116],{"class":115},[105,110380,110381],{"class":220},"\"final obs:\"",[105,110383,110384],{"class":115},", np.round(get_observation(data), ",[105,110386,187],{"class":164},[105,110388,30482],{"class":115},[105,110390,110391],{"class":107,"line":16625},[105,110392,2391],{"emptyLinePlaceholder":32},[105,110394,110395],{"class":107,"line":16631},[105,110396,2391],{"emptyLinePlaceholder":32},[105,110398,110399,110401,110403,110405,110407],{"class":107,"line":16654},[105,110400,1522],{"class":111},[105,110402,31205],{"class":164},[105,110404,101544],{"class":111},[105,110406,101547],{"class":220},[105,110408,3730],{"class":115},[105,110410,110411],{"class":107,"line":16668},[105,110412,101554],{"class":115},[14,110414,103555],{},[96,110416,110418],{"className":23815,"code":110417,"language":23817,"meta":22,"style":22},"touch ch6_cartpole.py\n",[102,110419,110420],{"__ignoreMap":22},[105,110421,110422,110424],{"class":107,"line":108},[105,110423,101268],{"class":1954},[105,110425,110426],{"class":220}," ch6_cartpole.py\n",[14,110428,110429],{},"运行：",[96,110431,110433],{"className":23815,"code":110432,"language":23817,"meta":22,"style":22},"python ch6_cartpole.py\n",[102,110434,110435],{"__ignoreMap":22},[105,110436,110437,110439],{"class":107,"line":108},[105,110438,30365],{"class":1954},[105,110440,110426],{"class":220},[76,110442,101557],{"id":101557},[14,110444,110445],{},"构造观测：",[96,110447,110449],{"className":30363,"code":110448,"language":30365,"meta":22,"style":22},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[102,110450,110451,110459],{"__ignoreMap":22},[105,110452,110453,110455,110457],{"class":107,"line":108},[105,110454,31932],{"class":111},[105,110456,109979],{"class":1954},[105,110458,109982],{"class":115},[105,110460,110461,110463],{"class":107,"line":28},[105,110462,4081],{"class":111},[105,110464,109989],{"class":115},[14,110466,110467,110470,110471,110473,110474,110476],{},[102,110468,110469],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[102,110472,104015],{}," 2 维，",[102,110475,104345],{}," 2 维，所以 obs 是 4 维。",[14,110478,110479],{},"设置初始角度：",[96,110481,110483],{"className":30363,"code":110482,"language":30365,"meta":22,"style":22},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[102,110484,110485,110497],{"__ignoreMap":22},[105,110486,110487,110489,110491,110493,110495],{"class":107,"line":108},[105,110488,104684],{"class":115},[105,110490,333],{"class":164},[105,110492,4434],{"class":115},[105,110494,161],{"class":111},[105,110496,110125],{"class":164},[105,110498,110499],{"class":107,"line":28},[105,110500,104528],{"class":115},[14,110502,110503],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110505,110506],{},"简单反馈控制：",[96,110508,110510],{"className":30363,"code":110509,"language":30365,"meta":22,"style":22},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[102,110511,110512,110532],{"__ignoreMap":22},[105,110513,110514,110516,110518,110520,110522,110524,110526,110528,110530],{"class":107,"line":108},[105,110515,107427],{"class":115},[105,110517,161],{"class":111},[105,110519,110212],{"class":164},[105,110521,6510],{"class":111},[105,110523,109805],{"class":115},[105,110525,597],{"class":111},[105,110527,61852],{"class":164},[105,110529,6510],{"class":111},[105,110531,110225],{"class":115},[105,110533,110534,110536,110538,110540,110542,110544,110546,110548],{"class":107,"line":28},[105,110535,107427],{"class":115},[105,110537,161],{"class":111},[105,110539,107432],{"class":115},[105,110541,648],{"class":111},[105,110543,102388],{"class":164},[105,110545,12427],{"class":115},[105,110547,102388],{"class":164},[105,110549,122],{"class":115},[14,110551,110552],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110554,110555],{},"限制动作：",[96,110557,110559],{"className":30363,"code":110558,"language":30365,"meta":22,"style":22},"np.clip(action, -1.0, 1.0)\n",[102,110560,110561],{"__ignoreMap":22},[105,110562,110563,110566,110568,110570,110572,110574],{"class":107,"line":108},[105,110564,110565],{"class":115},"np.clip(action, ",[105,110567,648],{"class":111},[105,110569,102388],{"class":164},[105,110571,12427],{"class":115},[105,110573,102388],{"class":164},[105,110575,122],{"class":115},[14,110577,110578,110579,110582],{},"因为 XML 里 ",[102,110580,110581],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[76,110584,101693],{"id":101693},[96,110586,110587],{"className":30363,"code":110448,"language":30365,"meta":22,"style":22},[102,110588,110589,110597],{"__ignoreMap":22},[105,110590,110591,110593,110595],{"class":107,"line":108},[105,110592,31932],{"class":111},[105,110594,109979],{"class":1954},[105,110596,109982],{"class":115},[105,110598,110599,110601],{"class":107,"line":28},[105,110600,4081],{"class":111},[105,110602,109989],{"class":115},[14,110604,110605,110606,110609,110610,110613,110614,110617],{},"这段定义了一个函数，用来获取当前观测。",[102,110607,110608],{},"data.qpos.copy()"," 是位置数组副本，",[102,110611,110612],{},"data.qvel.copy()"," 是速度数组副本。",[102,110615,110616],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110619,110620],{},"在本章模型里：",[96,110622,110625],{"className":110623,"code":110624,"language":5179,"meta":22},[5177],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[102,110626,110624],{"__ignoreMap":22},[14,110628,110629],{},"所以返回的 obs 是：",[96,110631,110634],{"className":110632,"code":110633,"language":5179,"meta":22},[5177],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[102,110635,110633],{"__ignoreMap":22},[96,110637,110639],{"className":30363,"code":110638,"language":30365,"meta":22,"style":22},"def compute_reward(obs: np.ndarray) -> float:\n",[102,110640,110641],{"__ignoreMap":22},[105,110642,110643,110645,110647,110649,110651],{"class":107,"line":108},[105,110644,31932],{"class":111},[105,110646,110004],{"class":1954},[105,110648,110007],{"class":115},[105,110650,155],{"class":164},[105,110652,3730],{"class":115},[14,110654,110655,110656,110659],{},"这行定义奖励函数。输入是观测 ",[102,110657,110658],{},"obs","，输出是一个浮点数奖励。",[96,110661,110663],{"className":30363,"code":110662,"language":30365,"meta":22,"style":22},"cart_x = obs[0]\npole_angle = obs[1]\n",[102,110664,110665,110678],{"__ignoreMap":22},[105,110666,110667,110670,110672,110674,110676],{"class":107,"line":108},[105,110668,110669],{"class":115},"cart_x ",[105,110671,161],{"class":111},[105,110673,110021],{"class":115},[105,110675,307],{"class":164},[105,110677,33231],{"class":115},[105,110679,110680,110683,110685,110687,110689],{"class":107,"line":28},[105,110681,110682],{"class":115},"pole_angle ",[105,110684,161],{"class":111},[105,110686,110021],{"class":115},[105,110688,333],{"class":164},[105,110690,33231],{"class":115},[14,110692,110693,110694,110697,110698,110701],{},"数组索引从 0 开始。",[102,110695,110696],{},"obs[0]"," 是第一个元素，也就是小车位置。",[102,110699,110700],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[96,110703,110704],{"className":30363,"code":109773,"language":30365,"meta":22,"style":22},[102,110705,110706],{"__ignoreMap":22},[105,110707,110708,110710,110712,110714,110716,110718,110720,110722,110724,110726,110728,110730,110732,110734],{"class":107,"line":108},[105,110709,17038],{"class":111},[105,110711,109782],{"class":164},[105,110713,116],{"class":115},[105,110715,102388],{"class":164},[105,110717,52256],{"class":111},[105,110719,109791],{"class":164},[105,110721,6510],{"class":111},[105,110723,109796],{"class":115},[105,110725,571],{"class":111},[105,110727,109796],{"class":115},[105,110729,648],{"class":111},[105,110731,109805],{"class":115},[105,110733,571],{"class":111},[105,110735,109810],{"class":115},[14,110737,110738,110739,110742,110743,110746],{},"这行计算奖励。",[102,110740,110741],{},"cart_x * cart_x"," 是小车位置的平方，",[102,110744,110745],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[96,110748,110750],{"className":30363,"code":110749,"language":30365,"meta":22,"style":22},"data.qpos[1] = 0.1\n",[102,110751,110752],{"__ignoreMap":22},[105,110753,110754,110756,110758,110760,110762],{"class":107,"line":108},[105,110755,104684],{"class":115},[105,110757,333],{"class":164},[105,110759,4434],{"class":115},[105,110761,161],{"class":111},[105,110763,110125],{"class":164},[14,110765,110766,110767,110769,110770,110772],{},"手动设置杆子的初始角度。因为 ",[102,110768,105441],{}," 是小车位置，",[102,110771,105444],{}," 是杆子角度，所以这里改的是杆子。",[96,110774,110775],{"className":30363,"code":104528,"language":30365,"meta":22,"style":22},[102,110776,110777],{"__ignoreMap":22},[105,110778,110779],{"class":107,"line":108},[105,110780,104528],{"class":115},[14,110782,105487,110783,110785],{},[102,110784,104015],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[96,110787,110789],{"className":30363,"code":110788,"language":30365,"meta":22,"style":22},"total_reward = 0.0\n",[102,110790,110791],{"__ignoreMap":22},[105,110792,110793,110796,110798],{"class":107,"line":108},[105,110794,110795],{"class":115},"total_reward ",[105,110797,161],{"class":111},[105,110799,104746],{"class":164},[14,110801,110802],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[96,110804,110806],{"className":30363,"code":110805,"language":30365,"meta":22,"style":22},"for step in range(1000):\n",[102,110807,110808],{"__ignoreMap":22},[105,110809,110810,110812,110814,110816,110818,110820,110822],{"class":107,"line":108},[105,110811,3016],{"class":111},[105,110813,31601],{"class":115},[105,110815,26028],{"class":111},[105,110817,32428],{"class":164},[105,110819,116],{"class":115},[105,110821,6402],{"class":164},[105,110823,30771],{"class":115},[14,110825,110826,110827,110829],{},"循环 1000 步。",[102,110828,107119],{}," 是当前步数，从 0 到 999。",[96,110831,110833],{"className":30363,"code":110832,"language":30365,"meta":22,"style":22},"obs = get_observation(data)\n",[102,110834,110835],{"__ignoreMap":22},[105,110836,110837,110840,110842],{"class":107,"line":108},[105,110838,110839],{"class":115},"obs ",[105,110841,161],{"class":111},[105,110843,110172],{"class":115},[14,110845,110846,110847,28370],{},"读取当前状态，保存到 ",[102,110848,110658],{},[96,110850,110852],{"className":30363,"code":110851,"language":30365,"meta":22,"style":22},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[102,110853,110854,110866],{"__ignoreMap":22},[105,110855,110856,110858,110860,110862,110864],{"class":107,"line":108},[105,110857,110682],{"class":115},[105,110859,161],{"class":111},[105,110861,110021],{"class":115},[105,110863,333],{"class":164},[105,110865,33231],{"class":115},[105,110867,110868,110871,110873,110875,110877],{"class":107,"line":28},[105,110869,110870],{"class":115},"pole_angular_velocity ",[105,110872,161],{"class":111},[105,110874,110021],{"class":115},[105,110876,187],{"class":164},[105,110878,33231],{"class":115},[14,110880,110881,110882,110885,110886,28370],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[102,110883,110884],{},"obs[3]","？因为 obs 的顺序是 ",[102,110887,110888],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[96,110890,110892],{"className":30363,"code":110891,"language":30365,"meta":22,"style":22},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[102,110893,110894],{"__ignoreMap":22},[105,110895,110896,110898,110900,110902,110904,110906,110908,110910,110912],{"class":107,"line":108},[105,110897,107427],{"class":115},[105,110899,161],{"class":111},[105,110901,110212],{"class":164},[105,110903,6510],{"class":111},[105,110905,109805],{"class":115},[105,110907,597],{"class":111},[105,110909,61852],{"class":164},[105,110911,6510],{"class":111},[105,110913,110225],{"class":115},[14,110915,110916,110917,101003,110919,110921],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[102,110918,105245],{},[102,110920,35314],{}," 是人为设置的系数，不是固定公式。",[96,110923,110925],{"className":30363,"code":110924,"language":30365,"meta":22,"style":22},"action = np.clip(action, -1.0, 1.0)\n",[102,110926,110927],{"__ignoreMap":22},[105,110928,110929,110931,110933,110935,110937,110939,110941,110943],{"class":107,"line":108},[105,110930,107427],{"class":115},[105,110932,161],{"class":111},[105,110934,107432],{"class":115},[105,110936,648],{"class":111},[105,110938,102388],{"class":164},[105,110940,12427],{"class":115},[105,110942,102388],{"class":164},[105,110944,122],{"class":115},[14,110946,110947],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[96,110949,110950],{"className":30363,"code":109758,"language":30365,"meta":22,"style":22},[102,110951,110952],{"__ignoreMap":22},[105,110953,110954,110956,110958,110960,110962],{"class":107,"line":108},[105,110955,105856],{"class":115},[105,110957,307],{"class":164},[105,110959,4434],{"class":115},[105,110961,161],{"class":111},[105,110963,107455],{"class":115},[14,110965,110966],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[96,110968,110969],{"className":30363,"code":104490,"language":30365,"meta":22,"style":22},[102,110970,110971],{"__ignoreMap":22},[105,110972,110973],{"class":107,"line":108},[105,110974,104490],{"class":115},[14,110976,110977,110978,110980],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[102,110979,106111],{}," 计算小车和杆子的下一刻状态。",[96,110982,110984],{"className":30363,"code":110983,"language":30365,"meta":22,"style":22},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[102,110985,110986,110995],{"__ignoreMap":22},[105,110987,110988,110991,110993],{"class":107,"line":108},[105,110989,110990],{"class":115},"reward ",[105,110992,161],{"class":111},[105,110994,110277],{"class":115},[105,110996,110997,110999,111001],{"class":107,"line":28},[105,110998,110795],{"class":115},[105,111000,9469],{"class":111},[105,111002,110287],{"class":115},[14,111004,111005,111006,111008,111009,111012,111013,28370],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[102,111007,9469],{}," 是简写，",[102,111010,111011],{},"total_reward += reward"," 等价于 ",[102,111014,111015],{},"total_reward = total_reward + reward",[96,111017,111019],{"className":30363,"code":111018,"language":30365,"meta":22,"style":22},"if step % 100 == 0:\n",[102,111020,111021],{"__ignoreMap":22},[105,111022,111023,111025,111027,111029,111031,111033,111035],{"class":107,"line":108},[105,111024,1522],{"class":111},[105,111026,31601],{"class":115},[105,111028,444],{"class":111},[105,111030,5746],{"class":164},[105,111032,101544],{"class":111},[105,111034,4084],{"class":164},[105,111036,3730],{"class":115},[14,111038,111039,111041,111042,111045],{},[102,111040,444],{}," 是取余数。",[102,111043,111044],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[96,111047,111049],{"className":30363,"code":111048,"language":30365,"meta":22,"style":22},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[102,111050,111051],{"__ignoreMap":22},[105,111052,111053,111055,111057,111059,111061,111063,111065,111067,111069,111071,111073,111075,111077,111079,111081,111083],{"class":107,"line":108},[105,111054,30400],{"class":164},[105,111056,116],{"class":115},[105,111058,110316],{"class":220},[105,111060,110319],{"class":115},[105,111062,110322],{"class":220},[105,111064,110325],{"class":115},[105,111066,187],{"class":164},[105,111068,110330],{"class":115},[105,111070,110333],{"class":220},[105,111072,12427],{"class":115},[105,111074,32003],{"class":164},[105,111076,116],{"class":115},[105,111078,155],{"class":164},[105,111080,110344],{"class":115},[105,111082,187],{"class":164},[105,111084,30482],{"class":115},[14,111086,111087,111088,111091,111092,111095],{},"打印当前步数、观测和动作。",[102,111089,111090],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[102,111093,111094],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[47,111097,102301],{"id":102300},[14,111099,111100],{},"观测向量:",[96,111102,111105],{"className":111103,"code":111104,"language":5179,"meta":22},[5177],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[102,111106,111104],{"__ignoreMap":22},[14,111108,111109],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111111,111112],{},"每隔 100 步会打印一次：",[96,111114,111117],{"className":111115,"code":111116,"language":5179,"meta":22},[5177],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[102,111118,111116],{"__ignoreMap":22},[14,111120,111121],{},"重点观察：",[59,111123,111124,111130,111135],{},[62,111125,111126,111129],{},[102,111127,111128],{},"pole_angle"," 是否越来越大。",[62,111131,111132,111134],{},[102,111133,109711],{}," 是否跑得太远。",[62,111136,111137,111138,82524,111140,28370],{},"action 是否经常被 clip 到 ",[102,111139,103900],{},[102,111141,333],{},[14,111143,111144],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[47,111146,102333],{"id":102332},[59,111148,111149,111155,111158,111164,111174,111180,111183],{},[62,111150,111151,111152,28370],{},"把初始角度改为 ",[102,111153,111154],{},"data.qpos[1] = 0.3",[62,111156,111157],{},"重新运行，观察控制是否变差。",[62,111159,111160,111161,111163],{},"把 actuator ",[102,111162,107052],{}," 改小。",[62,111165,111166,111167,111170,111171,28370],{},"打印 ",[102,111168,111169],{},"model.nq, model.nv, model.nu","，应为 ",[102,111172,111173],{},"2 2 1",[62,111175,111176,111177,111179],{},"把 reward 里的 ",[102,111178,110745],{}," 系数改大，观察总奖励变化。",[62,111181,111182],{},"把控制器改成反号，观察杆子是否更容易倒。",[62,111184,111185],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[47,111187,102438],{"id":102437},[76,111189,111190],{"id":111190},"杆子方向和预期不一致",[14,111192,102381,111193,111195,111196,111198],{},[102,111194,106224],{}," 和 capsule 的 ",[102,111197,103161],{},"，必要时用 viewer 可视化确认。",[76,111200,111201],{"id":111201},"控制器越控越倒",[14,111203,111204],{},"说明反馈符号可能反了，尝试:",[96,111206,111208],{"className":30363,"code":111207,"language":30365,"meta":22,"style":22},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[102,111209,111210],{"__ignoreMap":22},[105,111211,111212,111214,111216,111218,111220,111222,111224,111226,111228,111230],{"class":107,"line":108},[105,111213,107427],{"class":115},[105,111215,161],{"class":111},[105,111217,52256],{"class":111},[105,111219,105245],{"class":164},[105,111221,6510],{"class":111},[105,111223,109805],{"class":115},[105,111225,648],{"class":111},[105,111227,61852],{"class":164},[105,111229,6510],{"class":111},[105,111231,110225],{"class":115},[76,111233,111234],{"id":111234},"小车飞走",[14,111236,111237,111238,111240,111241,111244],{},"降低 ",[102,111239,107052],{}," 或缩小 ",[102,111242,111243],{},"action"," 的 clip 范围。",[76,111246,111248,111250],{"id":111247},"obs3-为什么是杆子角速度",[102,111249,110884],{}," 为什么是杆子角速度",[14,111252,111253],{},"因为这个模型里：",[96,111255,111258],{"className":111256,"code":111257,"language":5179,"meta":22},[5177],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[102,111259,111257],{"__ignoreMap":22},[14,111261,109732],{},[96,111263,111266],{"className":111264,"code":111265,"language":5179,"meta":22},[5177],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[102,111267,111265],{"__ignoreMap":22},[76,111269,111271],{"id":111270},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111273,111274],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[47,111276,102592],{"id":102591},[14,111278,111279],{},"一个控制任务通常包含：",[59,111281,111282,111285,111293,111298,111301],{},[62,111283,111284],{},"模型：Cartpole 的 body、joint、actuator。",[62,111286,111287,111288,328,111290,111292],{},"观测：从 ",[102,111289,104015],{},[102,111291,104345],{}," 里取状态。",[62,111294,111295,111296,28370],{},"动作：写入 ",[102,111297,101061],{},[62,111299,111300],{},"奖励：根据任务目标打分。",[62,111302,111303],{},"循环：obs -> action -> step -> reward。",[14,111305,111306],{},"这就是后面 Gymnasium 环境的基本骨架。",[5118,111308,104271],{},{"title":22,"searchDepth":28,"depth":28,"links":111310},[111311,111312,111313,111318,111322,111323,111324,111332],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":111314},[111315,111316,111317],{"id":109685,"depth":1171,"text":109686},{"id":109750,"depth":1171,"text":109751},{"id":109766,"depth":1171,"text":109767},{"id":101237,"depth":28,"text":101238,"children":111319},[111320,111321],{"id":101557,"depth":1171,"text":101557},{"id":101693,"depth":1171,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":111325},[111326,111327,111328,111329,111331],{"id":111190,"depth":1171,"text":111190},{"id":111201,"depth":1171,"text":111201},{"id":111234,"depth":1171,"text":111234},{"id":111247,"depth":1171,"text":111330},"obs[3] 为什么是杆子角速度",{"id":111270,"depth":1171,"text":111271},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109421,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111339,"title":111340,"body":111341,"description":22,"extension":30,"meta":113355,"navigation":32,"path":113356,"seo":113357,"stem":113358,"__hash__":113359},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111342,"toc":113331},[111343,111346,111348,111351,111353,111370,111373,111376,111382,111385,111387,111389,111413,111415,111429,111431,111472,111474,111492,111494,111497,111503,111506,111534,111538,111544,111569,111572,111603,111610,111613,111616,111622,111625,111631,111634,111640,111644,111647,111672,111675,111677,112437,112439,112451,112453,112464,112466,112469,112486,112489,112491,112502,112505,112507,112553,112556,112569,112572,112654,112657,112659,112675,112685,112698,112701,112740,112750,112761,112771,112784,112787,112816,112819,112829,112832,112838,112855,112866,112868,112874,112891,112902,112923,112926,112938,112941,112962,112965,112973,112981,112998,113001,113070,113077,113085,113088,113101,113108,113110,113113,113119,113122,113125,113131,113137,113139,113179,113181,113187,113196,113199,113201,113221,113224,113227,113233,113237,113239,113266,113269,113272,113299,113305,113308,113311,113313,113316,113319,113325,113328],[10,111344,111340],{"id":111345},"_7控制任务reacher-机械臂到达目标",[47,111347,100632],{"id":100631},[14,111349,111350],{},"本章搭建一个二维两关节 reacher 任务。",[14,111352,104316],{},[59,111354,111355,111358,111361,111364,111367],{},[62,111356,111357],{},"两个 hinge joint",[62,111359,111360],{},"两个 motor actuator",[62,111362,111363],{},"site 作为末端点和目标点",[62,111365,111366],{},"根据末端和目标距离设计 reward",[62,111368,111369],{},"构造机械臂任务的基本形式",[14,111371,111372],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111374,111375],{},"Reacher 任务可以理解为：",[96,111377,111380],{"className":111378,"code":111379,"language":5179,"meta":22},[5177],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[102,111381,111379],{"__ignoreMap":22},[14,111383,111384],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[47,111386,100755],{"id":100754},[14,111388,100758],{},[96,111390,111391],{"className":23815,"code":104373,"language":23817,"meta":22,"style":22},[102,111392,111393],{"__ignoreMap":22},[105,111394,111395,111397,111399,111401,111403,111405,111407,111409,111411],{"class":107,"line":108},[105,111396,24561],{"class":1954},[105,111398,26300],{"class":220},[105,111400,23827],{"class":220},[105,111402,26385],{"class":164},[105,111404,104388],{"class":220},[105,111406,100783],{"class":220},[105,111408,102486],{"class":220},[105,111410,100799],{"class":220},[105,111412,104397],{"class":220},[14,111414,102804],{},[96,111416,111417],{"className":23815,"code":100904,"language":23817,"meta":22,"style":22},[102,111418,111419],{"__ignoreMap":22},[105,111420,111421,111423,111425,111427],{"class":107,"line":108},[105,111422,23824],{"class":1954},[105,111424,23827],{"class":220},[105,111426,100915],{"class":220},[105,111428,100918],{"class":220},[14,111430,102821],{},[96,111432,111434],{"className":23815,"code":111433,"language":23817,"meta":22,"style":22},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[102,111435,111436,111453,111462],{"__ignoreMap":22},[105,111437,111438,111440,111442,111444,111447,111449,111451],{"class":107,"line":108},[105,111439,30315],{"class":1954},[105,111441,29161],{"class":220},[105,111443,25100],{"class":164},[105,111445,111446],{"class":220}," mujoco-reacher",[105,111448,100960],{"class":220},[105,111450,100963],{"class":164},[105,111452,100966],{"class":164},[105,111454,111455,111457,111459],{"class":107,"line":28},[105,111456,30315],{"class":1954},[105,111458,100973],{"class":220},[105,111460,111461],{"class":220}," mujoco-reacher\n",[105,111463,111464,111466,111468,111470],{"class":107,"line":1171},[105,111465,23824],{"class":1954},[105,111467,23827],{"class":220},[105,111469,100915],{"class":220},[105,111471,100918],{"class":220},[14,111473,100989],{},[59,111475,111476,111479,111482],{},[62,111477,111478],{},"本章使用低维状态，不使用图像输入。",[62,111480,111481],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[62,111483,111484,111485,328,111487,328,111489,111491],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[102,111486,104015],{},[102,111488,104345],{},[102,111490,103665],{}," 的方法一致。",[47,111493,101030],{"id":101029},[14,111495,111496],{},"Reacher 任务核心:",[96,111498,111501],{"className":111499,"code":111500,"language":5179,"meta":22},[5177],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[102,111502,111500],{"__ignoreMap":22},[14,111504,111505],{},"读取 site 世界坐标:",[96,111507,111509],{"className":30363,"code":111508,"language":30365,"meta":22,"style":22},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[102,111510,111511,111524],{"__ignoreMap":22},[105,111512,111513,111515,111517,111519,111522],{"class":107,"line":108},[105,111514,103619],{"class":115},[105,111516,161],{"class":111},[105,111518,103390],{"class":115},[105,111520,111521],{"class":220},"\"tip\"",[105,111523,122],{"class":115},[105,111525,111526,111529,111531],{"class":107,"line":28},[105,111527,111528],{"class":115},"tip_pos ",[105,111530,161],{"class":111},[105,111532,111533],{"class":115}," data.site_xpos[site_id]\n",[76,111535,111537],{"id":111536},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111539,111540,111541,111543],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[102,111542,104015],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[96,111545,111547],{"className":30363,"code":111546,"language":30365,"meta":22,"style":22},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[102,111548,111549,111559],{"__ignoreMap":22},[105,111550,111551,111554,111556],{"class":107,"line":108},[105,111552,111553],{"class":115},"tip ",[105,111555,161],{"class":111},[105,111557,111558],{"class":115}," data.site_xpos[tip_site_id]\n",[105,111560,111561,111564,111566],{"class":107,"line":28},[105,111562,111563],{"class":115},"target ",[105,111565,161],{"class":111},[105,111567,111568],{"class":115}," data.site_xpos[target_site_id]\n",[14,111570,111571],{},"这样 reward 就很容易写：",[96,111573,111575],{"className":30363,"code":111574,"language":30365,"meta":22,"style":22},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[102,111576,111577,111592],{"__ignoreMap":22},[105,111578,111579,111582,111584,111587,111589],{"class":107,"line":108},[105,111580,111581],{"class":115},"dist ",[105,111583,161],{"class":111},[105,111585,111586],{"class":115}," np.linalg.norm(tip ",[105,111588,648],{"class":111},[105,111590,111591],{"class":115}," target)\n",[105,111593,111594,111596,111598,111600],{"class":107,"line":28},[105,111595,110990],{"class":115},[105,111597,161],{"class":111},[105,111599,52256],{"class":111},[105,111601,111602],{"class":115},"dist\n",[14,111604,111605,111606,111609],{},"距离越小，",[102,111607,111608],{},"-dist"," 越接近 0，奖励越高。",[76,111611,111612],{"id":111612},"两关节机械臂的状态",[14,111614,111615],{},"这个模型有两个 hinge joint：",[96,111617,111620],{"className":111618,"code":111619,"language":5179,"meta":22},[5177],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[102,111621,111619],{"__ignoreMap":22},[14,111623,111624],{},"再加上末端和目标位置：",[96,111626,111629],{"className":111627,"code":111628,"language":5179,"meta":22},[5177],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[102,111630,111628],{"__ignoreMap":22},[14,111632,111633],{},"总维度：",[96,111635,111638],{"className":111636,"code":111637,"language":5179,"meta":22},[5177],"2 + 2 + 3 + 3 = 10\n",[102,111639,111637],{"__ignoreMap":22},[76,111641,111643],{"id":111642},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111645,111646],{},"本章把重力设为：",[96,111648,111650],{"className":53052,"code":111649,"language":53054,"meta":22,"style":22},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[102,111651,111652],{"__ignoreMap":22},[105,111653,111654,111656,111658,111660,111662,111664,111666,111668,111670],{"class":107,"line":108},[105,111655,1026],{"class":115},[105,111657,69151],{"class":51285},[105,111659,101179],{"class":1954},[105,111661,161],{"class":115},[105,111663,101184],{"class":220},[105,111665,101187],{"class":1954},[105,111667,161],{"class":115},[105,111669,103756],{"class":220},[105,111671,101129],{"class":115},[14,111673,111674],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[47,111676,101238],{"id":101237},[96,111678,111680],{"className":30363,"code":111679,"language":30365,"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",[102,111681,111682,111688,111698,111702,111706,111714,111719,111724,111728,111732,111737,111742,111746,111751,111756,111761,111765,111770,111775,111780,111785,111789,111793,111797,111801,111805,111810,111815,111819,111823,111827,111831,111835,111850,111859,111871,111894,111901,111905,111909,111919,111933,111947,111954,111958,111962,111976,111988,112000,112013,112028,112045,112049,112053,112065,112077,112085,112093,112097,112113,112118,112131,112144,112159,112163,112198,112230,112234,112238,112247,112251,112267,112277,112288,112304,112320,112336,112352,112356,112374,112394,112413,112417,112421,112433],{"__ignoreMap":22},[105,111683,111684,111686],{"class":107,"line":108},[105,111685,30377],{"class":111},[105,111687,101286],{"class":115},[105,111689,111690,111692,111694,111696],{"class":107,"line":28},[105,111691,30377],{"class":111},[105,111693,31365],{"class":115},[105,111695,31368],{"class":111},[105,111697,31371],{"class":115},[105,111699,111700],{"class":107,"line":1171},[105,111701,2391],{"emptyLinePlaceholder":32},[105,111703,111704],{"class":107,"line":1186},[105,111705,2391],{"emptyLinePlaceholder":32},[105,111707,111708,111710,111712],{"class":107,"line":1192},[105,111709,101299],{"class":164},[105,111711,13556],{"class":111},[105,111713,101304],{"class":220},[105,111715,111716],{"class":107,"line":1206},[105,111717,111718],{"class":220},"\u003Cmujoco model=\"two_link_reacher\">\n",[105,111720,111721],{"class":107,"line":1212},[105,111722,111723],{"class":220},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[105,111725,111726],{"class":107,"line":1303},[105,111727,2391],{"emptyLinePlaceholder":32},[105,111729,111730],{"class":107,"line":1309},[105,111731,101323],{"class":220},[105,111733,111734],{"class":107,"line":1321},[105,111735,111736],{"class":220},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[105,111738,111739],{"class":107,"line":1603},[105,111740,111741],{"class":220},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[105,111743,111744],{"class":107,"line":1608},[105,111745,2391],{"emptyLinePlaceholder":32},[105,111747,111748],{"class":107,"line":1614},[105,111749,111750],{"class":220},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[105,111752,111753],{"class":107,"line":1619},[105,111754,111755],{"class":220},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[105,111757,111758],{"class":107,"line":1633},[105,111759,111760],{"class":220},"      \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",[105,111762,111763],{"class":107,"line":1638},[105,111764,2391],{"emptyLinePlaceholder":32},[105,111766,111767],{"class":107,"line":1644},[105,111768,111769],{"class":220},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[105,111771,111772],{"class":107,"line":1665},[105,111773,111774],{"class":220},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[105,111776,111777],{"class":107,"line":1670},[105,111778,111779],{"class":220},"        \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",[105,111781,111782],{"class":107,"line":1684},[105,111783,111784],{"class":220},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[105,111786,111787],{"class":107,"line":1689},[105,111788,106423],{"class":220},[105,111790,111791],{"class":107,"line":1718},[105,111792,101352],{"class":220},[105,111794,111795],{"class":107,"line":1723},[105,111796,101357],{"class":220},[105,111798,111799],{"class":107,"line":1740},[105,111800,2391],{"emptyLinePlaceholder":32},[105,111802,111803],{"class":107,"line":1745},[105,111804,106440],{"class":220},[105,111806,111807],{"class":107,"line":1750},[105,111808,111809],{"class":220},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[105,111811,111812],{"class":107,"line":1755},[105,111813,111814],{"class":220},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[105,111816,111817],{"class":107,"line":1769},[105,111818,106450],{"class":220},[105,111820,111821],{"class":107,"line":1774},[105,111822,101362],{"class":220},[105,111824,111825],{"class":107,"line":2568},[105,111826,95683],{"class":220},[105,111828,111829],{"class":107,"line":2582},[105,111830,2391],{"emptyLinePlaceholder":32},[105,111832,111833],{"class":107,"line":2590},[105,111834,2391],{"emptyLinePlaceholder":32},[105,111836,111837,111839,111842,111845,111847],{"class":107,"line":2595},[105,111838,31932],{"class":111},[105,111840,111841],{"class":1954}," site_position",[105,111843,111844],{"class":115},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[105,111846,1291],{"class":164},[105,111848,111849],{"class":115},") -> np.ndarray:\n",[105,111851,111852,111854,111856],{"class":107,"line":2601},[105,111853,103385],{"class":115},[105,111855,161],{"class":111},[105,111857,111858],{"class":115}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[105,111860,111861,111863,111865,111867,111869],{"class":107,"line":2607},[105,111862,3092],{"class":111},[105,111864,103434],{"class":115},[105,111866,1026],{"class":111},[105,111868,4084],{"class":164},[105,111870,3730],{"class":115},[105,111872,111873,111875,111877,111879,111881,111884,111886,111888,111890,111892],{"class":107,"line":2612},[105,111874,103417],{"class":111},[105,111876,103420],{"class":164},[105,111878,116],{"class":115},[105,111880,168],{"class":111},[105,111882,111883],{"class":220},"\"site not found: ",[105,111885,1012],{"class":164},[105,111887,79795],{"class":115},[105,111889,1062],{"class":164},[105,111891,367],{"class":220},[105,111893,122],{"class":115},[105,111895,111896,111898],{"class":107,"line":7940},[105,111897,4081],{"class":111},[105,111899,111900],{"class":115}," data.site_xpos[site_id].copy()\n",[105,111902,111903],{"class":107,"line":7964},[105,111904,2391],{"emptyLinePlaceholder":32},[105,111906,111907],{"class":107,"line":7969},[105,111908,2391],{"emptyLinePlaceholder":32},[105,111910,111911,111913,111916],{"class":107,"line":7975},[105,111912,31932],{"class":111},[105,111914,111915],{"class":1954}," get_obs",[105,111917,111918],{"class":115},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[105,111920,111921,111924,111926,111929,111931],{"class":107,"line":8002},[105,111922,111923],{"class":115},"    tip ",[105,111925,161],{"class":111},[105,111927,111928],{"class":115}," site_position(model, data, ",[105,111930,111521],{"class":220},[105,111932,122],{"class":115},[105,111934,111935,111938,111940,111942,111945],{"class":107,"line":8007},[105,111936,111937],{"class":115},"    target ",[105,111939,161],{"class":111},[105,111941,111928],{"class":115},[105,111943,111944],{"class":220},"\"target\"",[105,111946,122],{"class":115},[105,111948,111949,111951],{"class":107,"line":8013},[105,111950,4081],{"class":111},[105,111952,111953],{"class":115}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[105,111955,111956],{"class":107,"line":8025},[105,111957,2391],{"emptyLinePlaceholder":32},[105,111959,111960],{"class":107,"line":8037},[105,111961,2391],{"emptyLinePlaceholder":32},[105,111963,111964,111966,111969,111972,111974],{"class":107,"line":8049},[105,111965,31932],{"class":111},[105,111967,111968],{"class":1954}," reward",[105,111970,111971],{"class":115},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[105,111973,155],{"class":164},[105,111975,3730],{"class":115},[105,111977,111978,111980,111982,111984,111986],{"class":107,"line":9708},[105,111979,111923],{"class":115},[105,111981,161],{"class":111},[105,111983,111928],{"class":115},[105,111985,111521],{"class":220},[105,111987,122],{"class":115},[105,111989,111990,111992,111994,111996,111998],{"class":107,"line":9733},[105,111991,111937],{"class":115},[105,111993,161],{"class":111},[105,111995,111928],{"class":115},[105,111997,111944],{"class":220},[105,111999,122],{"class":115},[105,112001,112002,112005,112007,112009,112011],{"class":107,"line":9756},[105,112003,112004],{"class":115},"    dist ",[105,112006,161],{"class":111},[105,112008,111586],{"class":115},[105,112010,648],{"class":111},[105,112012,111591],{"class":115},[105,112014,112015,112018,112020,112023,112025],{"class":107,"line":9780},[105,112016,112017],{"class":115},"    control_cost ",[105,112019,161],{"class":111},[105,112021,112022],{"class":164}," 0.01",[105,112024,6510],{"class":111},[105,112026,112027],{"class":115}," np.sum(np.square(data.ctrl))\n",[105,112029,112030,112032,112034,112036,112038,112040,112042],{"class":107,"line":9785},[105,112031,4081],{"class":111},[105,112033,109782],{"class":164},[105,112035,116],{"class":115},[105,112037,648],{"class":111},[105,112039,111581],{"class":115},[105,112041,648],{"class":111},[105,112043,112044],{"class":115}," control_cost)\n",[105,112046,112047],{"class":107,"line":9790},[105,112048,2391],{"emptyLinePlaceholder":32},[105,112050,112051],{"class":107,"line":9795},[105,112052,2391],{"emptyLinePlaceholder":32},[105,112054,112055,112057,112059,112061,112063],{"class":107,"line":9804},[105,112056,31932],{"class":111},[105,112058,1964],{"class":1954},[105,112060,101383],{"class":115},[105,112062,95671],{"class":164},[105,112064,3730],{"class":115},[105,112066,112067,112069,112071,112073,112075],{"class":107,"line":9809},[105,112068,101392],{"class":115},[105,112070,161],{"class":111},[105,112072,101397],{"class":115},[105,112074,101299],{"class":164},[105,112076,122],{"class":115},[105,112078,112079,112081,112083],{"class":107,"line":9815},[105,112080,101406],{"class":115},[105,112082,161],{"class":111},[105,112084,101411],{"class":115},[105,112086,112087,112089,112091],{"class":107,"line":9836},[105,112088,110138],{"class":115},[105,112090,161],{"class":111},[105,112092,104746],{"class":164},[105,112094,112095],{"class":107,"line":9842},[105,112096,2391],{"emptyLinePlaceholder":32},[105,112098,112099,112101,112103,112105,112107,112109,112111],{"class":107,"line":9856},[105,112100,3192],{"class":111},[105,112102,31601],{"class":115},[105,112104,26028],{"class":111},[105,112106,32428],{"class":164},[105,112108,116],{"class":115},[105,112110,65059],{"class":164},[105,112112,30771],{"class":115},[105,112114,112115],{"class":107,"line":9862},[105,112116,112117],{"class":115},"        mujoco.mj_forward(model, data)\n",[105,112119,112120,112123,112125,112127,112129],{"class":107,"line":9889},[105,112121,112122],{"class":115},"        tip ",[105,112124,161],{"class":111},[105,112126,111928],{"class":115},[105,112128,111521],{"class":220},[105,112130,122],{"class":115},[105,112132,112133,112136,112138,112140,112142],{"class":107,"line":9898},[105,112134,112135],{"class":115},"        target ",[105,112137,161],{"class":111},[105,112139,111928],{"class":115},[105,112141,111944],{"class":220},[105,112143,122],{"class":115},[105,112145,112146,112149,112151,112154,112156],{"class":107,"line":9904},[105,112147,112148],{"class":115},"        error ",[105,112150,161],{"class":111},[105,112152,112153],{"class":115}," target ",[105,112155,648],{"class":111},[105,112157,112158],{"class":115}," tip\n",[105,112160,112161],{"class":107,"line":9912},[105,112162,2391],{"emptyLinePlaceholder":32},[105,112164,112165,112167,112169,112171,112173,112176,112178,112180,112183,112185,112188,112190,112192,112194,112196],{"class":107,"line":9917},[105,112166,106602],{"class":115},[105,112168,307],{"class":164},[105,112170,4434],{"class":115},[105,112172,161],{"class":111},[105,112174,112175],{"class":115}," np.clip(",[105,112177,105245],{"class":164},[105,112179,6510],{"class":111},[105,112181,112182],{"class":115}," error[",[105,112184,193],{"class":164},[105,112186,112187],{"class":115},"], ",[105,112189,648],{"class":111},[105,112191,102388],{"class":164},[105,112193,12427],{"class":115},[105,112195,102388],{"class":164},[105,112197,122],{"class":115},[105,112199,112200,112202,112204,112206,112208,112210,112212,112214,112216,112218,112220,112222,112224,112226,112228],{"class":107,"line":16596},[105,112201,106602],{"class":115},[105,112203,333],{"class":164},[105,112205,4434],{"class":115},[105,112207,161],{"class":111},[105,112209,112175],{"class":115},[105,112211,105245],{"class":164},[105,112213,6510],{"class":111},[105,112215,112182],{"class":115},[105,112217,307],{"class":164},[105,112219,112187],{"class":115},[105,112221,648],{"class":111},[105,112223,102388],{"class":164},[105,112225,12427],{"class":115},[105,112227,102388],{"class":164},[105,112229,122],{"class":115},[105,112231,112232],{"class":107,"line":16602},[105,112233,2391],{"emptyLinePlaceholder":32},[105,112235,112236],{"class":107,"line":16625},[105,112237,101501],{"class":115},[105,112239,112240,112242,112244],{"class":107,"line":16631},[105,112241,110282],{"class":115},[105,112243,9469],{"class":111},[105,112245,112246],{"class":115}," reward(model, data)\n",[105,112248,112249],{"class":107,"line":16654},[105,112250,2391],{"emptyLinePlaceholder":32},[105,112252,112253,112255,112257,112259,112261,112263,112265],{"class":107,"line":16668},[105,112254,2488],{"class":111},[105,112256,31601],{"class":115},[105,112258,444],{"class":111},[105,112260,5746],{"class":164},[105,112262,101544],{"class":111},[105,112264,4084],{"class":164},[105,112266,3730],{"class":115},[105,112268,112269,112272,112274],{"class":107,"line":16688},[105,112270,112271],{"class":115},"            obs ",[105,112273,161],{"class":111},[105,112275,112276],{"class":115}," get_obs(model, data)\n",[105,112278,112279,112281,112283,112285],{"class":107,"line":16694},[105,112280,34635],{"class":164},[105,112282,116],{"class":115},[105,112284,110316],{"class":220},[105,112286,112287],{"class":115},", step)\n",[105,112289,112290,112292,112294,112297,112300,112302],{"class":107,"line":16705},[105,112291,34635],{"class":164},[105,112293,116],{"class":115},[105,112295,112296],{"class":220},"\"  tip:\"",[105,112298,112299],{"class":115},", np.round(tip, ",[105,112301,187],{"class":164},[105,112303,30482],{"class":115},[105,112305,112306,112308,112310,112313,112316,112318],{"class":107,"line":16728},[105,112307,34635],{"class":164},[105,112309,116],{"class":115},[105,112311,112312],{"class":220},"\"  target:\"",[105,112314,112315],{"class":115},", np.round(target, ",[105,112317,187],{"class":164},[105,112319,30482],{"class":115},[105,112321,112322,112324,112326,112329,112332,112334],{"class":107,"line":16750},[105,112323,34635],{"class":164},[105,112325,116],{"class":115},[105,112327,112328],{"class":220},"\"  ctrl:\"",[105,112330,112331],{"class":115},", np.round(data.ctrl.copy(), ",[105,112333,187],{"class":164},[105,112335,30482],{"class":115},[105,112337,112338,112340,112342,112345,112348,112350],{"class":107,"line":16755},[105,112339,34635],{"class":164},[105,112341,116],{"class":115},[105,112343,112344],{"class":220},"\"  obs_dim:\"",[105,112346,112347],{"class":115},", obs.shape[",[105,112349,307],{"class":164},[105,112351,4648],{"class":115},[105,112353,112354],{"class":107,"line":16761},[105,112355,2391],{"emptyLinePlaceholder":32},[105,112357,112358,112360,112362,112364,112366,112368,112370,112372],{"class":107,"line":16775},[105,112359,31284],{"class":164},[105,112361,116],{"class":115},[105,112363,110361],{"class":220},[105,112365,12427],{"class":115},[105,112367,32003],{"class":164},[105,112369,110368],{"class":115},[105,112371,187],{"class":164},[105,112373,30482],{"class":115},[105,112375,112376,112378,112380,112383,112386,112388,112390,112392],{"class":107,"line":16788},[105,112377,31284],{"class":164},[105,112379,116],{"class":115},[105,112381,112382],{"class":220},"\"final tip:\"",[105,112384,112385],{"class":115},", np.round(site_position(model, data, ",[105,112387,111521],{"class":220},[105,112389,110330],{"class":115},[105,112391,187],{"class":164},[105,112393,30482],{"class":115},[105,112395,112396,112398,112400,112403,112405,112407,112409,112411],{"class":107,"line":16793},[105,112397,31284],{"class":164},[105,112399,116],{"class":115},[105,112401,112402],{"class":220},"\"target:\"",[105,112404,112385],{"class":115},[105,112406,111944],{"class":220},[105,112408,110330],{"class":115},[105,112410,187],{"class":164},[105,112412,30482],{"class":115},[105,112414,112415],{"class":107,"line":16807},[105,112416,2391],{"emptyLinePlaceholder":32},[105,112418,112419],{"class":107,"line":16812},[105,112420,2391],{"emptyLinePlaceholder":32},[105,112422,112423,112425,112427,112429,112431],{"class":107,"line":16818},[105,112424,1522],{"class":111},[105,112426,31205],{"class":164},[105,112428,101544],{"class":111},[105,112430,101547],{"class":220},[105,112432,3730],{"class":115},[105,112434,112435],{"class":107,"line":16823},[105,112436,101554],{"class":115},[14,112438,103555],{},[96,112440,112442],{"className":23815,"code":112441,"language":23817,"meta":22,"style":22},"touch ch7_reacher.py\n",[102,112443,112444],{"__ignoreMap":22},[105,112445,112446,112448],{"class":107,"line":108},[105,112447,101268],{"class":1954},[105,112449,112450],{"class":220}," ch7_reacher.py\n",[14,112452,110429],{},[96,112454,112456],{"className":23815,"code":112455,"language":23817,"meta":22,"style":22},"python ch7_reacher.py\n",[102,112457,112458],{"__ignoreMap":22},[105,112459,112460,112462],{"class":107,"line":108},[105,112461,30365],{"class":1954},[105,112463,112450],{"class":220},[76,112465,101557],{"id":101557},[14,112467,112468],{},"读取 site 坐标：",[96,112470,112472],{"className":30363,"code":112471,"language":30365,"meta":22,"style":22},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[102,112473,112474],{"__ignoreMap":22},[105,112475,112476,112478,112480,112482,112484],{"class":107,"line":108},[105,112477,31932],{"class":111},[105,112479,111841],{"class":1954},[105,112481,111844],{"class":115},[105,112483,1291],{"class":164},[105,112485,111849],{"class":115},[14,112487,112488],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112490,110445],{},[96,112492,112494],{"className":30363,"code":112493,"language":30365,"meta":22,"style":22},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[102,112495,112496],{"__ignoreMap":22},[105,112497,112498,112500],{"class":107,"line":108},[105,112499,17038],{"class":111},[105,112501,111953],{"class":115},[14,112503,112504],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112506,109770],{},[96,112508,112510],{"className":30363,"code":112509,"language":30365,"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",[102,112511,112512,112524,112537],{"__ignoreMap":22},[105,112513,112514,112516,112518,112520,112522],{"class":107,"line":108},[105,112515,111581],{"class":115},[105,112517,161],{"class":111},[105,112519,111586],{"class":115},[105,112521,648],{"class":111},[105,112523,111591],{"class":115},[105,112525,112526,112529,112531,112533,112535],{"class":107,"line":28},[105,112527,112528],{"class":115},"control_cost ",[105,112530,161],{"class":111},[105,112532,112022],{"class":164},[105,112534,6510],{"class":111},[105,112536,112027],{"class":115},[105,112538,112539,112541,112543,112545,112547,112549,112551],{"class":107,"line":1171},[105,112540,17038],{"class":111},[105,112542,109782],{"class":164},[105,112544,116],{"class":115},[105,112546,648],{"class":111},[105,112548,111581],{"class":115},[105,112550,648],{"class":111},[105,112552,112044],{"class":115},[14,112554,112555],{},"奖励由两部分组成：",[59,112557,112558,112563],{},[62,112559,112560,112562],{},[102,112561,111608],{},"：末端离目标越远，奖励越低。",[62,112564,112565,112568],{},[102,112566,112567],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112570,112571],{},"简单控制器：",[96,112573,112575],{"className":30363,"code":112574,"language":30365,"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",[102,112576,112577,112590,112622],{"__ignoreMap":22},[105,112578,112579,112582,112584,112586,112588],{"class":107,"line":108},[105,112580,112581],{"class":115},"error ",[105,112583,161],{"class":111},[105,112585,112153],{"class":115},[105,112587,648],{"class":111},[105,112589,112158],{"class":115},[105,112591,112592,112594,112596,112598,112600,112602,112604,112606,112608,112610,112612,112614,112616,112618,112620],{"class":107,"line":28},[105,112593,105856],{"class":115},[105,112595,307],{"class":164},[105,112597,4434],{"class":115},[105,112599,161],{"class":111},[105,112601,112175],{"class":115},[105,112603,105245],{"class":164},[105,112605,6510],{"class":111},[105,112607,112182],{"class":115},[105,112609,193],{"class":164},[105,112611,112187],{"class":115},[105,112613,648],{"class":111},[105,112615,102388],{"class":164},[105,112617,12427],{"class":115},[105,112619,102388],{"class":164},[105,112621,122],{"class":115},[105,112623,112624,112626,112628,112630,112632,112634,112636,112638,112640,112642,112644,112646,112648,112650,112652],{"class":107,"line":1171},[105,112625,105856],{"class":115},[105,112627,333],{"class":164},[105,112629,4434],{"class":115},[105,112631,161],{"class":111},[105,112633,112175],{"class":115},[105,112635,105245],{"class":164},[105,112637,6510],{"class":111},[105,112639,112182],{"class":115},[105,112641,307],{"class":164},[105,112643,112187],{"class":115},[105,112645,648],{"class":111},[105,112647,102388],{"class":164},[105,112649,12427],{"class":115},[105,112651,102388],{"class":164},[105,112653,122],{"class":115},[14,112655,112656],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[76,112658,101693],{"id":101693},[96,112660,112661],{"className":30363,"code":112471,"language":30365,"meta":22,"style":22},[102,112662,112663],{"__ignoreMap":22},[105,112664,112665,112667,112669,112671,112673],{"class":107,"line":108},[105,112666,31932],{"class":111},[105,112668,111841],{"class":1954},[105,112670,111844],{"class":115},[105,112672,1291],{"class":164},[105,112674,111849],{"class":115},[14,112676,112677,112678,112680,112681,82524,112683,28370],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[102,112679,79795],{}," 是 site 的名字，比如 ",[102,112682,111521],{},[102,112684,111944],{},[96,112686,112688],{"className":30363,"code":112687,"language":30365,"meta":22,"style":22},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[102,112689,112690],{"__ignoreMap":22},[105,112691,112692,112694,112696],{"class":107,"line":108},[105,112693,103619],{"class":115},[105,112695,161],{"class":111},[105,112697,111858],{"class":115},[14,112699,112700],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[96,112702,112704],{"className":30363,"code":112703,"language":30365,"meta":22,"style":22},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[102,112705,112706,112718],{"__ignoreMap":22},[105,112707,112708,112710,112712,112714,112716],{"class":107,"line":108},[105,112709,1522],{"class":111},[105,112711,103434],{"class":115},[105,112713,1026],{"class":111},[105,112715,4084],{"class":164},[105,112717,3730],{"class":115},[105,112719,112720,112722,112724,112726,112728,112730,112732,112734,112736,112738],{"class":107,"line":28},[105,112721,103880],{"class":111},[105,112723,103420],{"class":164},[105,112725,116],{"class":115},[105,112727,168],{"class":111},[105,112729,111883],{"class":220},[105,112731,1012],{"class":164},[105,112733,79795],{"class":115},[105,112735,1062],{"class":164},[105,112737,367],{"class":220},[105,112739,122],{"class":115},[14,112741,112742,112743,112746,112747,112749],{},"如果 site 没找到，就主动报错。",[102,112744,112745],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[102,112748,79795],{}," 的值放进字符串里。",[96,112751,112753],{"className":30363,"code":112752,"language":30365,"meta":22,"style":22},"return data.site_xpos[site_id].copy()\n",[102,112754,112755],{"__ignoreMap":22},[105,112756,112757,112759],{"class":107,"line":108},[105,112758,17038],{"class":111},[105,112760,111900],{"class":115},[14,112762,112763,112764,112766,112767,112770],{},"返回这个 site 的世界坐标。",[102,112765,103665],{}," 里的每一行都是一个 site 的 ",[102,112768,112769],{},"(x, y, z)"," 坐标。",[96,112772,112774],{"className":30363,"code":112773,"language":30365,"meta":22,"style":22},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[102,112775,112776],{"__ignoreMap":22},[105,112777,112778,112780,112782],{"class":107,"line":108},[105,112779,31932],{"class":111},[105,112781,111915],{"class":1954},[105,112783,111918],{"class":115},[14,112785,112786],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[96,112788,112790],{"className":30363,"code":112789,"language":30365,"meta":22,"style":22},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[102,112791,112792,112804],{"__ignoreMap":22},[105,112793,112794,112796,112798,112800,112802],{"class":107,"line":108},[105,112795,111553],{"class":115},[105,112797,161],{"class":111},[105,112799,111928],{"class":115},[105,112801,111521],{"class":220},[105,112803,122],{"class":115},[105,112805,112806,112808,112810,112812,112814],{"class":107,"line":28},[105,112807,111563],{"class":115},[105,112809,161],{"class":111},[105,112811,111928],{"class":115},[105,112813,111944],{"class":220},[105,112815,122],{"class":115},[14,112817,112818],{},"分别读取末端点和目标点的世界坐标。",[96,112820,112821],{"className":30363,"code":112493,"language":30365,"meta":22,"style":22},[102,112822,112823],{"__ignoreMap":22},[105,112824,112825,112827],{"class":107,"line":108},[105,112826,17038],{"class":111},[105,112828,111953],{"class":115},[14,112830,112831],{},"把四部分拼成一个观测数组：",[96,112833,112836],{"className":112834,"code":112835,"language":5179,"meta":22},[5177],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[102,112837,112835],{"__ignoreMap":22},[96,112839,112841],{"className":30363,"code":112840,"language":30365,"meta":22,"style":22},"dist = np.linalg.norm(tip - target)\n",[102,112842,112843],{"__ignoreMap":22},[105,112844,112845,112847,112849,112851,112853],{"class":107,"line":108},[105,112846,111581],{"class":115},[105,112848,161],{"class":111},[105,112850,111586],{"class":115},[105,112852,648],{"class":111},[105,112854,111591],{"class":115},[14,112856,112857,112858,112861,112862,112865],{},"计算 tip 到 target 的距离。",[102,112859,112860],{},"tip - target"," 得到一个三维向量，",[102,112863,112864],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112867,14625],{},[96,112869,112872],{"className":112870,"code":112871,"language":5179,"meta":22},[5177],"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",[102,112873,112871],{"__ignoreMap":22},[96,112875,112877],{"className":30363,"code":112876,"language":30365,"meta":22,"style":22},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[102,112878,112879],{"__ignoreMap":22},[105,112880,112881,112883,112885,112887,112889],{"class":107,"line":108},[105,112882,112528],{"class":115},[105,112884,161],{"class":111},[105,112886,112022],{"class":164},[105,112888,6510],{"class":111},[105,112890,112027],{"class":115},[14,112892,112893,112894,112897,112898,112901],{},"计算动作惩罚。",[102,112895,112896],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[102,112899,112900],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[96,112903,112905],{"className":30363,"code":112904,"language":30365,"meta":22,"style":22},"return float(-dist - control_cost)\n",[102,112906,112907],{"__ignoreMap":22},[105,112908,112909,112911,112913,112915,112917,112919,112921],{"class":107,"line":108},[105,112910,17038],{"class":111},[105,112912,109782],{"class":164},[105,112914,116],{"class":115},[105,112916,648],{"class":111},[105,112918,111581],{"class":115},[105,112920,648],{"class":111},[105,112922,112044],{"class":115},[14,112924,112925],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[96,112927,112928],{"className":30363,"code":110788,"language":30365,"meta":22,"style":22},[102,112929,112930],{"__ignoreMap":22},[105,112931,112932,112934,112936],{"class":107,"line":108},[105,112933,110795],{"class":115},[105,112935,161],{"class":111},[105,112937,104746],{"class":164},[14,112939,112940],{},"累计奖励变量，记录整个运行过程的总分。",[96,112942,112944],{"className":30363,"code":112943,"language":30365,"meta":22,"style":22},"for step in range(500):\n",[102,112945,112946],{"__ignoreMap":22},[105,112947,112948,112950,112952,112954,112956,112958,112960],{"class":107,"line":108},[105,112949,3016],{"class":111},[105,112951,31601],{"class":115},[105,112953,26028],{"class":111},[105,112955,32428],{"class":164},[105,112957,116],{"class":115},[105,112959,65059],{"class":164},[105,112961,30771],{"class":115},[14,112963,112964],{},"运行 500 个控制步。",[96,112966,112967],{"className":30363,"code":104528,"language":30365,"meta":22,"style":22},[102,112968,112969],{"__ignoreMap":22},[105,112970,112971],{"class":107,"line":108},[105,112972,104528],{"class":115},[14,112974,112975,112976,101003,112978,112980],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[102,112977,103216],{},[102,112979,103219],{}," 是当前状态下的坐标。",[96,112982,112984],{"className":30363,"code":112983,"language":30365,"meta":22,"style":22},"error = target - tip\n",[102,112985,112986],{"__ignoreMap":22},[105,112987,112988,112990,112992,112994,112996],{"class":107,"line":108},[105,112989,112581],{"class":115},[105,112991,161],{"class":111},[105,112993,112153],{"class":115},[105,112995,648],{"class":111},[105,112997,112158],{"class":115},[14,112999,113000],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[96,113002,113004],{"className":30363,"code":113003,"language":30365,"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",[102,113005,113006,113038],{"__ignoreMap":22},[105,113007,113008,113010,113012,113014,113016,113018,113020,113022,113024,113026,113028,113030,113032,113034,113036],{"class":107,"line":108},[105,113009,105856],{"class":115},[105,113011,307],{"class":164},[105,113013,4434],{"class":115},[105,113015,161],{"class":111},[105,113017,112175],{"class":115},[105,113019,105245],{"class":164},[105,113021,6510],{"class":111},[105,113023,112182],{"class":115},[105,113025,193],{"class":164},[105,113027,112187],{"class":115},[105,113029,648],{"class":111},[105,113031,102388],{"class":164},[105,113033,12427],{"class":115},[105,113035,102388],{"class":164},[105,113037,122],{"class":115},[105,113039,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058,113060,113062,113064,113066,113068],{"class":107,"line":28},[105,113041,105856],{"class":115},[105,113043,333],{"class":164},[105,113045,4434],{"class":115},[105,113047,161],{"class":111},[105,113049,112175],{"class":115},[105,113051,105245],{"class":164},[105,113053,6510],{"class":111},[105,113055,112182],{"class":115},[105,113057,307],{"class":164},[105,113059,112187],{"class":115},[105,113061,648],{"class":111},[105,113063,102388],{"class":164},[105,113065,12427],{"class":115},[105,113067,102388],{"class":164},[105,113069,122],{"class":115},[14,113071,113072,113073,113076],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[102,113074,113075],{},"error -> ctrl -> step"," 的流程。",[96,113078,113079],{"className":30363,"code":104490,"language":30365,"meta":22,"style":22},[102,113080,113081],{"__ignoreMap":22},[105,113082,113083],{"class":107,"line":108},[105,113084,104490],{"class":115},[14,113086,113087],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[96,113089,113091],{"className":30363,"code":113090,"language":30365,"meta":22,"style":22},"obs = get_obs(model, data)\n",[102,113092,113093],{"__ignoreMap":22},[105,113094,113095,113097,113099],{"class":107,"line":108},[105,113096,110839],{"class":115},[105,113098,161],{"class":111},[105,113100,112276],{"class":115},[14,113102,113103,113104,113107],{},"读取最新观测。后面打印 ",[102,113105,113106],{},"obs.shape[0]","，用来确认观测维度是 10。",[47,113109,102301],{"id":102300},[14,113111,113112],{},"观测维度为:",[96,113114,113117],{"className":113115,"code":113116,"language":5179,"meta":22},[5177],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[102,113118,113116],{"__ignoreMap":22},[14,113120,113121],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113123,113124],{},"程序每 100 步打印：",[96,113126,113129],{"className":113127,"code":113128,"language":5179,"meta":22},[5177],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[102,113130,113128],{"__ignoreMap":22},[14,113132,113133,113134,113136],{},"如果控制有效，你应该看到最终 ",[102,113135,103216],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[47,113138,102333],{"id":102332},[59,113140,113141,113144,113147,113153,113159,113166,113176],{},[62,113142,113143],{},"修改目标点位置。",[62,113145,113146],{},"重新运行，观察最终 tip 是否变化。",[62,113148,113149,113150,113152],{},"把 gravity 改成 ",[102,113151,102574],{},"，观察控制是否变差。",[62,113154,111166,113155,111170,113157,28370],{},[102,113156,102143],{},[102,113158,193],{},[62,113160,102396,113161,102399,113163,113165],{},[102,113162,110581],{},[102,113164,107292],{},"，观察机械臂是否更难移动。",[62,113167,102396,113168,82515,113170,102399,113172,113175],{},[102,113169,103219],{},[102,113171,104131],{},[102,113173,113174],{},"0.2 0 0.6","，观察 reward 和 final tip。",[62,113177,113178],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[47,113180,102438],{"id":102437},[76,113182,113184],{"id":113183},"site-not-found",[102,113185,113186],{},"site not found",[14,113188,113189,113190,101003,113193,28370],{},"检查 XML 中是否有 ",[102,113191,113192],{},"site name=\"tip\"",[102,113194,113195],{},"site name=\"target\"",[76,113197,113198],{"id":113198},"机械臂完全不动",[14,113200,102508],{},[59,113202,113203,113208,113211,113216],{},[62,113204,113205,113207],{},[102,113206,102143],{}," 是否为 2",[62,113209,113210],{},"actuator 是否引用正确 joint",[62,113212,113213,113215],{},[102,113214,101061],{}," 是否被赋值",[62,113217,113218,113219],{},"是否执行了 ",[102,113220,100670],{},[76,113222,113223],{"id":113223},"控制效果不好",[14,113225,113226],{},"正常。本章重点不是控制器最优，而是任务结构:",[96,113228,113231],{"className":113229,"code":113230,"language":5179,"meta":22},[5177],"obs → action → mj_step → reward → next_obs\n",[102,113232,113230],{"__ignoreMap":22},[76,113234,113236],{"id":113235},"tip-坐标不变化","tip 坐标不变化",[14,113238,102560],{},[59,113240,113241,113246,113254,113263],{},[62,113242,113243,113244,28370],{},"是否每步调用了 ",[102,113245,100670],{},[62,113247,113248,113249,101003,113251,28370],{},"是否写入了 ",[102,113250,106111],{},[102,113252,113253],{},"data.ctrl[1]",[62,113255,113256,113257,328,113260,28370],{},"actuator 是否正确引用 ",[102,113258,113259],{},"joint1",[102,113261,113262],{},"joint2",[62,113264,113265],{},"控制输入是否太小。",[76,113267,113268],{"id":113268},"目标点不会动",[14,113270,113271],{},"本章的 target 是固定 site：",[96,113273,113275],{"className":53052,"code":113274,"language":53054,"meta":22,"style":22},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[102,113276,113277],{"__ignoreMap":22},[105,113278,113279,113281,113283,113285,113287,113289,113291,113293,113296],{"class":107,"line":108},[105,113280,1026],{"class":115},[105,113282,103195],{"class":51285},[105,113284,14912],{"class":1954},[105,113286,161],{"class":115},[105,113288,111944],{"class":220},[105,113290,101091],{"class":1954},[105,113292,161],{"class":115},[105,113294,113295],{"class":220},"\"0.5 0 0.4\"",[105,113297,113298],{"class":115}," ...\u002F>\n",[14,113300,113301,113302,113304],{},"它直接挂在 ",[102,113303,101826],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[76,113306,113307],{"id":113307},"机械臂不像真实机械臂",[14,113309,113310],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[47,113312,102592],{"id":102591},[14,113314,113315],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113317,113318],{},"核心公式：",[96,113320,113323],{"className":113321,"code":113322,"language":5179,"meta":22},[5177],"distance = ||tip - target||\nreward = -distance - action_cost\n",[102,113324,113322],{"__ignoreMap":22},[14,113326,113327],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5118,113329,113330],{},"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":28,"depth":28,"links":113332},[113333,113334,113335,113340,113344,113345,113346,113354],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":113336},[113337,113338,113339],{"id":111536,"depth":1171,"text":111537},{"id":111612,"depth":1171,"text":111612},{"id":111642,"depth":1171,"text":111643},{"id":101237,"depth":28,"text":101238,"children":113341},[113342,113343],{"id":101557,"depth":1171,"text":101557},{"id":101693,"depth":1171,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":113347},[113348,113349,113350,113351,113352,113353],{"id":113183,"depth":1171,"text":113186},{"id":113198,"depth":1171,"text":113198},{"id":113223,"depth":1171,"text":113223},{"id":113235,"depth":1171,"text":113236},{"id":113268,"depth":1171,"text":113268},{"id":113307,"depth":1171,"text":113307},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111340,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113361,"title":113362,"body":113363,"description":22,"extension":30,"meta":116825,"navigation":32,"path":116826,"seo":116827,"stem":116828,"__hash__":116829},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113364,"toc":116796},[113365,113368,113370,113373,113376,113401,113404,113410,113413,113419,113421,113423,113447,113449,113467,113469,113512,113514,113541,113543,113546,113598,113601,113607,113616,113619,113657,113660,113699,113702,113710,113717,113720,113726,113728,113782,113789,113834,113837,113841,113857,113867,113869,115130,115132,115144,115146,115157,115159,115162,115183,115186,115189,115222,115228,115231,115264,115267,115270,115311,115316,115330,115333,115346,115351,115374,115376,115391,115401,115416,115423,115443,115458,115476,115479,115496,115504,115520,115526,115558,115571,115603,115613,115648,115662,115708,115722,115764,115775,115788,115794,115827,115830,115857,115867,115907,115917,115934,115941,115959,115962,116003,116016,116031,116034,116057,116060,116072,116075,116094,116099,116120,116123,116138,116141,116175,116187,116202,116205,116230,116233,116252,116255,116287,116290,116314,116320,116350,116357,116370,116373,116375,116377,116383,116386,116389,116401,116404,116406,116460,116462,116466,116472,116481,116484,116491,116493,116516,116519,116523,116525,116543,116549,116551,116584,116587,116593,116597,116600,116620,116625,116629,116636,116656,116661,116665,116668,116688,116691,116777,116781,116784,116790,116793],[10,113366,113362],{"id":113367},"_8gymnasium-风格强化学习接口基础",[47,113369,100632],{"id":100631},[14,113371,113372],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113374,113375],{},"你将实现:",[96,113377,113379],{"className":30363,"code":113378,"language":30365,"meta":22,"style":22},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[102,113380,113381,113391],{"__ignoreMap":22},[105,113382,113383,113386,113388],{"class":107,"line":108},[105,113384,113385],{"class":115},"obs, info ",[105,113387,161],{"class":111},[105,113389,113390],{"class":115}," env.reset()\n",[105,113392,113393,113396,113398],{"class":107,"line":28},[105,113394,113395],{"class":115},"obs, reward, terminated, truncated, info ",[105,113397,161],{"class":111},[105,113399,113400],{"class":115}," env.step(action)\n",[14,113402,113403],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113405,113406,113407,113409],{},"前面章节的代码都是“脚本式”的：在 ",[102,113408,102280],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113411,113412],{},"可以先记住 Gymnasium 环境的核心交互：",[96,113414,113417],{"className":113415,"code":113416,"language":5179,"meta":22},[5177],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[102,113418,113416],{"__ignoreMap":22},[47,113420,100755],{"id":100754},[14,113422,100758],{},[96,113424,113425],{"className":23815,"code":104373,"language":23817,"meta":22,"style":22},[102,113426,113427],{"__ignoreMap":22},[105,113428,113429,113431,113433,113435,113437,113439,113441,113443,113445],{"class":107,"line":108},[105,113430,24561],{"class":1954},[105,113432,26300],{"class":220},[105,113434,23827],{"class":220},[105,113436,26385],{"class":164},[105,113438,104388],{"class":220},[105,113440,100783],{"class":220},[105,113442,102486],{"class":220},[105,113444,100799],{"class":220},[105,113446,104397],{"class":220},[14,113448,102804],{},[96,113450,113452],{"className":23815,"code":113451,"language":23817,"meta":22,"style":22},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[102,113453,113454],{"__ignoreMap":22},[105,113455,113456,113458,113460,113462,113464],{"class":107,"line":108},[105,113457,23824],{"class":1954},[105,113459,23827],{"class":220},[105,113461,100915],{"class":220},[105,113463,107696],{"class":220},[105,113465,113466],{"class":220}," gymnasium\n",[14,113468,102821],{},[96,113470,113472],{"className":23815,"code":113471,"language":23817,"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",[102,113473,113474,113491,113500],{"__ignoreMap":22},[105,113475,113476,113478,113480,113482,113485,113487,113489],{"class":107,"line":108},[105,113477,30315],{"class":1954},[105,113479,29161],{"class":220},[105,113481,25100],{"class":164},[105,113483,113484],{"class":220}," mujoco-gym-api",[105,113486,100960],{"class":220},[105,113488,100963],{"class":164},[105,113490,100966],{"class":164},[105,113492,113493,113495,113497],{"class":107,"line":28},[105,113494,30315],{"class":1954},[105,113496,100973],{"class":220},[105,113498,113499],{"class":220}," mujoco-gym-api\n",[105,113501,113502,113504,113506,113508,113510],{"class":107,"line":1171},[105,113503,23824],{"class":1954},[105,113505,23827],{"class":220},[105,113507,100915],{"class":220},[105,113509,107696],{"class":220},[105,113511,113466],{"class":220},[14,113513,100989],{},[59,113515,113516,113526,113529,113535],{},[62,113517,113518,113519,113522,113523,28370],{},"本章使用 ",[102,113520,113521],{},"gymnasium","，不是旧版 ",[102,113524,113525],{},"gym",[62,113527,113528],{},"Gymnasium API 与旧 Gym API 有差异。",[62,113530,113531,113532,28370],{},"旧 Gym 常见返回值是 4 个: ",[102,113533,113534],{},"obs, reward, done, info",[62,113536,113537,113538,28370],{},"Gymnasium 返回值是 5 个: ",[102,113539,113540],{},"obs, reward, terminated, truncated, info",[47,113542,101030],{"id":101029},[14,113544,113545],{},"强化学习环境接口包含:",[253,113547,113548,113557],{},[256,113549,113550],{},[259,113551,113552,113555],{},[262,113553,113554],{"align":23729},"方法",[262,113556,102681],{"align":23729},[300,113558,113559,113569,113579,113589],{},[259,113560,113561,113566],{},[305,113562,113563],{"align":23729},[102,113564,113565],{},"reset()",[305,113567,113568],{"align":23729},"重置环境",[259,113570,113571,113576],{},[305,113572,113573],{"align":23729},[102,113574,113575],{},"step(action)",[305,113577,113578],{"align":23729},"执行动作",[259,113580,113581,113586],{},[305,113582,113583],{"align":23729},[102,113584,113585],{},"observation_space",[305,113587,113588],{"align":23729},"观测空间",[259,113590,113591,113596],{},[305,113592,113593],{"align":23729},[102,113594,113595],{},"action_space",[305,113597,23647],{"align":23729},[14,113599,113600],{},"一个最小环境需要完成:",[96,113602,113605],{"className":113603,"code":113604,"language":5179,"meta":22},[5177],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[102,113606,113604],{"__ignoreMap":22},[76,113608,113610,101003,113613,104623],{"id":113609},"terminated-和-truncated-的区别",[102,113611,113612],{},"terminated",[102,113614,113615],{},"truncated",[14,113617,113618],{},"Gymnasium 把“结束”拆成两个概念：",[253,113620,113621,113631],{},[256,113622,113623],{},[259,113624,113625,113627,113629],{},[262,113626,104559],{"align":23729},[262,113628,100685],{"align":23729},[262,113630,21179],{"align":23729},[300,113632,113633,113645],{},[259,113634,113635,113639,113642],{},[305,113636,113637],{"align":23729},[102,113638,113612],{},[305,113640,113641],{"align":23729},"任务自然结束",[305,113643,113644],{"align":23729},"机械臂到达目标、机器人摔倒",[259,113646,113647,113651,113654],{},[305,113648,113649],{"align":23729},[102,113650,113615],{},[305,113652,113653],{"align":23729},"因外部限制截断",[305,113655,113656],{"align":23729},"达到最大步数、时间限制",[14,113658,113659],{},"本章中：",[96,113661,113663],{"className":30363,"code":113662,"language":30365,"meta":22,"style":22},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[102,113664,113665,113680],{"__ignoreMap":22},[105,113666,113667,113670,113672,113675,113677],{"class":107,"line":108},[105,113668,113669],{"class":115},"terminated ",[105,113671,161],{"class":111},[105,113673,113674],{"class":115}," dist ",[105,113676,1026],{"class":111},[105,113678,113679],{"class":164}," 0.05\n",[105,113681,113682,113685,113687,113689,113692,113694,113696],{"class":107,"line":28},[105,113683,113684],{"class":115},"truncated ",[105,113686,161],{"class":111},[105,113688,38858],{"class":164},[105,113690,113691],{"class":115},".steps ",[105,113693,1701],{"class":111},[105,113695,38858],{"class":164},[105,113697,113698],{"class":115},".max_steps\n",[14,113700,113701],{},"也就是：",[59,113703,113704,113707],{},[62,113705,113706],{},"末端距离目标小于 0.05，任务成功结束。",[62,113708,113709],{},"步数超过上限，episode 被截断。",[76,113711,113713,101003,113715],{"id":113712},"observation_space-和-action_space",[102,113714,113585],{},[102,113716,113595],{},[14,113718,113719],{},"这两个对象告诉算法：",[96,113721,113724],{"className":113722,"code":113723,"language":5179,"meta":22},[5177],"观测长什么样\n动作允许多大\n",[102,113725,113723],{"__ignoreMap":22},[14,113727,14625],{},[96,113729,113731],{"className":30363,"code":113730,"language":30365,"meta":22,"style":22},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[102,113732,113733],{"__ignoreMap":22},[105,113734,113735,113737,113740,113742,113745,113748,113751,113753,113755,113758,113760,113762,113764,113766,113768,113770,113772,113775,113777,113779],{"class":107,"line":108},[105,113736,30808],{"class":164},[105,113738,113739],{"class":115},".action_space ",[105,113741,161],{"class":111},[105,113743,113744],{"class":115}," spaces.Box(",[105,113746,113747],{"class":5208},"low",[105,113749,113750],{"class":111},"=-",[105,113752,102388],{"class":164},[105,113754,12427],{"class":115},[105,113756,113757],{"class":5208},"high",[105,113759,161],{"class":111},[105,113761,102388],{"class":164},[105,113763,12427],{"class":115},[105,113765,95948],{"class":5208},[105,113767,161],{"class":111},[105,113769,116],{"class":115},[105,113771,193],{"class":164},[105,113773,113774],{"class":115},",), ",[105,113776,93485],{"class":5208},[105,113778,161],{"class":111},[105,113780,113781],{"class":115},"np.float32)\n",[14,113783,113784,113785,113788],{},"表示动作是 2 维数组，每个值都在 ",[102,113786,113787],{},"[-1, 1]"," 范围内。",[96,113790,113792],{"className":30363,"code":113791,"language":30365,"meta":22,"style":22},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[102,113793,113794],{"__ignoreMap":22},[105,113795,113796,113798,113801,113803,113805,113807,113809,113812,113814,113816,113818,113820,113822,113824,113826,113828,113830,113832],{"class":107,"line":108},[105,113797,30808],{"class":164},[105,113799,113800],{"class":115},".observation_space ",[105,113802,161],{"class":111},[105,113804,113744],{"class":115},[105,113806,113747],{"class":5208},[105,113808,113750],{"class":111},[105,113810,113811],{"class":115},"np.inf, ",[105,113813,113757],{"class":5208},[105,113815,161],{"class":111},[105,113817,113811],{"class":115},[105,113819,95948],{"class":5208},[105,113821,161],{"class":111},[105,113823,116],{"class":115},[105,113825,562],{"class":164},[105,113827,113774],{"class":115},[105,113829,93485],{"class":5208},[105,113831,161],{"class":111},[105,113833,113781],{"class":115},[14,113835,113836],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[76,113838,113840],{"id":113839},"frame_skip-是什么","frame_skip 是什么",[96,113842,113844],{"className":30363,"code":113843,"language":30365,"meta":22,"style":22},"self.frame_skip = 5\n",[102,113845,113846],{"__ignoreMap":22},[105,113847,113848,113850,113853,113855],{"class":107,"line":108},[105,113849,30808],{"class":164},[105,113851,113852],{"class":115},".frame_skip ",[105,113854,161],{"class":111},[105,113856,54412],{"class":164},[14,113858,113859,113860,113863,113864,113866],{},"表示外部调用一次 ",[102,113861,113862],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[102,113865,101200],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[47,113868,101238],{"id":101237},[96,113870,113872],{"className":30363,"code":113871,"language":30365,"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",[102,113873,113874,113886,113892,113902,113913,113917,113921,113929,113934,113938,113942,113946,113950,113954,113958,113962,113967,113971,113975,113979,113984,113988,113992,113996,114000,114004,114008,114012,114016,114020,114024,114028,114032,114036,114054,114069,114073,114086,114096,114111,114128,114132,114153,114172,114197,114211,114215,114225,114237,114247,114251,114293,114331,114335,114345,114361,114376,114395,114402,114406,114419,114434,114449,114462,114481,114497,114501,114542,114557,114572,114576,114615,114626,114639,114643,114653,114662,114666,114676,114691,114709,114713,114724,114741,114754,114758,114768,114772,114783,114794,114798,114812,114826,114842,114846,114859,114876,114891,114898,114902,114906,114918,114928,114946,114958,114970,114974,114982,114998,115007,115016,115024,115066,115079,115084,115088,115106,115110,115114,115126],{"__ignoreMap":22},[105,113875,113876,113878,113881,113883],{"class":107,"line":108},[105,113877,30377],{"class":111},[105,113879,113880],{"class":115}," gymnasium ",[105,113882,31368],{"class":111},[105,113884,113885],{"class":115}," gym\n",[105,113887,113888,113890],{"class":107,"line":28},[105,113889,30377],{"class":111},[105,113891,101286],{"class":115},[105,113893,113894,113896,113898,113900],{"class":107,"line":1171},[105,113895,30377],{"class":111},[105,113897,31365],{"class":115},[105,113899,31368],{"class":111},[105,113901,31371],{"class":115},[105,113903,113904,113906,113908,113910],{"class":107,"line":1186},[105,113905,30722],{"class":111},[105,113907,113880],{"class":115},[105,113909,30377],{"class":111},[105,113911,113912],{"class":115}," spaces\n",[105,113914,113915],{"class":107,"line":1192},[105,113916,2391],{"emptyLinePlaceholder":32},[105,113918,113919],{"class":107,"line":1206},[105,113920,2391],{"emptyLinePlaceholder":32},[105,113922,113923,113925,113927],{"class":107,"line":1212},[105,113924,101299],{"class":164},[105,113926,13556],{"class":111},[105,113928,101304],{"class":220},[105,113930,113931],{"class":107,"line":1303},[105,113932,113933],{"class":220},"\u003Cmujoco model=\"gym_reacher\">\n",[105,113935,113936],{"class":107,"line":1309},[105,113937,111723],{"class":220},[105,113939,113940],{"class":107,"line":1321},[105,113941,2391],{"emptyLinePlaceholder":32},[105,113943,113944],{"class":107,"line":1603},[105,113945,101323],{"class":220},[105,113947,113948],{"class":107,"line":1608},[105,113949,111741],{"class":220},[105,113951,113952],{"class":107,"line":1614},[105,113953,2391],{"emptyLinePlaceholder":32},[105,113955,113956],{"class":107,"line":1619},[105,113957,111750],{"class":220},[105,113959,113960],{"class":107,"line":1633},[105,113961,111755],{"class":220},[105,113963,113964],{"class":107,"line":1638},[105,113965,113966],{"class":220},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[105,113968,113969],{"class":107,"line":1644},[105,113970,2391],{"emptyLinePlaceholder":32},[105,113972,113973],{"class":107,"line":1665},[105,113974,111769],{"class":220},[105,113976,113977],{"class":107,"line":1670},[105,113978,111774],{"class":220},[105,113980,113981],{"class":107,"line":1684},[105,113982,113983],{"class":220},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[105,113985,113986],{"class":107,"line":1689},[105,113987,111784],{"class":220},[105,113989,113990],{"class":107,"line":1718},[105,113991,106423],{"class":220},[105,113993,113994],{"class":107,"line":1723},[105,113995,101352],{"class":220},[105,113997,113998],{"class":107,"line":1740},[105,113999,101357],{"class":220},[105,114001,114002],{"class":107,"line":1745},[105,114003,2391],{"emptyLinePlaceholder":32},[105,114005,114006],{"class":107,"line":1750},[105,114007,106440],{"class":220},[105,114009,114010],{"class":107,"line":1755},[105,114011,111809],{"class":220},[105,114013,114014],{"class":107,"line":1769},[105,114015,111814],{"class":220},[105,114017,114018],{"class":107,"line":1774},[105,114019,106450],{"class":220},[105,114021,114022],{"class":107,"line":2568},[105,114023,101362],{"class":220},[105,114025,114026],{"class":107,"line":2582},[105,114027,95683],{"class":220},[105,114029,114030],{"class":107,"line":2590},[105,114031,2391],{"emptyLinePlaceholder":32},[105,114033,114034],{"class":107,"line":2595},[105,114035,2391],{"emptyLinePlaceholder":32},[105,114037,114038,114040,114043,114045,114047,114049,114052],{"class":107,"line":2601},[105,114039,14686],{"class":111},[105,114041,114042],{"class":1954}," ReacherEnv",[105,114044,116],{"class":115},[105,114046,113525],{"class":1954},[105,114048,674],{"class":115},[105,114050,114051],{"class":1954},"Env",[105,114053,30771],{"class":115},[105,114055,114056,114059,114061,114063,114066],{"class":107,"line":2607},[105,114057,114058],{"class":115},"    metadata ",[105,114060,161],{"class":111},[105,114062,4439],{"class":115},[105,114064,114065],{"class":220},"\"render_modes\"",[105,114067,114068],{"class":115},": []}\n",[105,114070,114071],{"class":107,"line":2612},[105,114072,2391],{"emptyLinePlaceholder":32},[105,114074,114075,114077,114079,114082,114084],{"class":107,"line":7940},[105,114076,30786],{"class":111},[105,114078,30789],{"class":164},[105,114080,114081],{"class":115},"(self) -> ",[105,114083,95671],{"class":164},[105,114085,3730],{"class":115},[105,114087,114088,114090,114092,114094],{"class":107,"line":7964},[105,114089,30802],{"class":164},[105,114091,17253],{"class":115},[105,114093,30814],{"class":164},[105,114095,1967],{"class":115},[105,114097,114098,114100,114103,114105,114107,114109],{"class":107,"line":7969},[105,114099,30830],{"class":164},[105,114101,114102],{"class":115},".model ",[105,114104,161],{"class":111},[105,114106,101397],{"class":115},[105,114108,101299],{"class":164},[105,114110,122],{"class":115},[105,114112,114113,114115,114118,114120,114123,114125],{"class":107,"line":7975},[105,114114,30830],{"class":164},[105,114116,114117],{"class":115},".data ",[105,114119,161],{"class":111},[105,114121,114122],{"class":115}," mujoco.MjData(",[105,114124,30808],{"class":164},[105,114126,114127],{"class":115},".model)\n",[105,114129,114130],{"class":107,"line":8002},[105,114131,2391],{"emptyLinePlaceholder":32},[105,114133,114134,114136,114139,114141,114144,114146,114149,114151],{"class":107,"line":8007},[105,114135,30830],{"class":164},[105,114137,114138],{"class":115},".tip_site_id ",[105,114140,161],{"class":111},[105,114142,114143],{"class":115}," mujoco.mj_name2id(",[105,114145,30808],{"class":164},[105,114147,114148],{"class":115},".model, mujoco.mjtObj.mjOBJ_SITE, ",[105,114150,111521],{"class":220},[105,114152,122],{"class":115},[105,114154,114155,114157,114160,114162,114164,114166,114168,114170],{"class":107,"line":8013},[105,114156,30830],{"class":164},[105,114158,114159],{"class":115},".target_site_id ",[105,114161,161],{"class":111},[105,114163,114143],{"class":115},[105,114165,30808],{"class":164},[105,114167,114148],{"class":115},[105,114169,111944],{"class":220},[105,114171,122],{"class":115},[105,114173,114174,114176,114178,114180,114182,114184,114187,114189,114191,114193,114195],{"class":107,"line":8025},[105,114175,2488],{"class":111},[105,114177,38858],{"class":164},[105,114179,114138],{"class":115},[105,114181,1026],{"class":111},[105,114183,4084],{"class":164},[105,114185,114186],{"class":111}," or",[105,114188,38858],{"class":164},[105,114190,114159],{"class":115},[105,114192,1026],{"class":111},[105,114194,4084],{"class":164},[105,114196,3730],{"class":115},[105,114198,114199,114202,114204,114206,114209],{"class":107,"line":8037},[105,114200,114201],{"class":111},"            raise",[105,114203,103420],{"class":164},[105,114205,116],{"class":115},[105,114207,114208],{"class":220},"\"required sites not found\"",[105,114210,122],{"class":115},[105,114212,114213],{"class":107,"line":8049},[105,114214,2391],{"emptyLinePlaceholder":32},[105,114216,114217,114219,114221,114223],{"class":107,"line":9708},[105,114218,30830],{"class":164},[105,114220,113852],{"class":115},[105,114222,161],{"class":111},[105,114224,54412],{"class":164},[105,114226,114227,114229,114232,114234],{"class":107,"line":9733},[105,114228,30830],{"class":164},[105,114230,114231],{"class":115},".max_steps ",[105,114233,161],{"class":111},[105,114235,114236],{"class":164}," 200\n",[105,114238,114239,114241,114243,114245],{"class":107,"line":9756},[105,114240,30830],{"class":164},[105,114242,113691],{"class":115},[105,114244,161],{"class":111},[105,114246,47318],{"class":164},[105,114248,114249],{"class":107,"line":9780},[105,114250,2391],{"emptyLinePlaceholder":32},[105,114252,114253,114255,114257,114259,114261,114263,114265,114267,114269,114271,114273,114275,114277,114279,114281,114283,114285,114287,114289,114291],{"class":107,"line":9785},[105,114254,30830],{"class":164},[105,114256,113739],{"class":115},[105,114258,161],{"class":111},[105,114260,113744],{"class":115},[105,114262,113747],{"class":5208},[105,114264,113750],{"class":111},[105,114266,102388],{"class":164},[105,114268,12427],{"class":115},[105,114270,113757],{"class":5208},[105,114272,161],{"class":111},[105,114274,102388],{"class":164},[105,114276,12427],{"class":115},[105,114278,95948],{"class":5208},[105,114280,161],{"class":111},[105,114282,116],{"class":115},[105,114284,193],{"class":164},[105,114286,113774],{"class":115},[105,114288,93485],{"class":5208},[105,114290,161],{"class":111},[105,114292,113781],{"class":115},[105,114294,114295,114297,114299,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319,114321,114323,114325,114327,114329],{"class":107,"line":9790},[105,114296,30830],{"class":164},[105,114298,113800],{"class":115},[105,114300,161],{"class":111},[105,114302,113744],{"class":115},[105,114304,113747],{"class":5208},[105,114306,113750],{"class":111},[105,114308,113811],{"class":115},[105,114310,113757],{"class":5208},[105,114312,161],{"class":111},[105,114314,113811],{"class":115},[105,114316,95948],{"class":5208},[105,114318,161],{"class":111},[105,114320,116],{"class":115},[105,114322,562],{"class":164},[105,114324,113774],{"class":115},[105,114326,93485],{"class":5208},[105,114328,161],{"class":111},[105,114330,113781],{"class":115},[105,114332,114333],{"class":107,"line":9795},[105,114334,2391],{"emptyLinePlaceholder":32},[105,114336,114337,114339,114342],{"class":107,"line":9804},[105,114338,30786],{"class":111},[105,114340,114341],{"class":1954}," _get_obs",[105,114343,114344],{"class":115},"(self) -> np.ndarray:\n",[105,114346,114347,114349,114351,114353,114356,114358],{"class":107,"line":9809},[105,114348,112122],{"class":115},[105,114350,161],{"class":111},[105,114352,38858],{"class":164},[105,114354,114355],{"class":115},".data.site_xpos[",[105,114357,30808],{"class":164},[105,114359,114360],{"class":115},".tip_site_id].copy()\n",[105,114362,114363,114365,114367,114369,114371,114373],{"class":107,"line":9815},[105,114364,112135],{"class":115},[105,114366,161],{"class":111},[105,114368,38858],{"class":164},[105,114370,114355],{"class":115},[105,114372,30808],{"class":164},[105,114374,114375],{"class":115},".target_site_id].copy()\n",[105,114377,114378,114380,114382,114385,114387,114390,114392],{"class":107,"line":9836},[105,114379,110167],{"class":115},[105,114381,161],{"class":111},[105,114383,114384],{"class":115}," np.concatenate([",[105,114386,30808],{"class":164},[105,114388,114389],{"class":115},".data.qpos.copy(), ",[105,114391,30808],{"class":164},[105,114393,114394],{"class":115},".data.qvel.copy(), tip, target])\n",[105,114396,114397,114399],{"class":107,"line":9842},[105,114398,14744],{"class":111},[105,114400,114401],{"class":115}," obs.astype(np.float32)\n",[105,114403,114404],{"class":107,"line":9856},[105,114405,2391],{"emptyLinePlaceholder":32},[105,114407,114408,114410,114413,114415,114417],{"class":107,"line":9862},[105,114409,30786],{"class":111},[105,114411,114412],{"class":1954}," _get_reward",[105,114414,114081],{"class":115},[105,114416,155],{"class":164},[105,114418,3730],{"class":115},[105,114420,114421,114423,114425,114427,114429,114431],{"class":107,"line":9889},[105,114422,112122],{"class":115},[105,114424,161],{"class":111},[105,114426,38858],{"class":164},[105,114428,114355],{"class":115},[105,114430,30808],{"class":164},[105,114432,114433],{"class":115},".tip_site_id]\n",[105,114435,114436,114438,114440,114442,114444,114446],{"class":107,"line":9898},[105,114437,112135],{"class":115},[105,114439,161],{"class":111},[105,114441,38858],{"class":164},[105,114443,114355],{"class":115},[105,114445,30808],{"class":164},[105,114447,114448],{"class":115},".target_site_id]\n",[105,114450,114451,114454,114456,114458,114460],{"class":107,"line":9904},[105,114452,114453],{"class":115},"        dist ",[105,114455,161],{"class":111},[105,114457,111586],{"class":115},[105,114459,648],{"class":111},[105,114461,111591],{"class":115},[105,114463,114464,114467,114469,114471,114473,114476,114478],{"class":107,"line":9912},[105,114465,114466],{"class":115},"        control_cost ",[105,114468,161],{"class":111},[105,114470,112022],{"class":164},[105,114472,6510],{"class":111},[105,114474,114475],{"class":115}," np.sum(np.square(",[105,114477,30808],{"class":164},[105,114479,114480],{"class":115},".data.ctrl))\n",[105,114482,114483,114485,114487,114489,114491,114493,114495],{"class":107,"line":9917},[105,114484,14744],{"class":111},[105,114486,109782],{"class":164},[105,114488,116],{"class":115},[105,114490,648],{"class":111},[105,114492,111581],{"class":115},[105,114494,648],{"class":111},[105,114496,112044],{"class":115},[105,114498,114499],{"class":107,"line":16596},[105,114500,2391],{"emptyLinePlaceholder":32},[105,114502,114503,114505,114508,114511,114513,114516,114518,114520,114522,114524,114526,114529,114532,114534,114536,114538,114540],{"class":107,"line":16602},[105,114504,30786],{"class":111},[105,114506,114507],{"class":1954}," reset",[105,114509,114510],{"class":115},"(self, ",[105,114512,571],{"class":111},[105,114514,114515],{"class":115},", seed: ",[105,114517,119],{"class":164},[105,114519,25094],{"class":111},[105,114521,38918],{"class":164},[105,114523,13556],{"class":111},[105,114525,38918],{"class":164},[105,114527,114528],{"class":115},", options: ",[105,114530,114531],{"class":164},"dict",[105,114533,25094],{"class":111},[105,114535,38918],{"class":164},[105,114537,13556],{"class":111},[105,114539,38918],{"class":164},[105,114541,30771],{"class":115},[105,114543,114544,114546,114549,114552,114554],{"class":107,"line":16625},[105,114545,30802],{"class":164},[105,114547,114548],{"class":115},"().reset(",[105,114550,114551],{"class":5208},"seed",[105,114553,161],{"class":111},[105,114555,114556],{"class":115},"seed)\n",[105,114558,114559,114562,114564,114567,114569],{"class":107,"line":16631},[105,114560,114561],{"class":115},"        mujoco.mj_resetData(",[105,114563,30808],{"class":164},[105,114565,114566],{"class":115},".model, ",[105,114568,30808],{"class":164},[105,114570,114571],{"class":115},".data)\n",[105,114573,114574],{"class":107,"line":16654},[105,114575,2391],{"emptyLinePlaceholder":32},[105,114577,114578,114580,114583,114585,114587,114590,114592,114594,114596,114598,114600,114602,114604,114606,114608,114610,114612],{"class":107,"line":16668},[105,114579,30830],{"class":164},[105,114581,114582],{"class":115},".data.qpos[:] ",[105,114584,161],{"class":111},[105,114586,38858],{"class":164},[105,114588,114589],{"class":115},".np_random.uniform(",[105,114591,113747],{"class":5208},[105,114593,113750],{"class":111},[105,114595,86195],{"class":164},[105,114597,12427],{"class":115},[105,114599,113757],{"class":5208},[105,114601,161],{"class":111},[105,114603,86195],{"class":164},[105,114605,12427],{"class":115},[105,114607,31481],{"class":5208},[105,114609,161],{"class":111},[105,114611,30808],{"class":164},[105,114613,114614],{"class":115},".model.nq)\n",[105,114616,114617,114619,114622,114624],{"class":107,"line":16688},[105,114618,30830],{"class":164},[105,114620,114621],{"class":115},".data.qvel[:] ",[105,114623,161],{"class":111},[105,114625,104746],{"class":164},[105,114627,114628,114631,114633,114635,114637],{"class":107,"line":16694},[105,114629,114630],{"class":115},"        mujoco.mj_forward(",[105,114632,30808],{"class":164},[105,114634,114566],{"class":115},[105,114636,30808],{"class":164},[105,114638,114571],{"class":115},[105,114640,114641],{"class":107,"line":16705},[105,114642,2391],{"emptyLinePlaceholder":32},[105,114644,114645,114647,114649,114651],{"class":107,"line":16728},[105,114646,30830],{"class":164},[105,114648,113691],{"class":115},[105,114650,161],{"class":111},[105,114652,47318],{"class":164},[105,114654,114655,114657,114659],{"class":107,"line":16750},[105,114656,14744],{"class":111},[105,114658,38858],{"class":164},[105,114660,114661],{"class":115},"._get_obs(), {}\n",[105,114663,114664],{"class":107,"line":16755},[105,114665,2391],{"emptyLinePlaceholder":32},[105,114667,114668,114670,114673],{"class":107,"line":16761},[105,114669,30786],{"class":111},[105,114671,114672],{"class":1954}," step",[105,114674,114675],{"class":115},"(self, action):\n",[105,114677,114678,114680,114682,114685,114687,114689],{"class":107,"line":16775},[105,114679,110207],{"class":115},[105,114681,161],{"class":111},[105,114683,114684],{"class":115}," np.asarray(action, ",[105,114686,93485],{"class":5208},[105,114688,161],{"class":111},[105,114690,113781],{"class":115},[105,114692,114693,114695,114697,114699,114701,114704,114706],{"class":107,"line":16788},[105,114694,110207],{"class":115},[105,114696,161],{"class":111},[105,114698,107432],{"class":115},[105,114700,30808],{"class":164},[105,114702,114703],{"class":115},".action_space.low, ",[105,114705,30808],{"class":164},[105,114707,114708],{"class":115},".action_space.high)\n",[105,114710,114711],{"class":107,"line":16793},[105,114712,2391],{"emptyLinePlaceholder":32},[105,114714,114715,114717,114720,114722],{"class":107,"line":16807},[105,114716,30830],{"class":164},[105,114718,114719],{"class":115},".data.ctrl[:] ",[105,114721,161],{"class":111},[105,114723,107455],{"class":115},[105,114725,114726,114728,114730,114732,114734,114736,114738],{"class":107,"line":16812},[105,114727,3394],{"class":111},[105,114729,101486],{"class":115},[105,114731,26028],{"class":111},[105,114733,32428],{"class":164},[105,114735,116],{"class":115},[105,114737,30808],{"class":164},[105,114739,114740],{"class":115},".frame_skip):\n",[105,114742,114743,114746,114748,114750,114752],{"class":107,"line":16818},[105,114744,114745],{"class":115},"            mujoco.mj_step(",[105,114747,30808],{"class":164},[105,114749,114566],{"class":115},[105,114751,30808],{"class":164},[105,114753,114571],{"class":115},[105,114755,114756],{"class":107,"line":16823},[105,114757,2391],{"emptyLinePlaceholder":32},[105,114759,114760,114762,114764,114766],{"class":107,"line":16837},[105,114761,30830],{"class":164},[105,114763,113691],{"class":115},[105,114765,9469],{"class":111},[105,114767,55684],{"class":164},[105,114769,114770],{"class":107,"line":16842},[105,114771,2391],{"emptyLinePlaceholder":32},[105,114773,114774,114776,114778,114780],{"class":107,"line":16847},[105,114775,110167],{"class":115},[105,114777,161],{"class":111},[105,114779,38858],{"class":164},[105,114781,114782],{"class":115},"._get_obs()\n",[105,114784,114785,114787,114789,114791],{"class":107,"line":16861},[105,114786,110272],{"class":115},[105,114788,161],{"class":111},[105,114790,38858],{"class":164},[105,114792,114793],{"class":115},"._get_reward()\n",[105,114795,114796],{"class":107,"line":16873},[105,114797,2391],{"emptyLinePlaceholder":32},[105,114799,114800,114802,114804,114806,114808,114810],{"class":107,"line":16878},[105,114801,112122],{"class":115},[105,114803,161],{"class":111},[105,114805,38858],{"class":164},[105,114807,114355],{"class":115},[105,114809,30808],{"class":164},[105,114811,114433],{"class":115},[105,114813,114814,114816,114818,114820,114822,114824],{"class":107,"line":16891},[105,114815,112135],{"class":115},[105,114817,161],{"class":111},[105,114819,38858],{"class":164},[105,114821,114355],{"class":115},[105,114823,30808],{"class":164},[105,114825,114448],{"class":115},[105,114827,114828,114830,114832,114834,114837,114839],{"class":107,"line":16896},[105,114829,114453],{"class":115},[105,114831,161],{"class":111},[105,114833,109782],{"class":164},[105,114835,114836],{"class":115},"(np.linalg.norm(tip ",[105,114838,648],{"class":111},[105,114840,114841],{"class":115}," target))\n",[105,114843,114844],{"class":107,"line":16901},[105,114845,2391],{"emptyLinePlaceholder":32},[105,114847,114848,114851,114853,114855,114857],{"class":107,"line":16906},[105,114849,114850],{"class":115},"        terminated ",[105,114852,161],{"class":111},[105,114854,113674],{"class":115},[105,114856,1026],{"class":111},[105,114858,113679],{"class":164},[105,114860,114861,114864,114866,114868,114870,114872,114874],{"class":107,"line":16919},[105,114862,114863],{"class":115},"        truncated ",[105,114865,161],{"class":111},[105,114867,38858],{"class":164},[105,114869,113691],{"class":115},[105,114871,1701],{"class":111},[105,114873,38858],{"class":164},[105,114875,113698],{"class":115},[105,114877,114878,114881,114883,114885,114888],{"class":107,"line":16924},[105,114879,114880],{"class":115},"        info ",[105,114882,161],{"class":111},[105,114884,4439],{"class":115},[105,114886,114887],{"class":220},"\"distance\"",[105,114889,114890],{"class":115},": dist}\n",[105,114892,114893,114895],{"class":107,"line":32618},[105,114894,14744],{"class":111},[105,114896,114897],{"class":115}," obs, reward, terminated, truncated, info\n",[105,114899,114900],{"class":107,"line":32624},[105,114901,2391],{"emptyLinePlaceholder":32},[105,114903,114904],{"class":107,"line":32630},[105,114905,2391],{"emptyLinePlaceholder":32},[105,114907,114908,114910,114912,114914,114916],{"class":107,"line":32636},[105,114909,31932],{"class":111},[105,114911,1964],{"class":1954},[105,114913,101383],{"class":115},[105,114915,95671],{"class":164},[105,114917,3730],{"class":115},[105,114919,114920,114923,114925],{"class":107,"line":32642},[105,114921,114922],{"class":115},"    env ",[105,114924,161],{"class":111},[105,114926,114927],{"class":115}," ReacherEnv()\n",[105,114929,114930,114933,114935,114938,114940,114942,114944],{"class":107,"line":32653},[105,114931,114932],{"class":115},"    obs, info ",[105,114934,161],{"class":111},[105,114936,114937],{"class":115}," env.reset(",[105,114939,114551],{"class":5208},[105,114941,161],{"class":111},[105,114943,307],{"class":164},[105,114945,122],{"class":115},[105,114947,114948,114950,114952,114955],{"class":107,"line":32659},[105,114949,31284],{"class":164},[105,114951,116],{"class":115},[105,114953,114954],{"class":220},"\"initial obs shape:\"",[105,114956,114957],{"class":115},", obs.shape)\n",[105,114959,114960,114962,114964,114967],{"class":107,"line":32679},[105,114961,31284],{"class":164},[105,114963,116],{"class":115},[105,114965,114966],{"class":220},"\"initial info:\"",[105,114968,114969],{"class":115},", info)\n",[105,114971,114972],{"class":107,"line":32685},[105,114973,2391],{"emptyLinePlaceholder":32},[105,114975,114976,114978,114980],{"class":107,"line":32696},[105,114977,110138],{"class":115},[105,114979,161],{"class":111},[105,114981,104746],{"class":164},[105,114983,114984,114986,114988,114990,114992,114994,114996],{"class":107,"line":32702},[105,114985,3192],{"class":111},[105,114987,31601],{"class":115},[105,114989,26028],{"class":111},[105,114991,32428],{"class":164},[105,114993,116],{"class":115},[105,114995,816],{"class":164},[105,114997,30771],{"class":115},[105,114999,115000,115002,115004],{"class":107,"line":32708},[105,115001,110207],{"class":115},[105,115003,161],{"class":111},[105,115005,115006],{"class":115}," env.action_space.sample()\n",[105,115008,115009,115012,115014],{"class":107,"line":32714},[105,115010,115011],{"class":115},"        obs, reward, terminated, truncated, info ",[105,115013,161],{"class":111},[105,115015,113400],{"class":115},[105,115017,115018,115020,115022],{"class":107,"line":32720},[105,115019,110282],{"class":115},[105,115021,9469],{"class":111},[105,115023,110287],{"class":115},[105,115025,115026,115028,115030,115032,115034,115037,115039,115041,115044,115046,115048,115051,115053,115055,115058,115060,115062,115064],{"class":107,"line":32726},[105,115027,32436],{"class":164},[105,115029,116],{"class":115},[105,115031,110316],{"class":220},[105,115033,110319],{"class":115},[105,115035,115036],{"class":220},"\"reward:\"",[105,115038,12427],{"class":115},[105,115040,32003],{"class":164},[105,115042,115043],{"class":115},"(reward, ",[105,115045,187],{"class":164},[105,115047,110330],{"class":115},[105,115049,115050],{"class":220},"\"distance:\"",[105,115052,12427],{"class":115},[105,115054,32003],{"class":164},[105,115056,115057],{"class":115},"(info[",[105,115059,114887],{"class":220},[105,115061,112187],{"class":115},[105,115063,187],{"class":164},[105,115065,30482],{"class":115},[105,115067,115068,115070,115073,115076],{"class":107,"line":32732},[105,115069,2488],{"class":111},[105,115071,115072],{"class":115}," terminated ",[105,115074,115075],{"class":111},"or",[105,115077,115078],{"class":115}," truncated:\n",[105,115080,115081],{"class":107,"line":32738},[105,115082,115083],{"class":111},"            break\n",[105,115085,115086],{"class":107,"line":32758},[105,115087,2391],{"emptyLinePlaceholder":32},[105,115089,115090,115092,115094,115096,115098,115100,115102,115104],{"class":107,"line":32764},[105,115091,31284],{"class":164},[105,115093,116],{"class":115},[105,115095,110361],{"class":220},[105,115097,12427],{"class":115},[105,115099,32003],{"class":164},[105,115101,110368],{"class":115},[105,115103,187],{"class":164},[105,115105,30482],{"class":115},[105,115107,115108],{"class":107,"line":32780},[105,115109,2391],{"emptyLinePlaceholder":32},[105,115111,115112],{"class":107,"line":32786},[105,115113,2391],{"emptyLinePlaceholder":32},[105,115115,115116,115118,115120,115122,115124],{"class":107,"line":32800},[105,115117,1522],{"class":111},[105,115119,31205],{"class":164},[105,115121,101544],{"class":111},[105,115123,101547],{"class":220},[105,115125,3730],{"class":115},[105,115127,115128],{"class":107,"line":32806},[105,115129,101554],{"class":115},[14,115131,103555],{},[96,115133,115135],{"className":23815,"code":115134,"language":23817,"meta":22,"style":22},"touch ch8_gym_env.py\n",[102,115136,115137],{"__ignoreMap":22},[105,115138,115139,115141],{"class":107,"line":108},[105,115140,101268],{"class":1954},[105,115142,115143],{"class":220}," ch8_gym_env.py\n",[14,115145,110429],{},[96,115147,115149],{"className":23815,"code":115148,"language":23817,"meta":22,"style":22},"python ch8_gym_env.py\n",[102,115150,115151],{"__ignoreMap":22},[105,115152,115153,115155],{"class":107,"line":108},[105,115154,30365],{"class":1954},[105,115156,115143],{"class":220},[76,115158,101557],{"id":101557},[14,115160,115161],{},"继承 Gymnasium 环境：",[96,115163,115165],{"className":30363,"code":115164,"language":30365,"meta":22,"style":22},"class ReacherEnv(gym.Env):\n",[102,115166,115167],{"__ignoreMap":22},[105,115168,115169,115171,115173,115175,115177,115179,115181],{"class":107,"line":108},[105,115170,14686],{"class":111},[105,115172,114042],{"class":1954},[105,115174,116],{"class":115},[105,115176,113525],{"class":1954},[105,115178,674],{"class":115},[105,115180,114051],{"class":1954},[105,115182,30771],{"class":115},[14,115184,115185],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115187,115188],{},"初始化模型：",[96,115190,115192],{"className":30363,"code":115191,"language":30365,"meta":22,"style":22},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[102,115193,115194,115208],{"__ignoreMap":22},[105,115195,115196,115198,115200,115202,115204,115206],{"class":107,"line":108},[105,115197,30808],{"class":164},[105,115199,114102],{"class":115},[105,115201,161],{"class":111},[105,115203,101397],{"class":115},[105,115205,101299],{"class":164},[105,115207,122],{"class":115},[105,115209,115210,115212,115214,115216,115218,115220],{"class":107,"line":28},[105,115211,30808],{"class":164},[105,115213,114117],{"class":115},[105,115215,161],{"class":111},[105,115217,114122],{"class":115},[105,115219,30808],{"class":164},[105,115221,114127],{"class":115},[14,115223,115224,115225,115227],{},"这和前面章节一样，只是现在放到了类的 ",[102,115226,30814],{}," 里。",[14,115229,115230],{},"缓存 site ID：",[96,115232,115234],{"className":30363,"code":115233,"language":30365,"meta":22,"style":22},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[102,115235,115236,115250],{"__ignoreMap":22},[105,115237,115238,115240,115242,115244,115246,115248],{"class":107,"line":108},[105,115239,30808],{"class":164},[105,115241,114138],{"class":115},[105,115243,161],{"class":111},[105,115245,114143],{"class":115},[105,115247,89539],{"class":164},[105,115249,122],{"class":115},[105,115251,115252,115254,115256,115258,115260,115262],{"class":107,"line":28},[105,115253,30808],{"class":164},[105,115255,114159],{"class":115},[105,115257,161],{"class":111},[105,115259,114143],{"class":115},[105,115261,89539],{"class":164},[105,115263,122],{"class":115},[14,115265,115266],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115268,115269],{},"reset：",[96,115271,115273],{"className":30363,"code":115272,"language":30365,"meta":22,"style":22},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[102,115274,115275],{"__ignoreMap":22},[105,115276,115277,115279,115281,115283,115285,115287,115289,115291,115293,115295,115297,115299,115301,115303,115305,115307,115309],{"class":107,"line":108},[105,115278,31932],{"class":111},[105,115280,114507],{"class":1954},[105,115282,114510],{"class":115},[105,115284,571],{"class":111},[105,115286,114515],{"class":115},[105,115288,119],{"class":164},[105,115290,25094],{"class":111},[105,115292,38918],{"class":164},[105,115294,13556],{"class":111},[105,115296,38918],{"class":164},[105,115298,114528],{"class":115},[105,115300,114531],{"class":164},[105,115302,25094],{"class":111},[105,115304,38918],{"class":164},[105,115306,13556],{"class":111},[105,115308,38918],{"class":164},[105,115310,30771],{"class":115},[14,115312,115313,115315],{},[102,115314,70041],{}," 做四件事：",[59,115317,115318,115321,115324,115327],{},[62,115319,115320],{},"设置随机种子。",[62,115322,115323],{},"重置 MuJoCo data。",[62,115325,115326],{},"随机初始化关节角。",[62,115328,115329],{},"返回初始观测和 info。",[14,115331,115332],{},"step：",[96,115334,115336],{"className":30363,"code":115335,"language":30365,"meta":22,"style":22},"def step(self, action):\n",[102,115337,115338],{"__ignoreMap":22},[105,115339,115340,115342,115344],{"class":107,"line":108},[105,115341,31932],{"class":111},[105,115343,114672],{"class":1954},[105,115345,114675],{"class":115},[14,115347,115348,115350],{},[102,115349,107119],{}," 做六件事：",[59,115352,115353,115356,115362,115365,115368,115371],{},[62,115354,115355],{},"检查并裁剪 action。",[62,115357,115358,115359,28370],{},"写入 ",[102,115360,115361],{},"self.data.ctrl",[62,115363,115364],{},"连续推进若干个 MuJoCo 物理步。",[62,115366,115367],{},"计算新观测。",[62,115369,115370],{},"计算奖励和结束条件。",[62,115372,115373],{},"返回 Gymnasium 标准五元组。",[76,115375,101693],{"id":101693},[96,115377,115379],{"className":30363,"code":115378,"language":30365,"meta":22,"style":22},"import gymnasium as gym\n",[102,115380,115381],{"__ignoreMap":22},[105,115382,115383,115385,115387,115389],{"class":107,"line":108},[105,115384,30377],{"class":111},[105,115386,113880],{"class":115},[105,115388,31368],{"class":111},[105,115390,113885],{"class":115},[14,115392,115393,115394,115396,115397,115400],{},"导入 Gymnasium，并起别名 ",[102,115395,113525],{},"。后面写 ",[102,115398,115399],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[96,115402,115404],{"className":30363,"code":115403,"language":30365,"meta":22,"style":22},"from gymnasium import spaces\n",[102,115405,115406],{"__ignoreMap":22},[105,115407,115408,115410,115412,115414],{"class":107,"line":108},[105,115409,30722],{"class":111},[105,115411,113880],{"class":115},[105,115413,30377],{"class":111},[105,115415,113912],{"class":115},[14,115417,115418,115419,115422],{},"导入空间定义工具。",[102,115420,115421],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[96,115424,115425],{"className":30363,"code":115164,"language":30365,"meta":22,"style":22},[102,115426,115427],{"__ignoreMap":22},[105,115428,115429,115431,115433,115435,115437,115439,115441],{"class":107,"line":108},[105,115430,14686],{"class":111},[105,115432,114042],{"class":1954},[105,115434,116],{"class":115},[105,115436,113525],{"class":1954},[105,115438,674],{"class":115},[105,115440,114051],{"class":1954},[105,115442,30771],{"class":115},[14,115444,115445,115446,115449,115450,115452,115453,101003,115455,115457],{},"定义一个类，名字叫 ",[102,115447,115448],{},"ReacherEnv","。括号里的 ",[102,115451,115399],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[102,115454,70041],{},[102,115456,107119],{}," 这两个核心方法。",[96,115459,115461],{"className":30363,"code":115460,"language":30365,"meta":22,"style":22},"metadata = {\"render_modes\": []}\n",[102,115462,115463],{"__ignoreMap":22},[105,115464,115465,115468,115470,115472,115474],{"class":107,"line":108},[105,115466,115467],{"class":115},"metadata ",[105,115469,161],{"class":111},[105,115471,4439],{"class":115},[105,115473,114065],{"class":220},[105,115475,114068],{"class":115},[14,115477,115478],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[96,115480,115482],{"className":30363,"code":115481,"language":30365,"meta":22,"style":22},"def __init__(self) -> None:\n",[102,115483,115484],{"__ignoreMap":22},[105,115485,115486,115488,115490,115492,115494],{"class":107,"line":108},[105,115487,31932],{"class":111},[105,115489,30789],{"class":164},[105,115491,114081],{"class":115},[105,115493,95671],{"class":164},[105,115495,3730],{"class":115},[14,115497,115498,115500,115501,28370],{},[102,115499,30814],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[102,115502,115503],{},"env = ReacherEnv()",[96,115505,115507],{"className":30363,"code":115506,"language":30365,"meta":22,"style":22},"super().__init__()\n",[102,115508,115509],{"__ignoreMap":22},[105,115510,115511,115514,115516,115518],{"class":107,"line":108},[105,115512,115513],{"class":164},"super",[105,115515,17253],{"class":115},[105,115517,30814],{"class":164},[105,115519,1967],{"class":115},[14,115521,115522,115523,115525],{},"调用父类 ",[102,115524,115399],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[96,115527,115528],{"className":30363,"code":115191,"language":30365,"meta":22,"style":22},[102,115529,115530,115544],{"__ignoreMap":22},[105,115531,115532,115534,115536,115538,115540,115542],{"class":107,"line":108},[105,115533,30808],{"class":164},[105,115535,114102],{"class":115},[105,115537,161],{"class":111},[105,115539,101397],{"class":115},[105,115541,101299],{"class":164},[105,115543,122],{"class":115},[105,115545,115546,115548,115550,115552,115554,115556],{"class":107,"line":28},[105,115547,30808],{"class":164},[105,115549,114117],{"class":115},[105,115551,161],{"class":111},[105,115553,114122],{"class":115},[105,115555,30808],{"class":164},[105,115557,114127],{"class":115},[14,115559,115560,115561,115563,115564,101003,115567,115570],{},"把 MuJoCo 模型和状态保存到 ",[102,115562,30808],{}," 上。",[102,115565,115566],{},"self.model",[102,115568,115569],{},"self.data"," 表示这个环境对象自己的模型和状态。",[96,115572,115573],{"className":30363,"code":115233,"language":30365,"meta":22,"style":22},[102,115574,115575,115589],{"__ignoreMap":22},[105,115576,115577,115579,115581,115583,115585,115587],{"class":107,"line":108},[105,115578,30808],{"class":164},[105,115580,114138],{"class":115},[105,115582,161],{"class":111},[105,115584,114143],{"class":115},[105,115586,89539],{"class":164},[105,115588,122],{"class":115},[105,115590,115591,115593,115595,115597,115599,115601],{"class":107,"line":28},[105,115592,30808],{"class":164},[105,115594,114159],{"class":115},[105,115596,161],{"class":111},[105,115598,114143],{"class":115},[105,115600,89539],{"class":164},[105,115602,122],{"class":115},[14,115604,115605,115606,101003,115609,115612],{},"提前查好 tip 和 target 的 site ID。这样 ",[102,115607,115608],{},"_get_obs",[102,115610,115611],{},"_get_reward"," 里就不用每次按名字查找。",[96,115614,115616],{"className":30363,"code":115615,"language":30365,"meta":22,"style":22},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[102,115617,115618,115628,115638],{"__ignoreMap":22},[105,115619,115620,115622,115624,115626],{"class":107,"line":108},[105,115621,30808],{"class":164},[105,115623,113852],{"class":115},[105,115625,161],{"class":111},[105,115627,54412],{"class":164},[105,115629,115630,115632,115634,115636],{"class":107,"line":28},[105,115631,30808],{"class":164},[105,115633,114231],{"class":115},[105,115635,161],{"class":111},[105,115637,114236],{"class":164},[105,115639,115640,115642,115644,115646],{"class":107,"line":1171},[105,115641,30808],{"class":164},[105,115643,113691],{"class":115},[105,115645,161],{"class":111},[105,115647,47318],{"class":164},[14,115649,115650,115653,115654,115657,115658,115661],{},[102,115651,115652],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[102,115655,115656],{},"max_steps"," 是一个 episode 最多运行多少步。",[102,115659,115660],{},"steps"," 记录当前 episode 已经走了多少步。",[96,115663,115664],{"className":30363,"code":113730,"language":30365,"meta":22,"style":22},[102,115665,115666],{"__ignoreMap":22},[105,115667,115668,115670,115672,115674,115676,115678,115680,115682,115684,115686,115688,115690,115692,115694,115696,115698,115700,115702,115704,115706],{"class":107,"line":108},[105,115669,30808],{"class":164},[105,115671,113739],{"class":115},[105,115673,161],{"class":111},[105,115675,113744],{"class":115},[105,115677,113747],{"class":5208},[105,115679,113750],{"class":111},[105,115681,102388],{"class":164},[105,115683,12427],{"class":115},[105,115685,113757],{"class":5208},[105,115687,161],{"class":111},[105,115689,102388],{"class":164},[105,115691,12427],{"class":115},[105,115693,95948],{"class":5208},[105,115695,161],{"class":111},[105,115697,116],{"class":115},[105,115699,193],{"class":164},[105,115701,113774],{"class":115},[105,115703,93485],{"class":5208},[105,115705,161],{"class":111},[105,115707,113781],{"class":115},[14,115709,115710,115711,115714,115715,101003,115718,115721],{},"定义动作空间。",[102,115712,115713],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[102,115716,115717],{},"low=-1.0",[102,115719,115720],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[96,115723,115724],{"className":30363,"code":113791,"language":30365,"meta":22,"style":22},[102,115725,115726],{"__ignoreMap":22},[105,115727,115728,115730,115732,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754,115756,115758,115760,115762],{"class":107,"line":108},[105,115729,30808],{"class":164},[105,115731,113800],{"class":115},[105,115733,161],{"class":111},[105,115735,113744],{"class":115},[105,115737,113747],{"class":5208},[105,115739,113750],{"class":111},[105,115741,113811],{"class":115},[105,115743,113757],{"class":5208},[105,115745,161],{"class":111},[105,115747,113811],{"class":115},[105,115749,95948],{"class":5208},[105,115751,161],{"class":111},[105,115753,116],{"class":115},[105,115755,562],{"class":164},[105,115757,113774],{"class":115},[105,115759,93485],{"class":5208},[105,115761,161],{"class":111},[105,115763,113781],{"class":115},[14,115765,115766,115767,115770,115771,115774],{},"定义观测空间。",[102,115768,115769],{},"shape=(10,)"," 表示观测是 10 个数。",[102,115772,115773],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[96,115776,115778],{"className":30363,"code":115777,"language":30365,"meta":22,"style":22},"def _get_obs(self) -> np.ndarray:\n",[102,115779,115780],{"__ignoreMap":22},[105,115781,115782,115784,115786],{"class":107,"line":108},[105,115783,31932],{"class":111},[105,115785,114341],{"class":1954},[105,115787,114344],{"class":115},[14,115789,115790,115791,115793],{},"定义内部函数，用来生成观测。函数名前面的 ",[102,115792,1108],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[96,115795,115797],{"className":30363,"code":115796,"language":30365,"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",[102,115798,115799,115813],{"__ignoreMap":22},[105,115800,115801,115803,115805,115807,115809,115811],{"class":107,"line":108},[105,115802,111553],{"class":115},[105,115804,161],{"class":111},[105,115806,38858],{"class":164},[105,115808,114355],{"class":115},[105,115810,30808],{"class":164},[105,115812,114360],{"class":115},[105,115814,115815,115817,115819,115821,115823,115825],{"class":107,"line":28},[105,115816,111563],{"class":115},[105,115818,161],{"class":111},[105,115820,38858],{"class":164},[105,115822,114355],{"class":115},[105,115824,30808],{"class":164},[105,115826,114375],{"class":115},[14,115828,115829],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[96,115831,115833],{"className":30363,"code":115832,"language":30365,"meta":22,"style":22},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[102,115834,115835,115851],{"__ignoreMap":22},[105,115836,115837,115839,115841,115843,115845,115847,115849],{"class":107,"line":108},[105,115838,110839],{"class":115},[105,115840,161],{"class":111},[105,115842,114384],{"class":115},[105,115844,30808],{"class":164},[105,115846,114389],{"class":115},[105,115848,30808],{"class":164},[105,115850,114394],{"class":115},[105,115852,115853,115855],{"class":107,"line":28},[105,115854,17038],{"class":111},[105,115856,114401],{"class":115},[14,115858,115859,115860,115863,115864,115866],{},"拼接观测，并转换成 ",[102,115861,115862],{},"float32","。很多强化学习库默认使用 ",[102,115865,115862],{},"，所以这里主动转换。",[96,115868,115869],{"className":30363,"code":115272,"language":30365,"meta":22,"style":22},[102,115870,115871],{"__ignoreMap":22},[105,115872,115873,115875,115877,115879,115881,115883,115885,115887,115889,115891,115893,115895,115897,115899,115901,115903,115905],{"class":107,"line":108},[105,115874,31932],{"class":111},[105,115876,114507],{"class":1954},[105,115878,114510],{"class":115},[105,115880,571],{"class":111},[105,115882,114515],{"class":115},[105,115884,119],{"class":164},[105,115886,25094],{"class":111},[105,115888,38918],{"class":164},[105,115890,13556],{"class":111},[105,115892,38918],{"class":164},[105,115894,114528],{"class":115},[105,115896,114531],{"class":164},[105,115898,25094],{"class":111},[105,115900,38918],{"class":164},[105,115902,13556],{"class":111},[105,115904,38918],{"class":164},[105,115906,30771],{"class":115},[14,115908,115909,115910,115912,115913,115916],{},"定义 reset。",[102,115911,114551],{}," 用来控制随机数，保证实验可以复现。",[102,115914,115915],{},"options"," 用来接收额外配置，本章暂时不用。",[96,115918,115920],{"className":30363,"code":115919,"language":30365,"meta":22,"style":22},"super().reset(seed=seed)\n",[102,115921,115922],{"__ignoreMap":22},[105,115923,115924,115926,115928,115930,115932],{"class":107,"line":108},[105,115925,115513],{"class":164},[105,115927,114548],{"class":115},[105,115929,114551],{"class":5208},[105,115931,161],{"class":111},[105,115933,114556],{"class":115},[14,115935,115936,115937,115940],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[102,115938,115939],{},"self.np_random"," 生成可复现的随机数。",[96,115942,115944],{"className":30363,"code":115943,"language":30365,"meta":22,"style":22},"mujoco.mj_resetData(self.model, self.data)\n",[102,115945,115946],{"__ignoreMap":22},[105,115947,115948,115951,115953,115955,115957],{"class":107,"line":108},[105,115949,115950],{"class":115},"mujoco.mj_resetData(",[105,115952,30808],{"class":164},[105,115954,114566],{"class":115},[105,115956,30808],{"class":164},[105,115958,114571],{"class":115},[14,115960,115961],{},"把 MuJoCo 状态重置到默认状态。",[96,115963,115965],{"className":30363,"code":115964,"language":30365,"meta":22,"style":22},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[102,115966,115967],{"__ignoreMap":22},[105,115968,115969,115971,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991,115993,115995,115997,115999,116001],{"class":107,"line":108},[105,115970,30808],{"class":164},[105,115972,114582],{"class":115},[105,115974,161],{"class":111},[105,115976,38858],{"class":164},[105,115978,114589],{"class":115},[105,115980,113747],{"class":5208},[105,115982,113750],{"class":111},[105,115984,86195],{"class":164},[105,115986,12427],{"class":115},[105,115988,113757],{"class":5208},[105,115990,161],{"class":111},[105,115992,86195],{"class":164},[105,115994,12427],{"class":115},[105,115996,31481],{"class":5208},[105,115998,161],{"class":111},[105,116000,30808],{"class":164},[105,116002,114614],{"class":115},[14,116004,115326,116005,116008,116009,116012,116013,116015],{},[102,116006,116007],{},"[:]"," 表示修改整个数组。",[102,116010,116011],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[102,116014,102135],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[96,116017,116019],{"className":30363,"code":116018,"language":30365,"meta":22,"style":22},"self.data.qvel[:] = 0.0\n",[102,116020,116021],{"__ignoreMap":22},[105,116022,116023,116025,116027,116029],{"class":107,"line":108},[105,116024,30808],{"class":164},[105,116026,114621],{"class":115},[105,116028,161],{"class":111},[105,116030,104746],{"class":164},[14,116032,116033],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[96,116035,116037],{"className":30363,"code":116036,"language":30365,"meta":22,"style":22},"self.steps = 0\nreturn self._get_obs(), {}\n",[102,116038,116039,116049],{"__ignoreMap":22},[105,116040,116041,116043,116045,116047],{"class":107,"line":108},[105,116042,30808],{"class":164},[105,116044,113691],{"class":115},[105,116046,161],{"class":111},[105,116048,47318],{"class":164},[105,116050,116051,116053,116055],{"class":107,"line":28},[105,116052,17038],{"class":111},[105,116054,38858],{"class":164},[105,116056,114661],{"class":115},[14,116058,116059],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[96,116061,116062],{"className":30363,"code":115335,"language":30365,"meta":22,"style":22},[102,116063,116064],{"__ignoreMap":22},[105,116065,116066,116068,116070],{"class":107,"line":108},[105,116067,31932],{"class":111},[105,116069,114672],{"class":1954},[105,116071,114675],{"class":115},[14,116073,116074],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[96,116076,116078],{"className":30363,"code":116077,"language":30365,"meta":22,"style":22},"action = np.asarray(action, dtype=np.float32)\n",[102,116079,116080],{"__ignoreMap":22},[105,116081,116082,116084,116086,116088,116090,116092],{"class":107,"line":108},[105,116083,107427],{"class":115},[105,116085,161],{"class":111},[105,116087,114684],{"class":115},[105,116089,93485],{"class":5208},[105,116091,161],{"class":111},[105,116093,113781],{"class":115},[14,116095,116096,116097,28370],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[102,116098,115862],{},[96,116100,116102],{"className":30363,"code":116101,"language":30365,"meta":22,"style":22},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[102,116103,116104],{"__ignoreMap":22},[105,116105,116106,116108,116110,116112,116114,116116,116118],{"class":107,"line":108},[105,116107,107427],{"class":115},[105,116109,161],{"class":111},[105,116111,107432],{"class":115},[105,116113,30808],{"class":164},[105,116115,114703],{"class":115},[105,116117,30808],{"class":164},[105,116119,114708],{"class":115},[14,116121,116122],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[96,116124,116126],{"className":30363,"code":116125,"language":30365,"meta":22,"style":22},"self.data.ctrl[:] = action\n",[102,116127,116128],{"__ignoreMap":22},[105,116129,116130,116132,116134,116136],{"class":107,"line":108},[105,116131,30808],{"class":164},[105,116133,114719],{"class":115},[105,116135,161],{"class":111},[105,116137,107455],{"class":115},[14,116139,116140],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[96,116142,116144],{"className":30363,"code":116143,"language":30365,"meta":22,"style":22},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[102,116145,116146,116162],{"__ignoreMap":22},[105,116147,116148,116150,116152,116154,116156,116158,116160],{"class":107,"line":108},[105,116149,3016],{"class":111},[105,116151,101486],{"class":115},[105,116153,26028],{"class":111},[105,116155,32428],{"class":164},[105,116157,116],{"class":115},[105,116159,30808],{"class":164},[105,116161,114740],{"class":115},[105,116163,116164,116167,116169,116171,116173],{"class":107,"line":28},[105,116165,116166],{"class":115},"    mujoco.mj_step(",[105,116168,30808],{"class":164},[105,116170,114566],{"class":115},[105,116172,30808],{"class":164},[105,116174,114571],{"class":115},[14,116176,116177,116178,116181,116182,116184,116185,28370],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[102,116179,116180],{},"frame_skip=5","，所以外部调用一次 ",[102,116183,113862],{},"，内部实际执行 5 次 ",[102,116186,101200],{},[96,116188,116190],{"className":30363,"code":116189,"language":30365,"meta":22,"style":22},"self.steps += 1\n",[102,116191,116192],{"__ignoreMap":22},[105,116193,116194,116196,116198,116200],{"class":107,"line":108},[105,116195,30808],{"class":164},[105,116197,113691],{"class":115},[105,116199,9469],{"class":111},[105,116201,55684],{"class":164},[14,116203,116204],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[96,116206,116208],{"className":30363,"code":116207,"language":30365,"meta":22,"style":22},"obs = self._get_obs()\nreward = self._get_reward()\n",[102,116209,116210,116220],{"__ignoreMap":22},[105,116211,116212,116214,116216,116218],{"class":107,"line":108},[105,116213,110839],{"class":115},[105,116215,161],{"class":111},[105,116217,38858],{"class":164},[105,116219,114782],{"class":115},[105,116221,116222,116224,116226,116228],{"class":107,"line":28},[105,116223,110990],{"class":115},[105,116225,161],{"class":111},[105,116227,38858],{"class":164},[105,116229,114793],{"class":115},[14,116231,116232],{},"计算新的观测和奖励。",[96,116234,116236],{"className":30363,"code":116235,"language":30365,"meta":22,"style":22},"dist = float(np.linalg.norm(tip - target))\n",[102,116237,116238],{"__ignoreMap":22},[105,116239,116240,116242,116244,116246,116248,116250],{"class":107,"line":108},[105,116241,111581],{"class":115},[105,116243,161],{"class":111},[105,116245,109782],{"class":164},[105,116247,114836],{"class":115},[105,116249,648],{"class":111},[105,116251,114841],{"class":115},[14,116253,116254],{},"计算末端到目标的距离，并转换成 Python float。",[96,116256,116257],{"className":30363,"code":113662,"language":30365,"meta":22,"style":22},[102,116258,116259,116271],{"__ignoreMap":22},[105,116260,116261,116263,116265,116267,116269],{"class":107,"line":108},[105,116262,113669],{"class":115},[105,116264,161],{"class":111},[105,116266,113674],{"class":115},[105,116268,1026],{"class":111},[105,116270,113679],{"class":164},[105,116272,116273,116275,116277,116279,116281,116283,116285],{"class":107,"line":28},[105,116274,113684],{"class":115},[105,116276,161],{"class":111},[105,116278,38858],{"class":164},[105,116280,113691],{"class":115},[105,116282,1701],{"class":111},[105,116284,38858],{"class":164},[105,116286,113698],{"class":115},[14,116288,116289],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[96,116291,116293],{"className":30363,"code":116292,"language":30365,"meta":22,"style":22},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[102,116294,116295,116308],{"__ignoreMap":22},[105,116296,116297,116300,116302,116304,116306],{"class":107,"line":108},[105,116298,116299],{"class":115},"info ",[105,116301,161],{"class":111},[105,116303,4439],{"class":115},[105,116305,114887],{"class":220},[105,116307,114890],{"class":115},[105,116309,116310,116312],{"class":107,"line":28},[105,116311,17038],{"class":111},[105,116313,114897],{"class":115},[14,116315,116316,116319],{},[102,116317,116318],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[96,116321,116323],{"className":30363,"code":116322,"language":30365,"meta":22,"style":22},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[102,116324,116325,116334],{"__ignoreMap":22},[105,116326,116327,116330,116332],{"class":107,"line":108},[105,116328,116329],{"class":115},"env ",[105,116331,161],{"class":111},[105,116333,114927],{"class":115},[105,116335,116336,116338,116340,116342,116344,116346,116348],{"class":107,"line":28},[105,116337,113385],{"class":115},[105,116339,161],{"class":111},[105,116341,114937],{"class":115},[105,116343,114551],{"class":5208},[105,116345,161],{"class":111},[105,116347,307],{"class":164},[105,116349,122],{"class":115},[14,116351,116352,116353,116356],{},"创建环境并重置。",[102,116354,116355],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[96,116358,116360],{"className":30363,"code":116359,"language":30365,"meta":22,"style":22},"action = env.action_space.sample()\n",[102,116361,116362],{"__ignoreMap":22},[105,116363,116364,116366,116368],{"class":107,"line":108},[105,116365,107427],{"class":115},[105,116367,161],{"class":111},[105,116369,115006],{"class":115},[14,116371,116372],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[47,116374,102301],{"id":102300},[14,116376,105469],{},[96,116378,116381],{"className":116379,"code":116380,"language":5179,"meta":22},[5177],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[102,116382,116380],{"__ignoreMap":22},[14,116384,116385],{},"这个环境已经具备强化学习环境的基本结构。",[14,116387,116388],{},"主函数里使用随机动作：",[96,116390,116391],{"className":30363,"code":116359,"language":30365,"meta":22,"style":22},[102,116392,116393],{"__ignoreMap":22},[105,116394,116395,116397,116399],{"class":107,"line":108},[105,116396,107427],{"class":115},[105,116398,161],{"class":111},[105,116400,115006],{"class":115},[14,116402,116403],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[47,116405,102333],{"id":102332},[59,116407,116408,116411,116417,116426,116435,116444,116450],{},[62,116409,116410],{},"运行程序。",[62,116412,116413,116414,28370],{},"确认 ",[102,116415,116416],{},"obs.shape == (10,)",[62,116418,111166,116419,116422,116423,28370],{},[102,116420,116421],{},"env.action_space","，应类似 ",[102,116424,116425],{},"Box(-1.0, 1.0, (2,), float32)",[62,116427,105570,116428,116431,116432,28370],{},[102,116429,116430],{},"self.max_steps = 10","，确认环境会更快 ",[102,116433,116434],{},"truncated=True",[62,116436,102396,116437,102399,116440,116443],{},[102,116438,116439],{},"terminated = dist \u003C 0.05",[102,116441,116442],{},"dist \u003C 0.2","，观察是否更容易结束。",[62,116445,102396,116446,116449],{},[102,116447,116448],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[62,116451,116452,116453,116455,116456,116459],{},"在 ",[102,116454,116318],{}," 里加入 ",[102,116457,116458],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[47,116461,102438],{"id":102437},[76,116463,116465],{"id":116464},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116467,116468,116469,116471],{},"Gymnasium 的 ",[102,116470,107119],{}," 返回 5 个值:",[96,116473,116475],{"className":30363,"code":116474,"language":30365,"meta":22,"style":22},"obs, reward, terminated, truncated, info\n",[102,116476,116477],{"__ignoreMap":22},[105,116478,116479],{"class":107,"line":108},[105,116480,116474],{"class":115},[14,116482,116483],{},"不是旧 Gym 的 4 个值。",[76,116485,116487,116490],{"id":116486},"datactrl-action-维度错误",[102,116488,116489],{},"data.ctrl[:] = action"," 维度错误",[14,116492,102508],{},[96,116494,116496],{"className":30363,"code":116495,"language":30365,"meta":22,"style":22},"print(self.model.nu)\nprint(action.shape)\n",[102,116497,116498,116509],{"__ignoreMap":22},[105,116499,116500,116502,116504,116506],{"class":107,"line":108},[105,116501,30400],{"class":164},[105,116503,116],{"class":115},[105,116505,30808],{"class":164},[105,116507,116508],{"class":115},".model.nu)\n",[105,116510,116511,116513],{"class":107,"line":28},[105,116512,30400],{"class":164},[105,116514,116515],{"class":115},"(action.shape)\n",[14,116517,116518],{},"两者必须匹配。",[76,116520,116522],{"id":116521},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116524,102447],{},[96,116526,116528],{"className":30363,"code":116527,"language":30365,"meta":22,"style":22},"mujoco.mj_forward(self.model, self.data)\n",[102,116529,116530],{"__ignoreMap":22},[105,116531,116532,116535,116537,116539,116541],{"class":107,"line":108},[105,116533,116534],{"class":115},"mujoco.mj_forward(",[105,116536,30808],{"class":164},[105,116538,114566],{"class":115},[105,116540,30808],{"class":164},[105,116542,114571],{"class":115},[76,116544,116546,116548],{"id":116545},"observation_space-维度和-obs-不一致",[102,116547,113585],{}," 维度和 obs 不一致",[14,116550,102560],{},[96,116552,116554],{"className":30363,"code":116553,"language":30365,"meta":22,"style":22},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[102,116555,116556,116566,116573],{"__ignoreMap":22},[105,116557,116558,116560,116562,116564],{"class":107,"line":108},[105,116559,110839],{"class":115},[105,116561,161],{"class":111},[105,116563,38858],{"class":164},[105,116565,114782],{"class":115},[105,116567,116568,116570],{"class":107,"line":28},[105,116569,30400],{"class":164},[105,116571,116572],{"class":115},"(obs.shape)\n",[105,116574,116575,116577,116579,116581],{"class":107,"line":1171},[105,116576,30400],{"class":164},[105,116578,116],{"class":115},[105,116580,30808],{"class":164},[105,116582,116583],{"class":115},".observation_space.shape)\n",[14,116585,116586],{},"两者必须一致。本章观测是：",[96,116588,116591],{"className":116589,"code":116590,"language":5179,"meta":22},[5177],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[102,116592,116590],{"__ignoreMap":22},[76,116594,116596],{"id":116595},"action-超过范围","action 超过范围",[14,116598,116599],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[96,116601,116602],{"className":30363,"code":116101,"language":30365,"meta":22,"style":22},[102,116603,116604],{"__ignoreMap":22},[105,116605,116606,116608,116610,116612,116614,116616,116618],{"class":107,"line":108},[105,116607,107427],{"class":115},[105,116609,161],{"class":111},[105,116611,107432],{"class":115},[105,116613,30808],{"class":164},[105,116615,114703],{"class":115},[105,116617,30808],{"class":164},[105,116619,114708],{"class":115},[14,116621,116622,116623,28370],{},"这能避免无效动作直接写入 ",[102,116624,101061],{},[76,116626,116628],{"id":116627},"忘记返回-info","忘记返回 info",[14,116630,116468,116631,101003,116633,116635],{},[102,116632,70041],{},[102,116634,107119],{}," 都会返回 info：",[96,116637,116638],{"className":30363,"code":113378,"language":30365,"meta":22,"style":22},[102,116639,116640,116648],{"__ignoreMap":22},[105,116641,116642,116644,116646],{"class":107,"line":108},[105,116643,113385],{"class":115},[105,116645,161],{"class":111},[105,116647,113390],{"class":115},[105,116649,116650,116652,116654],{"class":107,"line":28},[105,116651,113395],{"class":115},[105,116653,161],{"class":111},[105,116655,113400],{"class":115},[14,116657,116658,116659,28370],{},"即使暂时没有额外信息，也返回 ",[102,116660,32444],{},[47,116662,116664],{"id":116663},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116666,116667],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[59,116669,116670,116673,116676,116679,116682,116685],{},[62,116671,116672],{},"更稳定的 reward。",[62,116674,116675],{},"合理的 episode 长度。",[62,116677,116678],{},"可重复的随机目标采样。",[62,116680,116681],{},"render 接口。",[62,116683,116684],{},"环境注册代码。",[62,116686,116687],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116689,116690],{},"如果只是自己写训练循环，最小形式是：",[96,116692,116694],{"className":30363,"code":116693,"language":30365,"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",[102,116695,116696,116704,116720,116724,116740,116749,116758,116768],{"__ignoreMap":22},[105,116697,116698,116700,116702],{"class":107,"line":108},[105,116699,116329],{"class":115},[105,116701,161],{"class":111},[105,116703,114927],{"class":115},[105,116705,116706,116708,116710,116712,116714,116716,116718],{"class":107,"line":28},[105,116707,113385],{"class":115},[105,116709,161],{"class":111},[105,116711,114937],{"class":115},[105,116713,114551],{"class":5208},[105,116715,161],{"class":111},[105,116717,307],{"class":164},[105,116719,122],{"class":115},[105,116721,116722],{"class":107,"line":1171},[105,116723,2391],{"emptyLinePlaceholder":32},[105,116725,116726,116728,116730,116732,116734,116736,116738],{"class":107,"line":1186},[105,116727,3016],{"class":111},[105,116729,101486],{"class":115},[105,116731,26028],{"class":111},[105,116733,32428],{"class":164},[105,116735,116],{"class":115},[105,116737,6402],{"class":164},[105,116739,30771],{"class":115},[105,116741,116742,116745,116747],{"class":107,"line":1192},[105,116743,116744],{"class":115},"    action ",[105,116746,161],{"class":111},[105,116748,115006],{"class":115},[105,116750,116751,116754,116756],{"class":107,"line":1206},[105,116752,116753],{"class":115},"    obs, reward, terminated, truncated, info ",[105,116755,161],{"class":111},[105,116757,113400],{"class":115},[105,116759,116760,116762,116764,116766],{"class":107,"line":1212},[105,116761,3092],{"class":111},[105,116763,115072],{"class":115},[105,116765,115075],{"class":111},[105,116767,115078],{"class":115},[105,116769,116770,116773,116775],{"class":107,"line":1303},[105,116771,116772],{"class":115},"        obs, info ",[105,116774,161],{"class":111},[105,116776,113390],{"class":115},[47,116778,116780],{"id":116779},"_9本章小结","9.本章小结",[14,116782,116783],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[96,116785,116788],{"className":116786,"code":116787,"language":5179,"meta":22},[5177],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[102,116789,116787],{"__ignoreMap":22},[14,116791,116792],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5118,116794,116795],{},"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":28,"depth":28,"links":116797},[116798,116799,116800,116807,116811,116812,116813,116823,116824],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":116801},[116802,116804,116806],{"id":113609,"depth":1171,"text":116803},"terminated 和 truncated 的区别",{"id":113712,"depth":1171,"text":116805},"observation_space 和 action_space",{"id":113839,"depth":1171,"text":113840},{"id":101237,"depth":28,"text":101238,"children":116808},[116809,116810],{"id":101557,"depth":1171,"text":101557},{"id":101693,"depth":1171,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":116814},[116815,116816,116818,116819,116821,116822],{"id":116464,"depth":1171,"text":116465},{"id":116486,"depth":1171,"text":116817},"data.ctrl[:] = action 维度错误",{"id":116521,"depth":1171,"text":116522},{"id":116545,"depth":1171,"text":116820},"observation_space 维度和 obs 不一致",{"id":116595,"depth":1171,"text":116596},{"id":116627,"depth":1171,"text":116628},{"id":116663,"depth":28,"text":116664},{"id":116779,"depth":28,"text":116780},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113362,"description":22},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116831,"title":116832,"body":116833,"description":117256,"extension":30,"meta":117257,"navigation":32,"path":117258,"seo":117259,"stem":117260,"__hash__":117261},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116834,"toc":117246},[116835,116839,116842,116845,116865,116871,116877,116887,116890,116893,116913,116916,116920,116923,116929,116932,116946,116949,116952,117026,117029,117035,117038,117061,117064,117114,117117,117123,117126,117129,117132,117151,117154,117160,117163,117166,117169,117189,117192,117195,117198,117243],[10,116836,116838],{"id":116837},"mujoco-学习","MuJoCo 学习",[14,116840,116841],{},"初版",[14,116843,116844],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[59,116846,116847,116850,116853,116862],{},[62,116848,116849],{},"MuJoCo 模型文件在描述什么。",[62,116851,116852],{},"Python 代码怎样读取和推进仿真。",[62,116854,116855,328,116857,328,116859,116861],{},[102,116856,104015],{},[102,116858,104345],{},[102,116860,104348],{}," 这些数组为什么重要。",[62,116863,116864],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116866,116867,116868,116870],{},"默认环境为 Fedora 44、Python >= 3.10、",[102,116869,101012],{}," 官方 Python bindings。",[14,116872,116873,116874,116876],{},"注意：本文禁止使用 ",[102,116875,100997],{},"。所有示例均使用：",[96,116878,116879],{"className":30363,"code":101563,"language":30365,"meta":22,"style":22},[102,116880,116881],{"__ignoreMap":22},[105,116882,116883,116885],{"class":107,"line":108},[105,116884,30377],{"class":111},[105,116886,101286],{"class":115},[47,116888,116889],{"id":116889},"适合谁阅读",[14,116891,116892],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[59,116894,116895,116898,116901,116904],{},[62,116896,116897],{},"没学过 MuJoCo，只会一点 Python。",[62,116899,116900],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[62,116902,116903],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[62,116905,116906,116907,116909,116910,116912],{},"以前接触过 ",[102,116908,100997],{},"，现在想迁移到官方 ",[102,116911,101006],{}," Python bindings。",[14,116914,116915],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[47,116917,116919],{"id":116918},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116921,116922],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[96,116924,116927],{"className":116925,"code":116926,"language":5179,"meta":22},[5177],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[102,116928,116926],{"__ignoreMap":22},[14,116930,116931],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[59,116933,116934,116937,116940,116943],{},[62,116935,116936],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[62,116938,116939],{},"快速测试控制算法，不必一开始就上真实机器人。",[62,116941,116942],{},"生成强化学习环境。",[62,116944,116945],{},"采集状态、动作、图像、奖励等训练数据。",[47,116947,116948],{"id":116948},"学习前的心智模型",[14,116950,116951],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[253,116953,116954,116966],{},[256,116955,116956],{},[259,116957,116958,116961,116964],{},[262,116959,116960],{"align":23729},"部分",[262,116962,116963],{"align":23729},"负责什么",[262,116965,21179],{"align":23729},[300,116967,116968,116979,116991,117003,117015],{},[259,116969,116970,116973,116976],{},[305,116971,116972],{"align":23729},"MJCF XML",[305,116974,116975],{"align":23729},"定义世界和机器人结构",[305,116977,116978],{"align":23729},"地面、盒子、关节、电机、摄像头",[259,116980,116981,116985,116988],{},[305,116982,116983],{"align":23729},[102,116984,100694],{},[305,116986,116987],{"align":23729},"编译后的静态模型",[305,116989,116990],{"align":23729},"有几个关节、有几个电机、时间步长是多少",[259,116992,116993,116997,117000],{},[305,116994,116995],{"align":23729},[102,116996,100704],{},[305,116998,116999],{"align":23729},"运行中的动态状态",[305,117001,117002],{"align":23729},"当前时间、位置、速度、电机输入",[259,117004,117005,117009,117012],{},[305,117006,117007],{"align":23729},[102,117008,101200],{},[305,117010,117011],{"align":23729},"推进一步物理仿真",[305,117013,117014],{"align":23729},"根据重力、力、碰撞更新状态",[259,117016,117017,117020,117023],{},[305,117018,117019],{"align":23729},"Viewer \u002F Renderer",[305,117021,117022],{"align":23729},"把仿真显示出来",[305,117024,117025],{"align":23729},"打开窗口或保存图片",[14,117027,117028],{},"一句话总结：",[96,117030,117033],{"className":117031,"code":117032,"language":5179,"meta":22},[5177],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[102,117034,117032],{"__ignoreMap":22},[14,117036,117037],{},"参考来源：",[1123,117039,117040,117047,117054],{},[62,117041,117042,117043],{},"MuJoCo Python 官方文档：",[354,117044,117045],{"href":117045,"rel":117046},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23858],[62,117048,117049,117050],{},"MuJoCo XML Reference：",[354,117051,117052],{"href":117052,"rel":117053},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23858],[62,117055,117056,117057],{},"MuJoCo Overview：",[354,117058,117059],{"href":117059,"rel":117060},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23858],[47,117062,117063],{"id":117063},"章节目录",[59,117065,117066,117072,117078,117084,117090,117096,117102,117108],{},[62,117067,117068],{},[354,117069,117071],{"href":117070},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[62,117073,117074],{},[354,117075,117077],{"href":117076},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[62,117079,117080],{},[354,117081,117083],{"href":117082},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[62,117085,117086],{},[354,117087,117089],{"href":117088},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[62,117091,117092],{},[354,117093,117095],{"href":117094},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[62,117097,117098],{},[354,117099,117101],{"href":117100},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[62,117103,117104],{},[354,117105,117107],{"href":117106},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[62,117109,117110],{},[354,117111,117113],{"href":117112},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[47,117115,117116],{"id":117116},"推荐学习路线",[96,117118,117121],{"className":117119,"code":117120,"language":5179,"meta":22},[5177],"环境安装\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",[102,117122,117120],{"__ignoreMap":22},[14,117124,117125],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[47,117127,117128],{"id":117128},"建议的目录结构",[14,117130,117131],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[96,117133,117135],{"className":23815,"code":117134,"language":23817,"meta":22,"style":22},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[102,117136,117137,117145],{"__ignoreMap":22},[105,117138,117139,117141,117143],{"class":107,"line":108},[105,117140,101251],{"class":1954},[105,117142,29201],{"class":164},[105,117144,101256],{"class":220},[105,117146,117147,117149],{"class":107,"line":28},[105,117148,101261],{"class":164},[105,117150,101256],{"class":220},[14,117152,117153],{},"每一章的代码都单独保存：",[96,117155,117158],{"className":117156,"code":117157,"language":5179,"meta":22},[5177],"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",[102,117159,117157],{"__ignoreMap":22},[14,117161,117162],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[47,117164,117165],{"id":117165},"学习方法",[14,117167,117168],{},"每章建议按这个顺序操作：",[59,117170,117171,117174,117177,117180,117183,117186],{},[62,117172,117173],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[62,117175,117176],{},"复制最小可运行代码，保存成指定文件。",[62,117178,117179],{},"运行代码，确认没有报错。",[62,117181,117182],{},"对照“运行结果说明”理解输出。",[62,117184,117185],{},"做“验证步骤”，主动改一两个参数。",[62,117187,117188],{},"遇到报错先看“常见错误与解决方案”。",[14,117190,117191],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[47,117193,117194],{"id":117194},"全局排错顺序",[14,117196,117197],{},"遇到问题时，按下面顺序查：",[59,117199,117200,117206,117212,117217,117220,117223,117230,117240],{},[62,117201,117202,117203],{},"Python 环境是否激活：",[102,117204,117205],{},"which python",[62,117207,117208,117209],{},"MuJoCo 是否能导入：",[102,117210,117211],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[62,117213,117214,117215],{},"是否误装了 ",[102,117216,100997],{},[62,117218,117219],{},"XML 标签是否闭合、属性是否拼写正确",[62,117221,117222],{},"actuator 引用的 joint 名字是否存在",[62,117224,117225,117227,117228],{},[102,117226,101061],{}," 的长度是否等于 ",[102,117229,102143],{},[62,117231,105570,117232,82524,117234,117236,117237],{},[102,117233,104015],{},[102,117235,104345],{}," 后是否调用了 ",[102,117238,117239],{},"mujoco.mj_forward",[62,117241,117242],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5118,117244,117245],{},"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":28,"depth":28,"links":117247},[117248,117249,117250,117251,117252,117253,117254,117255],{"id":116889,"depth":28,"text":116889},{"id":116918,"depth":28,"text":116919},{"id":116948,"depth":28,"text":116948},{"id":117063,"depth":28,"text":117063},{"id":117116,"depth":28,"text":117116},{"id":117128,"depth":28,"text":117128},{"id":117165,"depth":28,"text":117165},{"id":117194,"depth":28,"text":117194},"仿真搭建。",{"category":23371},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116832,"description":117256},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117263,"title":117264,"body":117265,"description":23369,"extension":30,"meta":117720,"navigation":32,"path":117721,"seo":117722,"stem":117723,"__hash__":117724},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117266,"toc":117718},[117267,117270,117273,117279,117715],[10,117268,117264],{"id":117269},"_1-最常用的基本操作更新",[14,117271,117272],{},"装linux系统教程：",[14,117274,117275],{},[354,117276,117277],{"href":117277,"rel":117278},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23858],[96,117280,117284],{"className":117281,"code":117282,"language":117283,"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",[102,117285,117286,117291,117296,117305,117310,117319,117324,117344,117349,117360,117365,117374,117379,117407,117412,117431,117436,117455,117459,117464,117480,117484,117489,117519,117523,117528,117544,117548,117553,117568,117572,117577,117593,117597,117602,117614,117626,117630,117635,117652,117656,117661,117679,117683,117688,117697,117701,117706],{"__ignoreMap":22},[105,117287,117288],{"class":107,"line":108},[105,117289,117290],{"class":174},"#更新相关的知识\n",[105,117292,117293],{"class":107,"line":28},[105,117294,117295],{"class":174},"# 更新软件包列表（从服务器获取最新软件信息）\n",[105,117297,117298,117300,117303],{"class":107,"line":1171},[105,117299,24561],{"class":1954},[105,117301,117302],{"class":220}," apt",[105,117304,26227],{"class":220},[105,117306,117307],{"class":107,"line":1186},[105,117308,117309],{"class":174},"# 升级所有可更新的软件包（不删除旧包）\n",[105,117311,117312,117314,117316],{"class":107,"line":1192},[105,117313,24561],{"class":1954},[105,117315,117302],{"class":220},[105,117317,117318],{"class":220}," upgrade\n",[105,117320,117321],{"class":107,"line":1206},[105,117322,117323],{"class":174},"#更新和升级软件包\n",[105,117325,117326,117328,117330,117333,117335,117337,117339,117342],{"class":107,"line":1212},[105,117327,24561],{"class":1954},[105,117329,117302],{"class":220},[105,117331,117332],{"class":220}," update",[105,117334,26175],{"class":115},[105,117336,24561],{"class":1954},[105,117338,117302],{"class":220},[105,117340,117341],{"class":220}," upgrade",[105,117343,100966],{"class":164},[105,117345,117346],{"class":107,"line":1303},[105,117347,117348],{"class":174},"#列出可更新的软件包及版本信息\n",[105,117350,117351,117354,117357],{"class":107,"line":1309},[105,117352,117353],{"class":1954},"apt",[105,117355,117356],{"class":220}," list",[105,117358,117359],{"class":164}," --upgradable\n",[105,117361,117362],{"class":107,"line":1321},[105,117363,117364],{"class":174},"#彻底升级（处理依赖关系，可能删除旧包）\n",[105,117366,117367,117369,117371],{"class":107,"line":1603},[105,117368,24561],{"class":1954},[105,117370,117302],{"class":220},[105,117372,117373],{"class":220}," full-upgrade\n",[105,117375,117376],{"class":107,"line":1608},[105,117377,117378],{"class":174},"#设置指定版本\n",[105,117380,117381,117383,117385,117387,117389,117392,117394,117396,117398,117400,117403,117405],{"class":107,"line":1614},[105,117382,24561],{"class":1954},[105,117384,117302],{"class":220},[105,117386,23827],{"class":220},[105,117388,28887],{"class":111},[105,117390,117391],{"class":220},"package_nam",[105,117393,190],{"class":115},[105,117395,1076],{"class":111},[105,117397,161],{"class":220},[105,117399,1026],{"class":111},[105,117401,117402],{"class":220},"version_numbe",[105,117404,786],{"class":115},[105,117406,51292],{"class":111},[105,117408,117409],{"class":107,"line":1619},[105,117410,117411],{"class":174},"#只安装软件包不升级\n",[105,117413,117414,117416,117418,117420,117422,117424,117426,117428],{"class":107,"line":1633},[105,117415,24561],{"class":1954},[105,117417,117302],{"class":220},[105,117419,23827],{"class":220},[105,117421,28887],{"class":111},[105,117423,117391],{"class":220},[105,117425,190],{"class":115},[105,117427,1076],{"class":111},[105,117429,117430],{"class":164}," --no-upgrade\n",[105,117432,117433],{"class":107,"line":1638},[105,117434,117435],{"class":174},"#只升级，不存在就不安装\n",[105,117437,117438,117440,117442,117444,117446,117448,117450,117452],{"class":107,"line":1644},[105,117439,24561],{"class":1954},[105,117441,117302],{"class":220},[105,117443,23827],{"class":220},[105,117445,28887],{"class":111},[105,117447,117391],{"class":220},[105,117449,190],{"class":115},[105,117451,1076],{"class":111},[105,117453,117454],{"class":164}," --only-upgrade\n",[105,117456,117457],{"class":107,"line":1665},[105,117458,2391],{"emptyLinePlaceholder":32},[105,117460,117461],{"class":107,"line":1670},[105,117462,117463],{"class":174},"#安装指定的软件命令\n",[105,117465,117466,117468,117470,117472,117474,117476,117478],{"class":107,"line":1684},[105,117467,24561],{"class":1954},[105,117469,117302],{"class":220},[105,117471,23827],{"class":220},[105,117473,28887],{"class":111},[105,117475,117391],{"class":220},[105,117477,190],{"class":115},[105,117479,51292],{"class":111},[105,117481,117482],{"class":107,"line":1689},[105,117483,2391],{"emptyLinePlaceholder":32},[105,117485,117486],{"class":107,"line":1718},[105,117487,117488],{"class":174},"#安装多个软件包\n",[105,117490,117491,117493,117495,117497,117499,117502,117505,117507,117509,117512,117514,117516],{"class":107,"line":1723},[105,117492,24561],{"class":1954},[105,117494,117302],{"class":220},[105,117496,23827],{"class":220},[105,117498,28887],{"class":111},[105,117500,117501],{"class":220},"package_",[105,117503,117504],{"class":111},"1>",[105,117506,28887],{"class":111},[105,117508,117501],{"class":220},[105,117510,117511],{"class":111},"2>",[105,117513,28887],{"class":111},[105,117515,117501],{"class":220},[105,117517,117518],{"class":111},"3>\n",[105,117520,117521],{"class":107,"line":1740},[105,117522,2391],{"emptyLinePlaceholder":32},[105,117524,117525],{"class":107,"line":1745},[105,117526,117527],{"class":174},"#更新指定的软件命令\n",[105,117529,117530,117532,117534,117536,117538,117540,117542],{"class":107,"line":1750},[105,117531,24561],{"class":1954},[105,117533,117302],{"class":220},[105,117535,117332],{"class":220},[105,117537,28887],{"class":111},[105,117539,117391],{"class":220},[105,117541,190],{"class":115},[105,117543,51292],{"class":111},[105,117545,117546],{"class":107,"line":1755},[105,117547,2391],{"emptyLinePlaceholder":32},[105,117549,117550],{"class":107,"line":1769},[105,117551,117552],{"class":174},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[105,117554,117555,117557,117560,117562,117564,117566],{"class":107,"line":1774},[105,117556,117353],{"class":1954},[105,117558,117559],{"class":220}," show",[105,117561,28887],{"class":111},[105,117563,117391],{"class":220},[105,117565,190],{"class":115},[105,117567,51292],{"class":111},[105,117569,117570],{"class":107,"line":2568},[105,117571,2391],{"emptyLinePlaceholder":32},[105,117573,117574],{"class":107,"line":2582},[105,117575,117576],{"class":174},"#删除软件包命令\n",[105,117578,117579,117581,117583,117585,117587,117589,117591],{"class":107,"line":2590},[105,117580,24561],{"class":1954},[105,117582,117302],{"class":220},[105,117584,26064],{"class":220},[105,117586,28887],{"class":111},[105,117588,117391],{"class":220},[105,117590,190],{"class":115},[105,117592,51292],{"class":111},[105,117594,117595],{"class":107,"line":2595},[105,117596,2391],{"emptyLinePlaceholder":32},[105,117598,117599],{"class":107,"line":2601},[105,117600,117601],{"class":174},"# 清理旧版本和缓存（释放磁盘空间）\n",[105,117603,117604,117606,117608,117611],{"class":107,"line":2607},[105,117605,24561],{"class":1954},[105,117607,117302],{"class":220},[105,117609,117610],{"class":220}," autoremove",[105,117612,117613],{"class":174},"  # 删除不再需要的依赖和库文件\n",[105,117615,117616,117618,117620,117623],{"class":107,"line":2612},[105,117617,24561],{"class":1954},[105,117619,117302],{"class":220},[105,117621,117622],{"class":220}," clean",[105,117624,117625],{"class":174},"       # 清理下载的缓存包\n",[105,117627,117628],{"class":107,"line":7940},[105,117629,2391],{"emptyLinePlaceholder":32},[105,117631,117632],{"class":107,"line":7964},[105,117633,117634],{"class":174},"#移除软件包及配置文件\n",[105,117636,117637,117639,117641,117644,117646,117648,117650],{"class":107,"line":7969},[105,117638,24561],{"class":1954},[105,117640,117302],{"class":220},[105,117642,117643],{"class":220}," purge",[105,117645,28887],{"class":111},[105,117647,117391],{"class":220},[105,117649,190],{"class":115},[105,117651,51292],{"class":111},[105,117653,117654],{"class":107,"line":7975},[105,117655,2391],{"emptyLinePlaceholder":32},[105,117657,117658],{"class":107,"line":8002},[105,117659,117660],{"class":174},"#查找软件包命令\n",[105,117662,117663,117665,117667,117670,117672,117675,117677],{"class":107,"line":8007},[105,117664,24561],{"class":1954},[105,117666,117302],{"class":220},[105,117668,117669],{"class":220}," search",[105,117671,28887],{"class":111},[105,117673,117674],{"class":220},"keywor",[105,117676,430],{"class":115},[105,117678,51292],{"class":111},[105,117680,117681],{"class":107,"line":8013},[105,117682,2391],{"emptyLinePlaceholder":32},[105,117684,117685],{"class":107,"line":8025},[105,117686,117687],{"class":174},"#列出所有已安装的包\n",[105,117689,117690,117692,117694],{"class":107,"line":8037},[105,117691,117353],{"class":1954},[105,117693,117356],{"class":220},[105,117695,117696],{"class":164}," --installed\n",[105,117698,117699],{"class":107,"line":8049},[105,117700,2391],{"emptyLinePlaceholder":32},[105,117702,117703],{"class":107,"line":9708},[105,117704,117705],{"class":174},"#列出所有已安装的包的版本信息\n",[105,117707,117708,117710,117712],{"class":107,"line":9733},[105,117709,117353],{"class":1954},[105,117711,117356],{"class":220},[105,117713,117714],{"class":164}," --all-versions\n",[5118,117716,117717],{},"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":28,"depth":28,"links":117719},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117264,"description":23369},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117726,"title":117727,"body":117728,"description":23369,"extension":30,"meta":118469,"navigation":32,"path":118470,"seo":118471,"stem":118472,"__hash__":118473},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117729,"toc":118456},[117730,117733,117737,117740,117746,117750,117754,117760,117765,117770,117775,117780,117785,117788,117791,117794,117797,117801,117804,117809,117812,117817,117820,117825,117832,117835,117838,117841,117844,117847,117858,117862,117866,117871,117876,117880,117885,117889,117894,117898,117902,117907,117910,117955,117960,117964,117968,117973,117979,117984,117994,117999,118009,118014,118019,118046,118050,118053,118058,118061,118086,118090,118095,118098,118103,118108,118128,118133,118136,118151,118155,118208,118211,118216,118220,118223,118238,118241,118244,118249,118253,118257,118260,118264,118268,118271,118276,118281,118285,118292,118300,118303,118310,118315,118320,118323,118328,118335,118340,118347,118351,118353,118358,118362,118365,118368,118373,118376,118381,118384,118389,118394,118399,118403,118408,118412,118453],[10,117731,117727],{"id":117732},"_2-linux装机教程",[47,117734,117736],{"id":117735},"_21-实体机","2.1 实体机",[14,117738,117739],{},"使用清华源：（Ubuntu24.04）",[14,117741,117742],{},[354,117743,117744],{"href":117744,"rel":117745},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23858],[47,117747,117749],{"id":117748},"_22-普通虚拟机","2.2 普通虚拟机",[76,117751,117753],{"id":117752},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117755,117756],{},[354,117757,117758],{"href":117758,"rel":117759},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23858],[14,117761,117762],{},[20,117763],{"alt":22,"src":117764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[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-002.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-003.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-004.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-005.png",[14,117786,117787],{},"内存4G（4096MB）；",[14,117789,117790],{},"CPU给4个核；",[14,117792,117793],{},"硬盘动态分配60G；",[14,117795,117796],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[76,117798,117800],{"id":117799},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117802,117803],{},"按照1.1的步骤下载Ubuntu",[14,117805,117806],{},[20,117807],{"alt":22,"src":117808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117810,117811],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117813,117814],{},[20,117815],{"alt":22,"src":117816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117818,117819],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117821,117822],{},[20,117823],{"alt":22,"src":117824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117826,117827,117828,117831],{},"选择“正常安装”(找不到都用Alt+F7)， ",[265,117829,117830],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117833,117834],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117836,117837],{},"将改动写入磁盘吗 继续",[14,117839,117840],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117842,117843],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117845,117846],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117848,117849,117850,117853,117854,117857],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[265,117851,117852],{},"除了"," 选不发送系统信息与不升级之外， ",[265,117855,117856],{},"其它"," 都跳过或前进）",[76,117859,117861],{"id":117860},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21990,117863,117865],{"id":117864},"_2231-全屏","2.2.3.1 全屏",[14,117867,117868],{},[20,117869],{"alt":22,"src":117870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[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-010.png",[21990,117877,117879],{"id":117878},"_2232-文件交换","2.2.3.2 文件交换",[14,117881,117882],{},[20,117883],{"alt":22,"src":117884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21990,117886,117888],{"id":117887},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117890,117891],{},[20,117892],{"alt":22,"src":117893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[47,117895,117897],{"id":117896},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[76,117899,117901],{"id":117900},"_231-简介与优缺点","2.3.1 简介与优缺点",[59,117903,117904],{},[62,117905,117906],{},"什么情况下推荐？",[14,117908,117909],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[59,117911,117912],{"start":28},[62,117913,117914,117915],{},"优缺点：",[59,117916,117917,117947],{},[62,117918,117919,117920],{},"优点：",[59,117921,117922,117925,117932,117935,117938,117941,117944],{},[62,117923,117924],{},"WSL2是最好的Linux发行版;(bushi)",[62,117926,117927,117928,117931],{},"性能损耗极低。且比在Windows上跑深度性能 ",[265,117929,117930],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[62,117933,117934],{},"非常方便调用USB设备，可以USB直通;",[62,117936,117937],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[62,117939,117940],{},"非常方便Win与WSL2互相传文件等协同操作;",[62,117942,117943],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[62,117945,117946],{},"非常方便使用Windows的VScode远程开发;",[62,117948,117949,117950],{},"缺点：",[59,117951,117952],{},[62,117953,117954],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,117956,117957],{},[20,117958],{"alt":22,"src":117959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[76,117961,117963],{"id":117962},"_232-安装教程","2.3.2 安装教程",[21990,117965,117967],{"id":117966},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[59,117969,117970],{},[62,117971,117972],{},"方法一(图形界面)",[14,117974,117975,117976,24603],{},"用Win+R输入",[102,117977,117978],{},"appwiz.cpl",[14,117980,117981],{},[20,117982],{"alt":22,"src":117983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,117985,117986,117987,117990,117991,26458],{},"点击OK进入 ",[265,117988,117989],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[265,117992,117993],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,117995,117996],{},[20,117997],{"alt":22,"src":117998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118000,118001,118002,101003,118005,118008],{},"选择 ",[265,118003,118004],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[265,118006,118007],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118010,118011],{},[20,118012],{"alt":22,"src":118013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[59,118015,118016],{"start":28},[62,118017,118018],{},"方法二(命令行)",[96,118020,118024],{"className":118021,"code":118022,"language":118023,"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",[102,118025,118026,118031,118036,118041],{"__ignoreMap":22},[105,118027,118028],{"class":107,"line":108},[105,118029,118030],{},"# 开启 Linux 子系统\n",[105,118032,118033],{"class":107,"line":28},[105,118034,118035],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[105,118037,118038],{"class":107,"line":1171},[105,118039,118040],{},"# 开启虚拟机平台\n",[105,118042,118043],{"class":107,"line":1186},[105,118044,118045],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21990,118047,118049],{"id":118048},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118051,118052],{},"用管理员权限打开powershell",[14,118054,118055],{},[20,118056],{"alt":22,"src":118057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118059,118060],{},"升级WSL并设置默认版本为WSL2",[96,118062,118064],{"className":118021,"code":118063,"language":118023,"meta":22,"style":22},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[102,118065,118066,118071,118076,118081],{"__ignoreMap":22},[105,118067,118068],{"class":107,"line":108},[105,118069,118070],{},"# 更新 wsl\n",[105,118072,118073],{"class":107,"line":28},[105,118074,118075],{},"wsl --update\n",[105,118077,118078],{"class":107,"line":1171},[105,118079,118080],{},"# 将 wsl 版本设置为 wsl2\n",[105,118082,118083],{"class":107,"line":1186},[105,118084,118085],{},"wsl --set-default-version 2\n",[21990,118087,118089],{"id":118088},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[59,118091,118092],{},[62,118093,118094],{},"方式一(商店下载)",[14,118096,118097],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118099,118100],{},[20,118101],{"alt":22,"src":118102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[59,118104,118105],{"start":28},[62,118106,118107],{},"方式二(命令行安装)",[96,118109,118111],{"className":118021,"code":118110,"language":118023,"meta":22,"style":22},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[102,118112,118113,118118,118123],{"__ignoreMap":22},[105,118114,118115],{"class":107,"line":108},[105,118116,118117],{},"# 列出可安装的 Linux 版本\n",[105,118119,118120],{"class":107,"line":28},[105,118121,118122],{},"#（需要科学手段）\n",[105,118124,118125],{"class":107,"line":1171},[105,118126,118127],{},"wsl --list --online\n",[14,118129,118130],{},[20,118131],{"alt":22,"src":118132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118134,118135],{},"选择对应发行版并安装",[96,118137,118139],{"className":118021,"code":118138,"language":118023,"meta":22,"style":22},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[102,118140,118141,118146],{"__ignoreMap":22},[105,118142,118143],{"class":107,"line":108},[105,118144,118145],{},"# Ubuntu安装完毕后需要重启系统\n",[105,118147,118148],{"class":107,"line":28},[105,118149,118150],{},"wsl --install -d Ubuntu-24.04\n",[21990,118152,118154],{"id":118153},"_2324-查看系统状态","2.3.2.4 查看系统状态",[96,118156,118158],{"className":118021,"code":118157,"language":118023,"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",[102,118159,118160,118165,118170,118175,118180,118184,118188,118193,118198,118203],{"__ignoreMap":22},[105,118161,118162],{"class":107,"line":108},[105,118163,118164],{},"# 查看 wsl\n",[105,118166,118167],{"class":107,"line":28},[105,118168,118169],{},"wsl -l\n",[105,118171,118172],{"class":107,"line":1171},[105,118173,118174],{},"# 查看 wsl 运行版本或模式\n",[105,118176,118177],{"class":107,"line":1186},[105,118178,118179],{},"wsl -l -v\n",[105,118181,118182],{"class":107,"line":1192},[105,118183,2391],{"emptyLinePlaceholder":32},[105,118185,118186],{"class":107,"line":1206},[105,118187,2391],{"emptyLinePlaceholder":32},[105,118189,118190],{"class":107,"line":1212},[105,118191,118192],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[105,118194,118195],{"class":107,"line":1303},[105,118196,118197],{},"wsl --set-version \u003Cdistro> 2\n",[105,118199,118200],{"class":107,"line":1309},[105,118201,118202],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[105,118204,118205],{"class":107,"line":1321},[105,118206,118207],{},"wsl --unregister \u003Cdistro>\n",[14,118209,118210],{},"输出Version为2即正常",[14,118212,118213],{},[20,118214],{"alt":22,"src":118215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21990,118217,118219],{"id":118218},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118221,118222],{},"直接在Powershell里输入wsl命令进入子系统",[96,118224,118226],{"className":118021,"code":118225,"language":118023,"meta":22,"style":22},"# 进入子系统\nwsl\n",[102,118227,118228,118233],{"__ignoreMap":22},[105,118229,118230],{"class":107,"line":108},[105,118231,118232],{},"# 进入子系统\n",[105,118234,118235],{"class":107,"line":28},[105,118236,118237],{},"wsl\n",[14,118239,118240],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118242,118243],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118245,118246],{},[20,118247],{"alt":22,"src":118248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[76,118250,118252],{"id":118251},"_233-配置各种环境","2.3.3 配置各种环境",[21990,118254,118256],{"id":118255},"_2331-换源","2.3.3.1 换源",[14,118258,118259],{},"(同实体机LINUX，往下找教程)",[21990,118261,118263],{"id":118262},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22902,118265,118267],{"id":118266},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118269,118270],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118272,118273],{},[20,118274],{"alt":22,"src":118275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[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-023.png",[22902,118282,118284],{"id":118283},"_23322-cuda","2.3.3.2.2 CUDA",[14,118286,118287,118288],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[354,118289,118290],{"href":118290,"rel":118291},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23858],[14,118293,118294,118297],{},[20,118295],{"alt":22,"src":118296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[20,118298],{"alt":22,"src":118299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118301,118302],{},"在下方的网站，选择合适的版本。",[14,118304,118305,118306],{},"WSL2 专属 CUDA 指南：",[354,118307,118308],{"href":118308,"rel":118309},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23858],[14,118311,118312],{},[265,118313,118314],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118316,118317],{},[20,118318],{"alt":22,"src":118319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118321,118322],{},"挨行敲一遍",[14,118324,118325],{},[20,118326],{"alt":22,"src":118327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118329,118330,118331,118334],{},"敲完后，输入",[102,118332,118333],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118336,118337],{},[20,118338],{"alt":22,"src":118339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118341,118342,118343,118346],{},"（请详看下方教程的",[265,118344,118345],{},"安装CUDA的配置环境来看","如何配置环境）",[22902,118348,118350],{"id":118349},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118352,118259],{},[14,118354,118355],{},[20,118356],{"alt":22,"src":118357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21990,118359,118361],{"id":118360},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118363,118364],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118366,118367],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118369,118370],{},[20,118371],{"alt":22,"src":118372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118374,118375],{},"连接WSL2",[14,118377,118378],{},[20,118379],{"alt":22,"src":118380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118382,118383],{},"远程开发成功。",[14,118385,118386],{},[20,118387],{"alt":22,"src":118388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[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-033.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-034.png",[21990,118400,118402],{"id":118401},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118404,118405],{},[20,118406],{"alt":22,"src":118407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21990,118409,118411],{"id":118410},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[96,118413,118415],{"className":117281,"code":118414,"language":117283,"meta":22,"style":22},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[102,118416,118417,118425,118433,118444,118448],{"__ignoreMap":22},[105,118418,118419,118421,118423],{"class":107,"line":108},[105,118420,24561],{"class":1954},[105,118422,117302],{"class":220},[105,118424,26227],{"class":220},[105,118426,118427,118429,118431],{"class":107,"line":28},[105,118428,24561],{"class":1954},[105,118430,117302],{"class":220},[105,118432,117318],{"class":220},[105,118434,118435,118437,118439,118441],{"class":107,"line":1171},[105,118436,24561],{"class":1954},[105,118438,117302],{"class":220},[105,118440,23827],{"class":220},[105,118442,118443],{"class":220}," mesa-utils\n",[105,118445,118446],{"class":107,"line":1186},[105,118447,2391],{"emptyLinePlaceholder":32},[105,118449,118450],{"class":107,"line":1192},[105,118451,118452],{"class":174},"#然后重启wsl2即可\n",[5118,118454,118455],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":28,"depth":28,"links":118457},[118458,118459,118464],{"id":117735,"depth":28,"text":117736},{"id":117748,"depth":28,"text":117749,"children":118460},[118461,118462,118463],{"id":117752,"depth":1171,"text":117753},{"id":117799,"depth":1171,"text":117800},{"id":117860,"depth":1171,"text":117861},{"id":117896,"depth":28,"text":117897,"children":118465},[118466,118467,118468],{"id":117900,"depth":1171,"text":117901},{"id":117962,"depth":1171,"text":117963},{"id":118251,"depth":1171,"text":118252},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117727,"description":23369},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118475,"title":118476,"body":118477,"description":23369,"extension":30,"meta":121413,"navigation":32,"path":121414,"seo":121415,"stem":121416,"__hash__":121417},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118478,"toc":121385},[118479,118482,118486,118492,118496,118502,118506,118694,118697,118702,118706,118710,118713,118716,118722,118727,118730,118733,118738,118771,118776,118780,118857,118860,118865,118869,118872,118911,118914,118923,118941,118946,118953,119070,119075,119078,119105,119110,119114,119123,119173,119180,119184,119187,119201,119208,119242,119247,119251,119274,119277,119282,119286,119289,119292,119295,119337,119341,119344,119347,119388,119392,119396,119399,119404,119409,119412,119435,119438,119446,119451,119454,119459,119464,119467,119472,119476,119481,119504,119509,119571,119579,119584,119589,119592,119597,119600,119605,119610,119628,119633,119639,119644,119658,119662,119665,119668,119671,119714,119717,119722,119823,119826,119831,119835,119839,119876,119880,119884,119888,119934,119938,119983,119987,119994,120002,120057,120060,120137,120140,120163,120167,120170,120175,120180,120188,120191,120196,120201,120206,120209,120214,120223,120226,120231,120234,120305,120310,120313,120318,120321,120326,120329,120334,120337,120342,120347,120350,120425,120428,120441,120446,120449,120463,120466,120495,120500,120529,120532,120537,120541,120546,120555,120558,120563,120566,120571,120574,120577,120582,120585,120590,120595,120598,120603,120606,120731,120736,120766,120769,120774,120779,120796,120799,120842,120845,120872,120877,120890,121033,121037,121042,121056,121059,121110,121113,121143,121146,121162,121167,121181,121184,121251,121256,121265,121270,121273,121285,121290,121297,121321,121324,121329,121332,121351,121356,121363,121375,121382],[10,118480,118476],{"id":118481},"_3-安装必备配置",[47,118483,118485],{"id":118484},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[96,118487,118490],{"className":118488,"code":118489,"language":5179},[5177],"  打开下方网站（注意，该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",[102,118491,118489],{"__ignoreMap":22},[76,118493,118495],{"id":118494},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[96,118497,118500],{"className":118498,"code":118499,"language":5179},[5177],"  输入以下命令\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",[102,118501,118499],{"__ignoreMap":22},[76,118503,118505],{"id":118504},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[96,118507,118511],{"className":118508,"code":118509,"language":118510,"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",[102,118512,118513,118521,118532,118544,118558,118562,118572,118577,118581,118585,118590,118594,118606,118610,118615,118619,118630,118634,118650,118654,118665,118669,118674,118678,118686],{"__ignoreMap":22},[105,118514,118515,118517,118519],{"class":107,"line":108},[105,118516,24561],{"class":1954},[105,118518,117302],{"class":220},[105,118520,26227],{"class":220},[105,118522,118523,118525,118527,118529],{"class":107,"line":28},[105,118524,24561],{"class":1954},[105,118526,117302],{"class":220},[105,118528,23827],{"class":220},[105,118530,118531],{"class":220}," vim\n",[105,118533,118534,118536,118539,118541],{"class":107,"line":1171},[105,118535,24561],{"class":1954},[105,118537,118538],{"class":220}," rm",[105,118540,25310],{"class":164},[105,118542,118543],{"class":220}," \u002Fetc\u002Fapt\u002Fsources.list\n",[105,118545,118546,118548,118550,118552,118555],{"class":107,"line":1186},[105,118547,24561],{"class":1954},[105,118549,118538],{"class":220},[105,118551,25310],{"class":164},[105,118553,118554],{"class":220}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[105,118556,118557],{"class":164},"**\n",[105,118559,118560],{"class":107,"line":1192},[105,118561,2391],{"emptyLinePlaceholder":32},[105,118563,118564,118566,118569],{"class":107,"line":1206},[105,118565,24561],{"class":1954},[105,118567,118568],{"class":220}," vim",[105,118570,118571],{"class":220}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[105,118573,118574],{"class":107,"line":1212},[105,118575,118576],{"class":220},"```\n",[105,118578,118579],{"class":107,"line":1303},[105,118580,2391],{"emptyLinePlaceholder":32},[105,118582,118583],{"class":107,"line":1309},[105,118584,2391],{"emptyLinePlaceholder":32},[105,118586,118587],{"class":107,"line":1321},[105,118588,118589],{"class":1954},"选择好Ubuntu版本后，复制下方的内容。\n",[105,118591,118592],{"class":107,"line":1603},[105,118593,2391],{"emptyLinePlaceholder":32},[105,118595,118596,118598,118601,118604],{"class":107,"line":1608},[105,118597,342],{"class":111},[105,118599,118600],{"class":220},"[](",[105,118602,118603],{"class":1954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[105,118605,122],{"class":220},[105,118607,118608],{"class":107,"line":1614},[105,118609,2391],{"emptyLinePlaceholder":32},[105,118611,118612],{"class":107,"line":1619},[105,118613,118614],{"class":1954},"粘贴进去\n",[105,118616,118617],{"class":107,"line":1633},[105,118618,2391],{"emptyLinePlaceholder":32},[105,118620,118621,118623,118625,118628],{"class":107,"line":1638},[105,118622,342],{"class":111},[105,118624,118600],{"class":220},[105,118626,118627],{"class":1954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[105,118629,122],{"class":220},[105,118631,118632],{"class":107,"line":1644},[105,118633,2391],{"emptyLinePlaceholder":32},[105,118635,118636,118639,118642,118645,118647],{"class":107,"line":1665},[105,118637,118638],{"class":1954},"按一下ESC，然后英文冒号，输入",[105,118640,118641],{"class":220}," `",[105,118643,118644],{"class":1954},":wq!",[105,118646,1088],{"class":220},[105,118648,118649],{"class":1954},"然后回车\n",[105,118651,118652],{"class":107,"line":1670},[105,118653,2391],{"emptyLinePlaceholder":32},[105,118655,118656,118658,118660,118663],{"class":107,"line":1684},[105,118657,342],{"class":111},[105,118659,118600],{"class":220},[105,118661,118662],{"class":1954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[105,118664,122],{"class":220},[105,118666,118667],{"class":107,"line":1689},[105,118668,2391],{"emptyLinePlaceholder":32},[105,118670,118671],{"class":107,"line":1718},[105,118672,118673],{"class":1954},"输入以下命令\n",[105,118675,118676],{"class":107,"line":1723},[105,118677,2391],{"emptyLinePlaceholder":32},[105,118679,118680,118683],{"class":107,"line":1740},[105,118681,118682],{"class":220},"```",[105,118684,118685],{"class":1954},"Bash\n",[105,118687,118688,118690,118692],{"class":107,"line":1745},[105,118689,24561],{"class":1954},[105,118691,117302],{"class":220},[105,118693,26227],{"class":220},[14,118695,118696],{},"这里被替换成对应学校则成功",[14,118698,118699],{},[20,118700],{"alt":22,"src":118701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[47,118703,118705],{"id":118704},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[76,118707,118709],{"id":118708},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118711,118712],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118714,118715],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118717,118718],{},[354,118719,118720],{"href":118720,"rel":118721},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23858],[14,118723,118724],{},[20,118725],{"alt":22,"src":118726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118728,118729],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118731,118732],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118734,118735],{},[20,118736],{"alt":22,"src":118737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[96,118739,118741],{"className":117281,"code":118740,"language":117283,"meta":22,"style":22},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[102,118742,118743,118748,118755,118760],{"__ignoreMap":22},[105,118744,118745],{"class":107,"line":108},[105,118746,118747],{"class":174},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[105,118749,118750,118752],{"class":107,"line":28},[105,118751,101261],{"class":164},[105,118753,118754],{"class":220}," ~\u002FDownloads\n",[105,118756,118757],{"class":107,"line":1171},[105,118758,118759],{"class":174},"#下方chrome安装包名不一定是这个，根据名字来看\n",[105,118761,118762,118764,118766,118768],{"class":107,"line":1186},[105,118763,24561],{"class":1954},[105,118765,117302],{"class":220},[105,118767,23827],{"class":220},[105,118769,118770],{"class":220}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118772,118773],{},[20,118774],{"alt":22,"src":118775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[76,118777,118779],{"id":118778},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[96,118781,118783],{"className":117281,"code":118782,"language":117283,"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",[102,118784,118785,118790,118798,118809,118814,118818,118823,118833,118841,118852],{"__ignoreMap":22},[105,118786,118787],{"class":107,"line":108},[105,118788,118789],{"class":174},"# 老版\n",[105,118791,118792,118794,118796],{"class":107,"line":28},[105,118793,24561],{"class":1954},[105,118795,117302],{"class":220},[105,118797,26227],{"class":220},[105,118799,118800,118802,118804,118806],{"class":107,"line":1171},[105,118801,24561],{"class":1954},[105,118803,117302],{"class":220},[105,118805,23827],{"class":220},[105,118807,118808],{"class":220}," neofetch\n",[105,118810,118811],{"class":107,"line":1186},[105,118812,118813],{"class":1954},"neofetch\n",[105,118815,118816],{"class":107,"line":1192},[105,118817,2391],{"emptyLinePlaceholder":32},[105,118819,118820],{"class":107,"line":1206},[105,118821,118822],{"class":174},"# 新版\n",[105,118824,118825,118827,118830],{"class":107,"line":1212},[105,118826,24561],{"class":1954},[105,118828,118829],{"class":220}," add-apt-repository",[105,118831,118832],{"class":220}," ppa:zhangsongcui3371\u002Ffastfetch\n",[105,118834,118835,118837,118839],{"class":107,"line":1303},[105,118836,24561],{"class":1954},[105,118838,117302],{"class":220},[105,118840,26227],{"class":220},[105,118842,118843,118845,118847,118849],{"class":107,"line":1309},[105,118844,24561],{"class":1954},[105,118846,117302],{"class":220},[105,118848,23827],{"class":220},[105,118850,118851],{"class":220}," fastfetch\n",[105,118853,118854],{"class":107,"line":1321},[105,118855,118856],{"class":1954},"fastfetch\n",[14,118858,118859],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118861,118862],{},[20,118863],{"alt":22,"src":118864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[76,118866,118868],{"id":118867},"_323-移除snap应用","3.2.3 移除snap应用",[14,118870,118871],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[96,118873,118875],{"className":117281,"code":118874,"language":117283,"meta":22,"style":22},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[102,118876,118877,118889,118900],{"__ignoreMap":22},[105,118878,118879,118881,118883,118886],{"class":107,"line":108},[105,118880,24561],{"class":1954},[105,118882,26498],{"class":220},[105,118884,118885],{"class":220}," disable",[105,118887,118888],{"class":220}," snapd.service\n",[105,118890,118891,118893,118895,118897],{"class":107,"line":28},[105,118892,24561],{"class":1954},[105,118894,26498],{"class":220},[105,118896,118885],{"class":220},[105,118898,118899],{"class":220}," snapd.socket\n",[105,118901,118902,118904,118906,118908],{"class":107,"line":1171},[105,118903,24561],{"class":1954},[105,118905,26498],{"class":220},[105,118907,118885],{"class":220},[105,118909,118910],{"class":220}," snapd.seeded.service\n",[14,118912,118913],{},"然后查看snap应用列表",[14,118915,118916,118917,118922],{},"根据你安装的选择不同（最小安装或普通安装），有",[354,118918,118921],{"href":118919,"rel":118920},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23858],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[96,118924,118926],{"className":117281,"code":118925,"language":117283,"meta":22,"style":22},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[102,118927,118928,118933],{"__ignoreMap":22},[105,118929,118930],{"class":107,"line":108},[105,118931,118932],{"class":174},"# 查询当前系统上snap安装了哪些app\n",[105,118934,118935,118938],{"class":107,"line":28},[105,118936,118937],{"class":1954},"snap",[105,118939,118940],{"class":220}," list\n",[14,118942,118943],{},[20,118944],{"alt":22,"src":118945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,118947,118948,118949,118952],{},"卸载掉图中所有应用，按照 ",[265,118950,118951],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[96,118954,118956],{"className":117281,"code":118955,"language":117283,"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",[102,118957,118958,118963,118975,118980,118991,118996,119007,119012,119023,119028,119032,119037,119048,119059],{"__ignoreMap":22},[105,118959,118960],{"class":107,"line":108},[105,118961,118962],{"class":174},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[105,118964,118965,118967,118970,118972],{"class":107,"line":28},[105,118966,24561],{"class":1954},[105,118968,118969],{"class":220}," snap",[105,118971,26064],{"class":220},[105,118973,118974],{"class":220}," snap-store\n",[105,118976,118977],{"class":107,"line":1171},[105,118978,118979],{"class":174},"#移除firefox浏览器\n",[105,118981,118982,118984,118986,118988],{"class":107,"line":1186},[105,118983,24561],{"class":1954},[105,118985,118969],{"class":220},[105,118987,26064],{"class":220},[105,118989,118990],{"class":220}," firefox\n",[105,118992,118993],{"class":107,"line":1192},[105,118994,118995],{"class":174},"#移除gnome-42-2204\n",[105,118997,118998,119000,119002,119004],{"class":107,"line":1206},[105,118999,24561],{"class":1954},[105,119001,118969],{"class":220},[105,119003,26064],{"class":220},[105,119005,119006],{"class":220}," gnome-42-2204\n",[105,119008,119009],{"class":107,"line":1212},[105,119010,119011],{"class":174},"#移除gtk-common-themes\n",[105,119013,119014,119016,119018,119020],{"class":107,"line":1303},[105,119015,24561],{"class":1954},[105,119017,118969],{"class":220},[105,119019,26064],{"class":220},[105,119021,119022],{"class":220}," gtk-common-themes\n",[105,119024,119025],{"class":107,"line":1309},[105,119026,119027],{"class":174},"#移除其它...\n",[105,119029,119030],{"class":107,"line":1321},[105,119031,2665],{"class":115},[105,119033,119034],{"class":107,"line":1603},[105,119035,119036],{"class":174},"#移除core22,bare以及snapd\n",[105,119038,119039,119041,119043,119045],{"class":107,"line":1608},[105,119040,24561],{"class":1954},[105,119042,118969],{"class":220},[105,119044,26064],{"class":220},[105,119046,119047],{"class":220}," core22\n",[105,119049,119050,119052,119054,119056],{"class":107,"line":1614},[105,119051,24561],{"class":1954},[105,119053,118969],{"class":220},[105,119055,26064],{"class":220},[105,119057,119058],{"class":220}," bare\n",[105,119060,119061,119063,119065,119067],{"class":107,"line":1619},[105,119062,24561],{"class":1954},[105,119064,118969],{"class":220},[105,119066,26064],{"class":220},[105,119068,119069],{"class":220}," snapd\n",[14,119071,119072],{},[20,119073],{"alt":22,"src":119074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119076,119077],{},"输入以下命令查看是否还有snap包",[96,119079,119081],{"className":117281,"code":119080,"language":117283,"meta":22,"style":22},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[102,119082,119083,119089,119093,119097,119101],{"__ignoreMap":22},[105,119084,119085,119087],{"class":107,"line":108},[105,119086,118937],{"class":1954},[105,119088,118940],{"class":220},[105,119090,119091],{"class":107,"line":28},[105,119092,118789],{"class":174},[105,119094,119095],{"class":107,"line":1171},[105,119096,118813],{"class":1954},[105,119098,119099],{"class":107,"line":1186},[105,119100,118822],{"class":174},[105,119102,119103],{"class":107,"line":1192},[105,119104,118856],{"class":1954},[14,119106,119107],{},[20,119108],{"alt":22,"src":119109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[76,119111,119113],{"id":119112},"_324-移除snap","3.2.4 移除snap",[14,119115,119116,119117,119122],{},"在删除掉",[354,119118,119121],{"href":119119,"rel":119120},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23858],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[96,119124,119126],{"className":117281,"code":119125,"language":117283,"meta":22,"style":22}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[102,119127,119128,119133,119146,119151,119162],{"__ignoreMap":22},[105,119129,119130],{"class":107,"line":108},[105,119131,119132],{"class":174}," #使用apt移除掉snap\n",[105,119134,119135,119137,119139,119141,119144],{"class":107,"line":28},[105,119136,24561],{"class":1954},[105,119138,117302],{"class":220},[105,119140,117610],{"class":220},[105,119142,119143],{"class":164}," --purge",[105,119145,119069],{"class":220},[105,119147,119148],{"class":107,"line":1171},[105,119149,119150],{"class":174},"#移除snapd的一些目录\n",[105,119152,119153,119155,119157,119159],{"class":107,"line":1186},[105,119154,24561],{"class":1954},[105,119156,118538],{"class":220},[105,119158,25310],{"class":164},[105,119160,119161],{"class":220}," \u002Fvar\u002Fcache\u002Fsnapd\n",[105,119163,119164,119166,119168,119170],{"class":107,"line":1192},[105,119165,24561],{"class":1954},[105,119167,118538],{"class":220},[105,119169,25310],{"class":164},[105,119171,119172],{"class":220}," ~\u002Fsnap\n",[14,119174,119175,119176,119179],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[102,119177,119178],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[76,119181,119183],{"id":119182},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119185,119186],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[96,119188,119190],{"className":117281,"code":119189,"language":117283,"meta":22,"style":22},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[102,119191,119192],{"__ignoreMap":22},[105,119193,119194,119196,119198],{"class":107,"line":108},[105,119195,24561],{"class":1954},[105,119197,118568],{"class":220},[105,119199,119200],{"class":220}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119202,119203,119204,119207],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[102,119205,119206],{},":wq"," 回车",[96,119209,119211],{"className":117281,"code":119210,"language":117283,"meta":22,"style":22},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[102,119212,119213,119220,119234],{"__ignoreMap":22},[105,119214,119215,119218],{"class":107,"line":108},[105,119216,119217],{"class":1954},"Package:",[105,119219,119069],{"class":220},[105,119221,119222,119225,119228,119231],{"class":107,"line":28},[105,119223,119224],{"class":1954},"Pin:",[105,119226,119227],{"class":220}," release",[105,119229,119230],{"class":220}," a=",[105,119232,119233],{"class":164},"*\n",[105,119235,119236,119239],{"class":107,"line":1171},[105,119237,119238],{"class":1954},"Pin-Priority:",[105,119240,119241],{"class":164}," -10\n",[14,119243,119244],{},[20,119245],{"alt":22,"src":119246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[76,119248,119250],{"id":119249},"_326-测试是否成功","3.2.6 测试是否成功",[96,119252,119254],{"className":117281,"code":119253,"language":117283,"meta":22,"style":22},"sudo apt update\nsudo apt install firefox\n",[102,119255,119256,119264],{"__ignoreMap":22},[105,119257,119258,119260,119262],{"class":107,"line":108},[105,119259,24561],{"class":1954},[105,119261,117302],{"class":220},[105,119263,26227],{"class":220},[105,119265,119266,119268,119270,119272],{"class":107,"line":28},[105,119267,24561],{"class":1954},[105,119269,117302],{"class":220},[105,119271,23827],{"class":220},[105,119273,118990],{"class":220},[14,119275,119276],{},"这里提示snapd无法被安装，就证明成功了",[14,119278,119279],{},[20,119280],{"alt":22,"src":119281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[76,119283,119285],{"id":119284},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119287,119288],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119290,119291],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119293,119294],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[96,119296,119298],{"className":117281,"code":119297,"language":117283,"meta":22,"style":22},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[102,119299,119300,119305,119314,119319,119327],{"__ignoreMap":22},[105,119301,119302],{"class":107,"line":108},[105,119303,119304],{"class":174},"# 添加Mozilla提供的源\n",[105,119306,119307,119309,119311],{"class":107,"line":28},[105,119308,24561],{"class":1954},[105,119310,118829],{"class":220},[105,119312,119313],{"class":220}," ppa:mozillateam\u002Fppa\n",[105,119315,119316],{"class":107,"line":1171},[105,119317,119318],{"class":174},"# 安装Firefox\n",[105,119320,119321,119323,119325],{"class":107,"line":1186},[105,119322,24561],{"class":1954},[105,119324,117302],{"class":220},[105,119326,26227],{"class":220},[105,119328,119329,119331,119333,119335],{"class":107,"line":1192},[105,119330,24561],{"class":1954},[105,119332,117302],{"class":220},[105,119334,23827],{"class":220},[105,119336,118990],{"class":220},[76,119338,119340],{"id":119339},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119342,119343],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119345,119346],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[96,119348,119350],{"className":117281,"code":119349,"language":117283,"meta":22,"style":22},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[102,119351,119352,119357,119367,119375,119379],{"__ignoreMap":22},[105,119353,119354],{"class":107,"line":108},[105,119355,119356],{"class":174},"#删掉禁止安装snap的配置文件\n",[105,119358,119359,119361,119363,119365],{"class":107,"line":28},[105,119360,24561],{"class":1954},[105,119362,118538],{"class":220},[105,119364,25310],{"class":164},[105,119366,119200],{"class":220},[105,119368,119369,119371,119373],{"class":107,"line":1171},[105,119370,24561],{"class":1954},[105,119372,117302],{"class":220},[105,119374,26227],{"class":220},[105,119376,119377],{"class":107,"line":1186},[105,119378,2391],{"emptyLinePlaceholder":32},[105,119380,119381,119383,119385],{"class":107,"line":1192},[105,119382,24561],{"class":1954},[105,119384,117302],{"class":220},[105,119386,119387],{"class":220}," dist-update\n",[47,119389,119391],{"id":119390},"_33-中文输入法","3.3 中文输入法",[76,119393,119395],{"id":119394},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119397,119398],{},"官网下载搜狗输入法",[14,119400,119401],{},[20,119402],{"alt":22,"src":119403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[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-058.png",[14,119410,119411],{},"打开终端输入如下",[96,119413,119415],{"className":117281,"code":119414,"language":117283,"meta":22,"style":22},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[102,119416,119417,119424],{"__ignoreMap":22},[105,119418,119419,119421],{"class":107,"line":108},[105,119420,101261],{"class":164},[105,119422,119423],{"class":220}," ~\u002FDownloads\u002F\n",[105,119425,119426,119428,119430,119432],{"class":107,"line":28},[105,119427,24561],{"class":1954},[105,119429,117302],{"class":220},[105,119431,23827],{"class":220},[105,119433,119434],{"class":220}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119436,119437],{},"打开Fcitx",[14,119439,119440,119443],{},[20,119441],{"alt":22,"src":119442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[20,119444],{"alt":22,"src":119445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119447,119448],{},[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-061.png",[14,119452,119453],{},"添加搜狗输入法",[14,119455,119456],{},[20,119457],{"alt":22,"src":119458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[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-063.png",[14,119465,119466],{},"将搜狗输入法设置为唯一输入法",[14,119468,119469],{},[20,119470],{"alt":22,"src":119471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[76,119473,119475],{"id":119474},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[59,119477,119478],{},[62,119479,119480],{},"卸载旧输入法",[96,119482,119484],{"className":118508,"code":119483,"language":118510,"meta":22,"style":22},"sudo apt purge fcitx* ibus*\n",[102,119485,119486],{"__ignoreMap":22},[105,119487,119488,119490,119492,119494,119497,119499,119502],{"class":107,"line":108},[105,119489,24561],{"class":1954},[105,119491,117302],{"class":220},[105,119493,117643],{"class":220},[105,119495,119496],{"class":220}," fcitx",[105,119498,571],{"class":164},[105,119500,119501],{"class":220}," ibus",[105,119503,119233],{"class":164},[59,119505,119506],{"start":28},[62,119507,119508],{},"安装Fcitx5",[96,119510,119512],{"className":117281,"code":119511,"language":117283,"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",[102,119513,119514,119519,119533,119537,119542,119551,119559],{"__ignoreMap":22},[105,119515,119516],{"class":107,"line":108},[105,119517,119518],{"class":174},"# Ubuntu22.04及以上、Debian12及以上\n",[105,119520,119521,119523,119525,119527,119530],{"class":107,"line":28},[105,119522,24561],{"class":1954},[105,119524,117302],{"class":220},[105,119526,23827],{"class":220},[105,119528,119529],{"class":220}," fcitx5",[105,119531,119532],{"class":220}," fcitx5-chinese-addons\n",[105,119534,119535],{"class":107,"line":1171},[105,119536,2391],{"emptyLinePlaceholder":32},[105,119538,119539],{"class":107,"line":1186},[105,119540,119541],{"class":174},"# Ubuntu20.04\n",[105,119543,119544,119546,119548],{"class":107,"line":1192},[105,119545,24561],{"class":1954},[105,119547,118829],{"class":220},[105,119549,119550],{"class":220}," ppa:zhsj\u002Ffcitx5\n",[105,119552,119553,119555,119557],{"class":107,"line":1206},[105,119554,24561],{"class":1954},[105,119556,117302],{"class":220},[105,119558,26227],{"class":220},[105,119560,119561,119563,119565,119567,119569],{"class":107,"line":1212},[105,119562,24561],{"class":1954},[105,119564,117302],{"class":220},[105,119566,23827],{"class":220},[105,119568,119529],{"class":220},[105,119570,119532],{"class":220},[59,119572,119573,119576],{"start":1171},[62,119574,119575],{},"Reboot System",[62,119577,119578],{},"启动Fcitx5",[14,119580,119581],{},[20,119582],{"alt":22,"src":119583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[59,119585,119586],{"start":1192},[62,119587,119588],{},"修改一些设置",[14,119590,119591],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119593,119594],{},[20,119595],{"alt":22,"src":119596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119598,119599],{},"添加快捷键以便于更好切换中英文",[14,119601,119602],{},[20,119603],{"alt":22,"src":119604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[59,119606,119607],{"start":1206},[62,119608,119609],{},"重启",[96,119611,119613],{"className":118508,"code":119612,"language":118510,"meta":22,"style":22},"sudo shutdown -r now\n",[102,119614,119615],{"__ignoreMap":22},[105,119616,119617,119619,119622,119625],{"class":107,"line":108},[105,119618,24561],{"class":1954},[105,119620,119621],{"class":220}," shutdown",[105,119623,119624],{"class":164}," -r",[105,119626,119627],{"class":220}," now\n",[59,119629,119630],{"start":1212},[62,119631,119632],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119634,119635],{},[354,119636,119637],{"href":119637,"rel":119638},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23858],[59,119640,119641],{"start":1303},[62,119642,119643],{},"再重启",[96,119645,119646],{"className":118508,"code":119612,"language":118510,"meta":22,"style":22},[102,119647,119648],{"__ignoreMap":22},[105,119649,119650,119652,119654,119656],{"class":107,"line":108},[105,119651,24561],{"class":1954},[105,119653,119621],{"class":220},[105,119655,119624],{"class":164},[105,119657,119627],{"class":220},[47,119659,119661],{"id":119660},"_34-pip3源替换","3.4 pip3源替换",[14,119663,119664],{},"非Debian系发行版需要做。",[14,119666,119667],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119669,119670],{},"使用dnf的系统也可能不用做。",[96,119672,119674],{"className":117281,"code":119673,"language":117283,"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",[102,119675,119676,119681,119688,119693,119698],{"__ignoreMap":22},[105,119677,119678],{"class":107,"line":108},[105,119679,119680],{"class":174},"# 检查是否已安装 pip\n",[105,119682,119683,119686],{"class":107,"line":28},[105,119684,119685],{"class":1954},"pip3",[105,119687,26278],{"class":164},[105,119689,119690],{"class":107,"line":1171},[105,119691,119692],{"class":174},"# 如果未安装，先安装 pip3（见下方）\n",[105,119694,119695],{"class":107,"line":1186},[105,119696,119697],{"class":174},"# 配置 pip 使用清华源\n",[105,119699,119700,119702,119705,119708,119711],{"class":107,"line":1192},[105,119701,119685],{"class":1954},[105,119703,119704],{"class":220}," config",[105,119706,119707],{"class":220}," set",[105,119709,119710],{"class":220}," global.index-url",[105,119712,119713],{"class":220}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119715,119716],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119718,119719],{},[20,119720],{"alt":22,"src":119721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[96,119723,119725],{"className":117281,"code":119724,"language":117283,"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",[102,119726,119727,119732,119740,119751,119755,119760,119779,119783,119788,119800,119804,119809],{"__ignoreMap":22},[105,119728,119729],{"class":107,"line":108},[105,119730,119731],{"class":174},"#安装pip3\n",[105,119733,119734,119736,119738],{"class":107,"line":28},[105,119735,24561],{"class":1954},[105,119737,117302],{"class":220},[105,119739,26227],{"class":220},[105,119741,119742,119744,119746,119748],{"class":107,"line":1171},[105,119743,24561],{"class":1954},[105,119745,26061],{"class":220},[105,119747,23827],{"class":220},[105,119749,119750],{"class":220}," python3-pip\n",[105,119752,119753],{"class":107,"line":1186},[105,119754,2391],{"emptyLinePlaceholder":32},[105,119756,119757],{"class":107,"line":1192},[105,119758,119759],{"class":174},"#更新pip3\n",[105,119761,119762,119764,119766,119768,119770,119772,119775,119777],{"class":107,"line":1206},[105,119763,100864],{"class":1954},[105,119765,100867],{"class":164},[105,119767,100890],{"class":220},[105,119769,23827],{"class":220},[105,119771,26415],{"class":164},[105,119773,119774],{"class":220}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[105,119776,100895],{"class":164},[105,119778,100898],{"class":220},[105,119780,119781],{"class":107,"line":1212},[105,119782,2391],{"emptyLinePlaceholder":32},[105,119784,119785],{"class":107,"line":1303},[105,119786,119787],{"class":174},"#设置pip源为清华源\n",[105,119789,119790,119792,119794,119796,119798],{"class":107,"line":1309},[105,119791,119685],{"class":1954},[105,119793,119704],{"class":220},[105,119795,119707],{"class":220},[105,119797,119710],{"class":220},[105,119799,119713],{"class":220},[105,119801,119802],{"class":107,"line":1321},[105,119803,2391],{"emptyLinePlaceholder":32},[105,119805,119806],{"class":107,"line":1603},[105,119807,119808],{"class":174},"#测试\n",[105,119810,119811,119813,119815,119817,119819,119821],{"class":107,"line":1608},[105,119812,100864],{"class":1954},[105,119814,100867],{"class":164},[105,119816,100890],{"class":220},[105,119818,23827],{"class":220},[105,119820,100895],{"class":164},[105,119822,100898],{"class":220},[14,119824,119825],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119827,119828],{},[20,119829],{"alt":22,"src":119830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[47,119832,119834],{"id":119833},"_35-显卡驱动安装","3.5 显卡驱动安装",[76,119836,119838],{"id":119837},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[96,119840,119842],{"className":118508,"code":119841,"language":118510,"meta":22,"style":22},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[102,119843,119844,119849,119864,119869],{"__ignoreMap":22},[105,119845,119846],{"class":107,"line":108},[105,119847,119848],{"class":174},"# 如果是使用apt安装的驱动\n",[105,119850,119851,119853,119855,119857,119859,119862],{"class":107,"line":28},[105,119852,24561],{"class":1954},[105,119854,26061],{"class":220},[105,119856,26064],{"class":220},[105,119858,119143],{"class":164},[105,119860,119861],{"class":220}," nvidia",[105,119863,119233],{"class":164},[105,119865,119866],{"class":107,"line":1171},[105,119867,119868],{"class":174},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[105,119870,119871,119873],{"class":107,"line":1186},[105,119872,24561],{"class":1954},[105,119874,119875],{"class":220}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[76,119877,119879],{"id":119878},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21990,119881,119883],{"id":119882},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22902,119885,119887],{"id":119886},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[96,119889,119891],{"className":118508,"code":119890,"language":118510,"meta":22,"style":22},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[102,119892,119893,119898,119909,119914,119924,119929],{"__ignoreMap":22},[105,119894,119895],{"class":107,"line":108},[105,119896,119897],{"class":174},"# 安装英伟达驱动\n",[105,119899,119900,119902,119904,119906],{"class":107,"line":28},[105,119901,24561],{"class":1954},[105,119903,117302],{"class":220},[105,119905,23827],{"class":220},[105,119907,119908],{"class":220}," nvidia-driver-版本号\n",[105,119910,119911],{"class":107,"line":1171},[105,119912,119913],{"class":174},"# 重启 \n",[105,119915,119916,119918,119920,119922],{"class":107,"line":1186},[105,119917,24561],{"class":1954},[105,119919,119621],{"class":220},[105,119921,119624],{"class":164},[105,119923,119627],{"class":220},[105,119925,119926],{"class":107,"line":1192},[105,119927,119928],{"class":174},"# 检查驱动是否安装成功\n",[105,119930,119931],{"class":107,"line":1206},[105,119932,119933],{"class":1954},"nvidia-smi\n",[22902,119935,119937],{"id":119936},"_35212-debian","3.5.2.1.2 Debian",[96,119939,119941],{"className":118508,"code":119940,"language":118510,"meta":22,"style":22},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[102,119942,119943,119947,119961,119965,119975,119979],{"__ignoreMap":22},[105,119944,119945],{"class":107,"line":108},[105,119946,119897],{"class":174},[105,119948,119949,119951,119953,119955,119958],{"class":107,"line":28},[105,119950,24561],{"class":1954},[105,119952,117302],{"class":220},[105,119954,23827],{"class":220},[105,119956,119957],{"class":220}," nvidia-driver",[105,119959,119960],{"class":220}," nvidia-settings\n",[105,119962,119963],{"class":107,"line":1171},[105,119964,119913],{"class":174},[105,119966,119967,119969,119971,119973],{"class":107,"line":1186},[105,119968,24561],{"class":1954},[105,119970,119621],{"class":220},[105,119972,119624],{"class":164},[105,119974,119627],{"class":220},[105,119976,119977],{"class":107,"line":1192},[105,119978,119928],{"class":174},[105,119980,119981],{"class":107,"line":1206},[105,119982,119933],{"class":1954},[21990,119984,119986],{"id":119985},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,119988,119989,119990,119993],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[265,119991,119992],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,119995,119996,119997],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23546,119998,119999],{},[265,120000,120001],{},"（也可以不禁用桌面环境，直接进行下一步。）",[96,120003,120005],{"className":118508,"code":120004,"language":118510,"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",[102,120006,120007,120012,120022,120027,120040,120045],{"__ignoreMap":22},[105,120008,120009],{"class":107,"line":108},[105,120010,120011],{"class":174},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[105,120013,120014,120016,120019],{"class":107,"line":28},[105,120015,24561],{"class":1954},[105,120017,120018],{"class":220}," telinit",[105,120020,120021],{"class":164}," 3\n",[105,120023,120024],{"class":107,"line":1171},[105,120025,120026],{"class":174},"# ubuntu 使用下方命令\n",[105,120028,120029,120031,120034,120037],{"class":107,"line":1186},[105,120030,24561],{"class":1954},[105,120032,120033],{"class":220}," service",[105,120035,120036],{"class":220}," lightdm",[105,120038,120039],{"class":220}," stop\n",[105,120041,120042],{"class":107,"line":1192},[105,120043,120044],{"class":174},"# Fedora 使用下方命令\n",[105,120046,120047,120049,120051,120054],{"class":107,"line":1206},[105,120048,24561],{"class":1954},[105,120050,26498],{"class":220},[105,120052,120053],{"class":220}," isolate",[105,120055,120056],{"class":220}," multi-user.target\n",[14,120058,120059],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[96,120061,120063],{"className":118508,"code":120062,"language":118510,"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",[102,120064,120065,120070,120081,120086,120093,120098,120110,120115,120122,120127],{"__ignoreMap":22},[105,120066,120067],{"class":107,"line":108},[105,120068,120069],{"class":174},"# 编译环境+准备工作\n",[105,120071,120072,120074,120076,120078],{"class":107,"line":28},[105,120073,24561],{"class":1954},[105,120075,117302],{"class":220},[105,120077,23827],{"class":220},[105,120079,120080],{"class":220}," build-essential\n",[105,120082,120083],{"class":107,"line":1171},[105,120084,120085],{"class":174},"# 进入到.run目录中\n",[105,120087,120088,120090],{"class":107,"line":1186},[105,120089,101261],{"class":164},[105,120091,120092],{"class":220}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[105,120094,120095],{"class":107,"line":1192},[105,120096,120097],{"class":174},"# 给驱动文件增加可执行权限：\n",[105,120099,120100,120102,120104,120107],{"class":107,"line":1206},[105,120101,24561],{"class":1954},[105,120103,24564],{"class":220},[105,120105,120106],{"class":220}," a+x",[105,120108,120109],{"class":220}," NVIDIA-Linux-x86_64-550.107.02.run\n",[105,120111,120112],{"class":107,"line":1212},[105,120113,120114],{"class":174},"# 然后执行安装：\n",[105,120116,120117,120119],{"class":107,"line":1303},[105,120118,24561],{"class":1954},[105,120120,120121],{"class":220}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[105,120123,120124],{"class":107,"line":1309},[105,120125,120126],{"class":174},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[105,120128,120129,120131,120134],{"class":107,"line":1321},[105,120130,24561],{"class":1954},[105,120132,120133],{"class":220}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[105,120135,120136],{"class":164},"  --no-opengl-files\n",[14,120138,120139],{},"安装完毕重启即可",[96,120141,120143],{"className":118508,"code":120142,"language":118510,"meta":22,"style":22},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[102,120144,120145,120149,120155,120159],{"__ignoreMap":22},[105,120146,120147],{"class":107,"line":108},[105,120148,119913],{"class":174},[105,120150,120151,120153],{"class":107,"line":28},[105,120152,24561],{"class":1954},[105,120154,26632],{"class":220},[105,120156,120157],{"class":107,"line":1171},[105,120158,119928],{"class":174},[105,120160,120161],{"class":107,"line":1186},[105,120162,119933],{"class":1954},[76,120164,120166],{"id":120165},"_353-安装cuda","3.5.3 安装CUDA",[14,120168,120169],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120171,120172],{},[20,120173],{"alt":22,"src":120174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[59,120176,120177],{},[62,120178,120179],{},"先查看显卡驱动所支持的最高CUDA版本",[96,120181,120182],{"className":118508,"code":119933,"language":118510,"meta":22,"style":22},[102,120183,120184],{"__ignoreMap":22},[105,120185,120186],{"class":107,"line":108},[105,120187,119933],{"class":1954},[14,120189,120190],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120192,120193],{},[20,120194],{"alt":22,"src":120195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[59,120197,120198],{"start":28},[62,120199,120200],{},"下载CUDA并安装CUDA",[14,120202,118287,120203],{},[354,120204,118290],{"href":118290,"rel":120205},[23858],[14,120207,120208],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120210,120211],{},[20,120212],{"alt":22,"src":120213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120215,120216,120217,120222],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[354,120218,120221],{"href":120219,"rel":120220},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23858],"Vinci机器人队单片机教程","）",[14,120224,120225],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120227,120228],{},[20,120229],{"alt":22,"src":120230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120232,120233],{},"将最下方框框里的命令敲入终端",[96,120235,120237],{"className":118508,"code":120236,"language":118510,"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",[102,120238,120239,120244,120253,120258,120265,120270,120278,120283,120294,120299],{"__ignoreMap":22},[105,120240,120241],{"class":107,"line":108},[105,120242,120243],{"class":174},"# 在当前文件夹下创建一个ttt的子文件夹\n",[105,120245,120246,120248,120250],{"class":107,"line":28},[105,120247,101251],{"class":1954},[105,120249,29201],{"class":164},[105,120251,120252],{"class":220}," .\u002Fttt\n",[105,120254,120255],{"class":107,"line":1171},[105,120256,120257],{"class":174},"# 进入ttt文件夹\n",[105,120259,120260,120262],{"class":107,"line":1186},[105,120261,101261],{"class":164},[105,120263,120264],{"class":220}," ttt\n",[105,120266,120267],{"class":107,"line":1192},[105,120268,120269],{"class":174},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[105,120271,120272,120275],{"class":107,"line":1206},[105,120273,120274],{"class":1954},"wget",[105,120276,120277],{"class":220}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[105,120279,120280],{"class":107,"line":1212},[105,120281,120282],{"class":174},"# 给予权限\n",[105,120284,120285,120287,120289,120291],{"class":107,"line":1303},[105,120286,24561],{"class":1954},[105,120288,24564],{"class":220},[105,120290,120106],{"class":220},[105,120292,120293],{"class":220}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[105,120295,120296],{"class":107,"line":1309},[105,120297,120298],{"class":174},"# 运行脚本\n",[105,120300,120301,120303],{"class":107,"line":1321},[105,120302,24561],{"class":1954},[105,120304,120293],{"class":220},[14,120306,120307],{},[20,120308],{"alt":22,"src":120309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120311,120312],{},"正在安装中：",[14,120314,120315],{},[20,120316],{"alt":22,"src":120317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120319,120320],{},"输入accept接受即可",[14,120322,120323],{},[20,120324],{"alt":22,"src":120325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120327,120328],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120330,120331],{},[20,120332],{"alt":22,"src":120333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120335,120336],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120338,120339],{},[20,120340],{"alt":22,"src":120341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[59,120343,120344],{"start":1171},[62,120345,120346],{},"配置环境",[14,120348,120349],{},"根据上方确认一下路径，比如我上面红色框起来的为",[96,120351,120353],{"className":118508,"code":120352,"language":118510,"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",[102,120354,120355,120371,120386],{"__ignoreMap":22},[105,120356,120357,120360,120363,120366,120369],{"class":107,"line":108},[105,120358,120359],{"class":1954},"Please",[105,120361,120362],{"class":220}," make",[105,120364,120365],{"class":220}," sure",[105,120367,120368],{"class":220}," that",[105,120370,2665],{"class":115},[105,120372,120373,120375,120378,120381,120384],{"class":107,"line":28},[105,120374,52256],{"class":1954},[105,120376,120377],{"class":220},"   PATH",[105,120379,120380],{"class":220}," includes",[105,120382,120383],{"class":220}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[105,120385,2665],{"class":115},[105,120387,120388,120390,120393,120395,120398,120401,120403,120406,120409,120412,120415,120417,120420,120422],{"class":107,"line":1171},[105,120389,52256],{"class":1954},[105,120391,120392],{"class":220},"   LD_LIBRARY_PATH",[105,120394,120380],{"class":220},[105,120396,120397],{"class":220}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[105,120399,120400],{"class":220}," or,",[105,120402,5201],{"class":220},[105,120404,120405],{"class":220}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[105,120407,120408],{"class":220}," to",[105,120410,120411],{"class":220}," \u002Fetc\u002Fld.so.conf",[105,120413,120414],{"class":220}," and",[105,120416,27215],{"class":220},[105,120418,120419],{"class":220}," ldconfig",[105,120421,64589],{"class":220},[105,120423,120424],{"class":220}," root\n",[14,120426,120427],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[96,120429,120431],{"className":118508,"code":120430,"language":118510,"meta":22,"style":22},"which nvcc\n",[102,120432,120433],{"__ignoreMap":22},[105,120434,120435,120438],{"class":107,"line":108},[105,120436,120437],{"class":164},"which",[105,120439,120440],{"class":220}," nvcc\n",[14,120442,120443],{},[20,120444],{"alt":22,"src":120445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120447,120448],{},"所以我进行以下操作：",[96,120450,120452],{"className":118508,"code":120451,"language":118510,"meta":22,"style":22},"sudo vim ~\u002F.bashrc\n",[102,120453,120454],{"__ignoreMap":22},[105,120455,120456,120458,120460],{"class":107,"line":108},[105,120457,24561],{"class":1954},[105,120459,118568],{"class":220},[105,120461,120462],{"class":220}," ~\u002F.bashrc\n",[14,120464,120465],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[96,120467,120469],{"className":118508,"code":120468,"language":118510,"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",[102,120470,120471,120483],{"__ignoreMap":22},[105,120472,120473,120475,120478,120480],{"class":107,"line":108},[105,120474,25027],{"class":111},[105,120476,120477],{"class":115}," PATH",[105,120479,161],{"class":111},[105,120481,120482],{"class":115},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[105,120484,120485,120487,120490,120492],{"class":107,"line":28},[105,120486,25027],{"class":111},[105,120488,120489],{"class":115}," LD_LIBRARY_PATH",[105,120491,161],{"class":111},[105,120493,120494],{"class":115},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120496,120497],{},[20,120498],{"alt":22,"src":120499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[96,120501,120503],{"className":118508,"code":120502,"language":118510,"meta":22,"style":22},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[102,120504,120505,120510,120516,120521],{"__ignoreMap":22},[105,120506,120507],{"class":107,"line":108},[105,120508,120509],{"class":174},"# 刷新当前终端的环境变量\n",[105,120511,120512,120514],{"class":107,"line":28},[105,120513,100878],{"class":164},[105,120515,120462],{"class":220},[105,120517,120518],{"class":107,"line":1171},[105,120519,120520],{"class":174},"# 验证CUDA是否安装成功\n",[105,120522,120523,120526],{"class":107,"line":1186},[105,120524,120525],{"class":1954},"nvcc",[105,120527,120528],{"class":164}," -V\n",[14,120530,120531],{},"出现下图这种则安装成功。",[14,120533,120534],{},[20,120535],{"alt":22,"src":120536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[76,120538,120540],{"id":120539},"_354-安装cudnn","3.5.4 安装cuDNN",[59,120542,120543],{},[62,120544,120545],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120547,120548,120549,120554],{},"前往 NVIDIA cuDNN 下载页面：",[354,120550,120553],{"href":120551,"rel":120552},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23858],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120556,120557],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120559,120560],{},[20,120561],{"alt":22,"src":120562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120564,120565],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120567,120568],{},[20,120569],{"alt":22,"src":120570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120572,120573],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120575,120576],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120578,120579],{},[265,120580,120581],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120583,120584],{},"下载好的：",[14,120586,120587],{},[20,120588],{"alt":22,"src":120589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[59,120591,120592],{"start":28},[62,120593,120594],{},"安装cuDNN",[14,120596,120597],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120599,120600],{},[20,120601],{"alt":22,"src":120602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120604,120605],{},"解压文件，并复制到对应位置完成安装",[96,120607,120609],{"className":118508,"code":120608,"language":118510,"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",[102,120610,120611,120616,120627,120632,120639,120644,120660,120674,120679,120690,120699,120703,120719],{"__ignoreMap":22},[105,120612,120613],{"class":107,"line":108},[105,120614,120615],{"class":174},"# 解压cuDNN文件\n",[105,120617,120618,120621,120624],{"class":107,"line":28},[105,120619,120620],{"class":1954},"tar",[105,120622,120623],{"class":164}," -xvf",[105,120625,120626],{"class":220}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[105,120628,120629],{"class":107,"line":1171},[105,120630,120631],{"class":174},"# cd进文件夹\n",[105,120633,120634,120636],{"class":107,"line":1186},[105,120635,101261],{"class":164},[105,120637,120638],{"class":220}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[105,120640,120641],{"class":107,"line":1192},[105,120642,120643],{"class":174},"# 复制cuDNN文件到CUDA目录\n",[105,120645,120646,120648,120650,120653,120655,120658],{"class":107,"line":1206},[105,120647,24561],{"class":1954},[105,120649,27846],{"class":220},[105,120651,120652],{"class":220}," include\u002Fcudnn",[105,120654,571],{"class":164},[105,120656,120657],{"class":220},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[105,120659,2665],{"class":115},[105,120661,120662,120664,120666,120669,120671],{"class":107,"line":1212},[105,120663,24561],{"class":1954},[105,120665,27846],{"class":220},[105,120667,120668],{"class":220}," lib\u002Flibcudnn",[105,120670,571],{"class":164},[105,120672,120673],{"class":220},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[105,120675,120676],{"class":107,"line":1303},[105,120677,120678],{"class":174},"# 对比一下有没有缺文件\n",[105,120680,120681,120683,120686,120688],{"class":107,"line":1309},[105,120682,26746],{"class":1954},[105,120684,120685],{"class":220}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[105,120687,571],{"class":164},[105,120689,2665],{"class":115},[105,120691,120692,120694,120697],{"class":107,"line":1321},[105,120693,26746],{"class":1954},[105,120695,120696],{"class":220}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[105,120698,119233],{"class":164},[105,120700,120701],{"class":107,"line":1603},[105,120702,120282],{"class":174},[105,120704,120705,120707,120709,120712,120714,120716],{"class":107,"line":1608},[105,120706,24561],{"class":1954},[105,120708,24564],{"class":220},[105,120710,120711],{"class":220}," a+r",[105,120713,120685],{"class":220},[105,120715,571],{"class":164},[105,120717,120718],{"class":115},"   \n",[105,120720,120721,120723,120725,120727,120729],{"class":107,"line":1614},[105,120722,24561],{"class":1954},[105,120724,24564],{"class":220},[105,120726,120711],{"class":220},[105,120728,120696],{"class":220},[105,120730,119233],{"class":164},[59,120732,120733],{"start":1171},[62,120734,120735],{},"检查是否安装成功",[96,120737,120739],{"className":118508,"code":120738,"language":118510,"meta":22,"style":22},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[102,120740,120741,120746],{"__ignoreMap":22},[105,120742,120743],{"class":107,"line":108},[105,120744,120745],{"class":174},"# 检查cuDNN版本命令\n",[105,120747,120748,120751,120754,120756,120758,120761,120764],{"class":107,"line":28},[105,120749,120750],{"class":1954},"cat",[105,120752,120753],{"class":220}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[105,120755,25094],{"class":111},[105,120757,30221],{"class":1954},[105,120759,120760],{"class":220}," CUDNN_MAJOR",[105,120762,120763],{"class":164}," -A",[105,120765,47708],{"class":164},[14,120767,120768],{},"出现下图这样的就是安装成功了",[14,120770,120771],{},[20,120772],{"alt":22,"src":120773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[59,120775,120776],{"start":1186},[62,120777,120778],{},"软链接(一般不需要)",[96,120780,120782],{"className":118508,"code":120781,"language":118510,"meta":22,"style":22},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[102,120783,120784,120789],{"__ignoreMap":22},[105,120785,120786],{"class":107,"line":108},[105,120787,120788],{"class":174},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[105,120790,120791,120793],{"class":107,"line":28},[105,120792,24561],{"class":1954},[105,120794,120795],{"class":220}," ldconfig\n",[14,120797,120798],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[96,120800,120805],{"className":120801,"code":120802,"language":120803,"meta":120804,"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",[102,120806,120807,120812,120817,120822,120827,120832,120837],{"__ignoreMap":22},[105,120808,120809],{"class":107,"line":108},[105,120810,120811],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[105,120813,120814],{"class":107,"line":28},[105,120815,120816],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[105,120818,120819],{"class":107,"line":1171},[105,120820,120821],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[105,120823,120824],{"class":107,"line":1186},[105,120825,120826],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[105,120828,120829],{"class":107,"line":1192},[105,120830,120831],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[105,120833,120834],{"class":107,"line":1206},[105,120835,120836],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[105,120838,120839],{"class":107,"line":1212},[105,120840,120841],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120843,120844],{},"运行下方的命令",[96,120846,120848],{"className":118508,"code":120847,"language":118510,"meta":22,"style":22},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[102,120849,120850,120855,120862,120867],{"__ignoreMap":22},[105,120851,120852],{"class":107,"line":108},[105,120853,120854],{"class":174},"# cd进入CUDA路径\n",[105,120856,120857,120859],{"class":107,"line":28},[105,120858,101261],{"class":164},[105,120860,120861],{"class":220}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[105,120863,120864],{"class":107,"line":1171},[105,120865,120866],{"class":174}," # 查看本路径下的需要软链接的文件名\n",[105,120868,120869],{"class":107,"line":1186},[105,120870,120871],{"class":1954}," ls\n",[14,120873,120874],{},[20,120875],{"alt":22,"src":120876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120878,120879,120880,18402,120883,18402,120886,120889],{},"如上图，我需要将",[102,120881,120882],{},"libcudnn_xxx_xxxxx.so.8.9.7",[102,120884,120885],{},"libcudnn_xxx_xxxxx.so.8",[102,120887,120888],{},"libcudnn_xxx_xxxxx.so","软链接",[96,120891,120893],{"className":118508,"code":120892,"language":118510,"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",[102,120894,120895,120900,120916,120930,120944,120958,120972,120986,121000,121005,121011,121016],{"__ignoreMap":22},[105,120896,120897],{"class":107,"line":108},[105,120898,120899],{"class":174},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[105,120901,120902,120904,120907,120910,120913],{"class":107,"line":28},[105,120903,24561],{"class":1954},[105,120905,120906],{"class":220}," ln",[105,120908,120909],{"class":164}," -sf",[105,120911,120912],{"class":220}," libcudnn_cnn_train.so.8.9.7",[105,120914,120915],{"class":220}," libcudnn_cnn_train.so.8\n",[105,120917,120918,120920,120922,120924,120927],{"class":107,"line":1171},[105,120919,24561],{"class":1954},[105,120921,120906],{"class":220},[105,120923,120909],{"class":164},[105,120925,120926],{"class":220}," libcudnn_adv_infer.so.8.9.7",[105,120928,120929],{"class":220}," libcudnn_adv_infer.so.8\n",[105,120931,120932,120934,120936,120938,120941],{"class":107,"line":1186},[105,120933,24561],{"class":1954},[105,120935,120906],{"class":220},[105,120937,120909],{"class":164},[105,120939,120940],{"class":220}," libcudnn_adv_train.so.8.9.7",[105,120942,120943],{"class":220}," libcudnn_adv_train.so.8\n",[105,120945,120946,120948,120950,120952,120955],{"class":107,"line":1192},[105,120947,24561],{"class":1954},[105,120949,120906],{"class":220},[105,120951,120909],{"class":164},[105,120953,120954],{"class":220}," libcudnn_cnn_infer.so.8.9.7",[105,120956,120957],{"class":220}," libcudnn_cnn_infer.so.8\n",[105,120959,120960,120962,120964,120966,120969],{"class":107,"line":1206},[105,120961,24561],{"class":1954},[105,120963,120906],{"class":220},[105,120965,120909],{"class":164},[105,120967,120968],{"class":220}," libcudnn.so.8.9.7",[105,120970,120971],{"class":220}," libcudnn.so.8\n",[105,120973,120974,120976,120978,120980,120983],{"class":107,"line":1212},[105,120975,24561],{"class":1954},[105,120977,120906],{"class":220},[105,120979,120909],{"class":164},[105,120981,120982],{"class":220}," libcudnn_ops_infer.so.8.9.7",[105,120984,120985],{"class":220}," libcudnn_ops_infer.so.8\n",[105,120987,120988,120990,120992,120994,120997],{"class":107,"line":1303},[105,120989,24561],{"class":1954},[105,120991,120906],{"class":220},[105,120993,120909],{"class":164},[105,120995,120996],{"class":220}," libcudnn_ops_train.so.8.9.7",[105,120998,120999],{"class":220}," libcudnn_ops_train.so.8\n",[105,121001,121002],{"class":107,"line":1309},[105,121003,121004],{"class":174},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[105,121006,121007,121009],{"class":107,"line":1321},[105,121008,24561],{"class":1954},[105,121010,120795],{"class":220},[105,121012,121013],{"class":107,"line":1603},[105,121014,121015],{"class":174},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[105,121017,121018,121020,121023,121026,121028,121031],{"class":107,"line":1608},[105,121019,26746],{"class":1954},[105,121021,121022],{"class":164}," -l",[105,121024,121025],{"class":220}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[105,121027,571],{"class":164},[105,121029,121030],{"class":220},".so",[105,121032,119233],{"class":164},[76,121034,121036],{"id":121035},"_355-常见问题","3.5.5 常见问题",[59,121038,121039],{},[62,121040,121041],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[96,121043,121045],{"className":118508,"code":121044,"language":118510,"meta":22,"style":22},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[102,121046,121047],{"__ignoreMap":22},[105,121048,121049,121051,121053],{"class":107,"line":108},[105,121050,24561],{"class":1954},[105,121052,118568],{"class":220},[105,121054,121055],{"class":220}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121057,121058],{},"blacklist-nouveau.conf文件内容如下：",[96,121060,121062],{"className":118508,"code":121061,"language":118510,"meta":22,"style":22},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[102,121063,121064,121072,121079,121091,121101],{"__ignoreMap":22},[105,121065,121066,121069],{"class":107,"line":108},[105,121067,121068],{"class":1954},"blacklist",[105,121070,121071],{"class":220}," nouveau\n",[105,121073,121074,121076],{"class":107,"line":28},[105,121075,121068],{"class":1954},[105,121077,121078],{"class":220}," lbm-nouveau\n",[105,121080,121081,121083,121086,121089],{"class":107,"line":1171},[105,121082,115915],{"class":1954},[105,121084,121085],{"class":220}," nouveau",[105,121087,121088],{"class":220}," modeset=",[105,121090,3076],{"class":164},[105,121092,121093,121096,121098],{"class":107,"line":1186},[105,121094,121095],{"class":164},"alias",[105,121097,121085],{"class":220},[105,121099,121100],{"class":220}," off\n",[105,121102,121103,121105,121108],{"class":107,"line":1192},[105,121104,121095],{"class":164},[105,121106,121107],{"class":220}," lbm-nouveau",[105,121109,121100],{"class":220},[14,121111,121112],{},"接着运行下方命令",[96,121114,121116],{"className":118508,"code":121115,"language":118510,"meta":22,"style":22},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[102,121117,121118,121128,121133],{"__ignoreMap":22},[105,121119,121120,121122,121125],{"class":107,"line":108},[105,121121,24561],{"class":1954},[105,121123,121124],{"class":220}," update-initramfs",[105,121126,121127],{"class":164}," -u\n",[105,121129,121130],{"class":107,"line":28},[105,121131,121132],{"class":1954},"或者\n",[105,121134,121135,121137,121140],{"class":107,"line":1171},[105,121136,24561],{"class":1954},[105,121138,121139],{"class":220}," dracut",[105,121141,121142],{"class":164}," --force\n",[14,121144,121145],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[96,121147,121149],{"className":118508,"code":121148,"language":118510,"meta":22,"style":22},"lsmod | grep nouveau\n",[102,121150,121151],{"__ignoreMap":22},[105,121152,121153,121156,121158,121160],{"class":107,"line":108},[105,121154,121155],{"class":1954},"lsmod",[105,121157,25094],{"class":111},[105,121159,30221],{"class":1954},[105,121161,121071],{"class":220},[59,121163,121164],{"start":28},[62,121165,121166],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[96,121168,121170],{"className":118508,"code":121169,"language":118510,"meta":22,"style":22},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[102,121171,121172],{"__ignoreMap":22},[105,121173,121174,121176,121178],{"class":107,"line":108},[105,121175,24561],{"class":1954},[105,121177,118568],{"class":220},[105,121179,121180],{"class":220}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121182,121183],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[96,121185,121187],{"className":118508,"code":121186,"language":118510,"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",[102,121188,121189,121197,121205,121213,121220,121228,121238,121246],{"__ignoreMap":22},[105,121190,121191,121194],{"class":107,"line":108},[105,121192,121193],{"class":1954},"Section",[105,121195,121196],{"class":220}," \"OutputClass\"\n",[105,121198,121199,121202],{"class":107,"line":28},[105,121200,121201],{"class":1954},"   Identifier",[105,121203,121204],{"class":220}," \"nvidia\"\n",[105,121206,121207,121210],{"class":107,"line":1171},[105,121208,121209],{"class":1954},"   MatchDriver",[105,121211,121212],{"class":220}," \"nvidia-drm\"\n",[105,121214,121215,121218],{"class":107,"line":1186},[105,121216,121217],{"class":1954},"   Driver",[105,121219,121204],{"class":220},[105,121221,121222,121225],{"class":107,"line":1192},[105,121223,121224],{"class":1954},"   Option",[105,121226,121227],{"class":220}," \"AllowEmptyInitialConfiguration\"\n",[105,121229,121230,121232,121235],{"class":107,"line":1206},[105,121231,121224],{"class":1954},[105,121233,121234],{"class":220}," \"PrimaryGPU\"",[105,121236,121237],{"class":220}," \"yes\"\n",[105,121239,121240,121243],{"class":107,"line":1212},[105,121241,121242],{"class":1954},"   ModulePath",[105,121244,121245],{"class":220}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[105,121247,121248],{"class":107,"line":1303},[105,121249,121250],{"class":1954},"EndSection\n",[59,121252,121253],{"start":1171},[62,121254,121255],{},"安装N卡驱动提示错误",[96,121257,121259],{"className":120801,"code":121258,"language":120803,"meta":120804,"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",[102,121260,121261],{"__ignoreMap":22},[105,121262,121263],{"class":107,"line":108},[105,121264,121258],{},[59,121266,121267],{},[62,121268,121269],{},"检查当前运行的内核版本：",[14,121271,121272],{},"运行以下命令以查看你当前正在使用的内核版本：",[96,121274,121276],{"className":117281,"code":121275,"language":117283,"meta":22,"style":22},"uname -r\n",[102,121277,121278],{"__ignoreMap":22},[105,121279,121280,121282],{"class":107,"line":108},[105,121281,70189],{"class":1954},[105,121283,121284],{"class":164}," -r\n",[59,121286,121287],{"start":28},[62,121288,121289],{},"安装内核开发文件：",[14,121291,121292,121293,121296],{},"确保你已经安装了与当前内核版本相匹配的 ",[102,121294,121295],{},"kernel-devel"," 包。运行以下命令来安装：",[96,121298,121300],{"className":117281,"code":121299,"language":117283,"meta":22,"style":22},"sudo dnf install kernel-devel-$(uname -r)\n",[102,121301,121302],{"__ignoreMap":22},[105,121303,121304,121306,121308,121310,121313,121315,121317,121319],{"class":107,"line":108},[105,121305,24561],{"class":1954},[105,121307,26300],{"class":220},[105,121309,23827],{"class":220},[105,121311,121312],{"class":220}," kernel-devel-",[105,121314,25084],{"class":115},[105,121316,70189],{"class":1954},[105,121318,119624],{"class":164},[105,121320,122],{"class":115},[14,121322,121323],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[59,121325,121326],{"start":1171},[62,121327,121328],{},"安装内核源代码（如果需要）：",[14,121330,121331],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[96,121333,121335],{"className":117281,"code":121334,"language":117283,"meta":22,"style":22},"sudo dnf install kernel-headers kernel-source\n",[102,121336,121337],{"__ignoreMap":22},[105,121338,121339,121341,121343,121345,121348],{"class":107,"line":108},[105,121340,24561],{"class":1954},[105,121342,26300],{"class":220},[105,121344,23827],{"class":220},[105,121346,121347],{"class":220}," kernel-headers",[105,121349,121350],{"class":220}," kernel-source\n",[59,121352,121353],{"start":1186},[62,121354,121355],{},"检查安装：",[14,121357,121358,121359,121362],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[102,121360,121361],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[96,121364,121366],{"className":117281,"code":121365,"language":117283,"meta":22,"style":22},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[102,121367,121368],{"__ignoreMap":22},[105,121369,121370,121372],{"class":107,"line":108},[105,121371,26746],{"class":1954},[105,121373,121374],{"class":220}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121376,121377,121378,121381],{},"如果仍然遇到问题，可以通过 ",[102,121379,121380],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5118,121383,121384],{},"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":28,"depth":28,"links":121386},[121387,121391,121401,121405,121406],{"id":118484,"depth":28,"text":118485,"children":121388},[121389,121390],{"id":118494,"depth":1171,"text":118495},{"id":118504,"depth":1171,"text":118505},{"id":118704,"depth":28,"text":118705,"children":121392},[121393,121394,121395,121396,121397,121398,121399,121400],{"id":118708,"depth":1171,"text":118709},{"id":118778,"depth":1171,"text":118779},{"id":118867,"depth":1171,"text":118868},{"id":119112,"depth":1171,"text":119113},{"id":119182,"depth":1171,"text":119183},{"id":119249,"depth":1171,"text":119250},{"id":119284,"depth":1171,"text":119285},{"id":119339,"depth":1171,"text":119340},{"id":119390,"depth":28,"text":119391,"children":121402},[121403,121404],{"id":119394,"depth":1171,"text":119395},{"id":119474,"depth":1171,"text":119475},{"id":119660,"depth":28,"text":119661},{"id":119833,"depth":28,"text":119834,"children":121407},[121408,121409,121410,121411,121412],{"id":119837,"depth":1171,"text":119838},{"id":119878,"depth":1171,"text":119879},{"id":120165,"depth":1171,"text":120166},{"id":120539,"depth":1171,"text":120540},{"id":121035,"depth":1171,"text":121036},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118476,"description":23369},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121419,"title":121420,"body":121421,"description":23369,"extension":30,"meta":121761,"navigation":32,"path":121762,"seo":121763,"stem":121764,"__hash__":121765},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121422,"toc":121759},[121423,121426,121431,121434,121680,121685,121688,121724,121727,121756],[10,121424,121420],{"id":121425},"_4-命令教程长期积累",[59,121427,121428],{},[62,121429,121430],{},"大多数命令",[14,121432,121433],{},"常用 Linux 命令速查：",[96,121435,121437],{"className":117281,"code":121436,"language":117283,"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",[102,121438,121439,121444,121451,121458,121466,121473,121480,121488,121496,121503,121510,121518,121522,121527,121534,121542,121549,121553,121558,121565,121573,121581,121589,121597,121601,121606,121614,121621,121628,121636,121644,121648,121653,121662,121671],{"__ignoreMap":22},[105,121440,121441],{"class":107,"line":108},[105,121442,121443],{"class":174},"# 文件与目录\n",[105,121445,121446,121448],{"class":107,"line":28},[105,121447,26746],{"class":1954},[105,121449,121450],{"class":174},"        # 列出目录内容\n",[105,121452,121453,121455],{"class":107,"line":1171},[105,121454,101261],{"class":164},[105,121456,121457],{"class":174},"        # 切换目录\n",[105,121459,121460,121463],{"class":107,"line":1186},[105,121461,121462],{"class":164},"pwd",[105,121464,121465],{"class":174},"       # 显示当前路径\n",[105,121467,121468,121470],{"class":107,"line":1192},[105,121469,101251],{"class":1954},[105,121471,121472],{"class":174},"     # 创建目录\n",[105,121474,121475,121477],{"class":107,"line":1206},[105,121476,25307],{"class":1954},[105,121478,121479],{"class":174},"        # 删除文件或目录\n",[105,121481,121482,121485],{"class":107,"line":1212},[105,121483,121484],{"class":1954},"cp",[105,121486,121487],{"class":174},"        # 复制文件或目录\n",[105,121489,121490,121493],{"class":107,"line":1303},[105,121491,121492],{"class":1954},"mv",[105,121494,121495],{"class":174},"        # 移动\u002F重命名文件或目录\n",[105,121497,121498,121500],{"class":107,"line":1309},[105,121499,101268],{"class":1954},[105,121501,121502],{"class":174},"     # 创建空文件\n",[105,121504,121505,121507],{"class":107,"line":1321},[105,121506,120750],{"class":1954},[105,121508,121509],{"class":174},"       # 查看文件内容\n",[105,121511,121512,121515],{"class":107,"line":1603},[105,121513,121514],{"class":1954},"head\u002Ftail",[105,121516,121517],{"class":174}," # 查看文件头部\u002F尾部\n",[105,121519,121520],{"class":107,"line":1608},[105,121521,2391],{"emptyLinePlaceholder":32},[105,121523,121524],{"class":107,"line":1614},[105,121525,121526],{"class":174},"# 权限管理\n",[105,121528,121529,121531],{"class":107,"line":1619},[105,121530,24596],{"class":1954},[105,121532,121533],{"class":174},"     # 修改文件权限\n",[105,121535,121536,121539],{"class":107,"line":1633},[105,121537,121538],{"class":1954},"chown",[105,121540,121541],{"class":174},"     # 修改文件所有者\n",[105,121543,121544,121546],{"class":107,"line":1638},[105,121545,24561],{"class":1954},[105,121547,121548],{"class":174},"      # 以管理员身份执行\n",[105,121550,121551],{"class":107,"line":1644},[105,121552,2391],{"emptyLinePlaceholder":32},[105,121554,121555],{"class":107,"line":1665},[105,121556,121557],{"class":174},"# 系统信息\n",[105,121559,121560,121562],{"class":107,"line":1670},[105,121561,70189],{"class":1954},[105,121563,121564],{"class":174},"     # 系统信息\n",[105,121566,121567,121570],{"class":107,"line":1684},[105,121568,121569],{"class":1954},"df",[105,121571,121572],{"class":174},"        # 磁盘使用情况\n",[105,121574,121575,121578],{"class":107,"line":1689},[105,121576,121577],{"class":1954},"free",[105,121579,121580],{"class":174},"      # 内存使用情况\n",[105,121582,121583,121586],{"class":107,"line":1718},[105,121584,121585],{"class":1954},"top\u002Fhtop",[105,121587,121588],{"class":174},"  # 进程监控\n",[105,121590,121591,121594],{"class":107,"line":1723},[105,121592,121593],{"class":1954},"ps",[105,121595,121596],{"class":174},"        # 查看进程\n",[105,121598,121599],{"class":107,"line":1740},[105,121600,2391],{"emptyLinePlaceholder":32},[105,121602,121603],{"class":107,"line":1745},[105,121604,121605],{"class":174},"# 网络\n",[105,121607,121608,121611],{"class":107,"line":1750},[105,121609,121610],{"class":1954},"ping",[105,121612,121613],{"class":174},"      # 测试网络连通性\n",[105,121615,121616,121618],{"class":107,"line":1755},[105,121617,26834],{"class":1954},[105,121619,121620],{"class":174},"      # 发送 HTTP 请求\n",[105,121622,121623,121625],{"class":107,"line":1769},[105,121624,120274],{"class":1954},[105,121626,121627],{"class":174},"      # 下载文件\n",[105,121629,121630,121633],{"class":107,"line":1774},[105,121631,121632],{"class":1954},"ssh",[105,121634,121635],{"class":174},"       # 远程登录\n",[105,121637,121638,121641],{"class":107,"line":2568},[105,121639,121640],{"class":1954},"scp",[105,121642,121643],{"class":174},"       # 远程文件传输\n",[105,121645,121646],{"class":107,"line":2582},[105,121647,2391],{"emptyLinePlaceholder":32},[105,121649,121650],{"class":107,"line":2590},[105,121651,121652],{"class":174},"# 包管理（Debian\u002FUbuntu）\n",[105,121654,121655,121657,121659],{"class":107,"line":2595},[105,121656,117353],{"class":1954},[105,121658,117332],{"class":220},[105,121660,121661],{"class":174},"   # 更新软件源\n",[105,121663,121664,121666,121668],{"class":107,"line":2601},[105,121665,117353],{"class":1954},[105,121667,23827],{"class":220},[105,121669,121670],{"class":174},"  # 安装软件包\n",[105,121672,121673,121675,121677],{"class":107,"line":2607},[105,121674,117353],{"class":1954},[105,121676,26064],{"class":220},[105,121678,121679],{"class":174},"   # 卸载软件包\n",[59,121681,121682],{"start":28},[62,121683,121684],{},"KDE Dolphin 以root打开",[14,121686,121687],{},"kde5",[96,121689,121691],{"className":117281,"code":121690,"language":117283,"meta":22,"style":22},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[102,121692,121693],{"__ignoreMap":22},[105,121694,121695,121698,121701,121704,121706,121708,121711,121714,121716,121719,121721],{"class":107,"line":108},[105,121696,121697],{"class":1954},"pkexec",[105,121699,121700],{"class":220}," env",[105,121702,121703],{"class":220}," DISPLAY=",[105,121705,28128],{"class":115},[105,121707,28186],{"class":220},[105,121709,121710],{"class":115},"$XAUTHORITY ",[105,121712,121713],{"class":220},"KDE_SESSION_VERSION=",[105,121715,435],{"class":164},[105,121717,121718],{"class":220}," KDE_FULL_SESSION=",[105,121720,1354],{"class":164},[105,121722,121723],{"class":220}," dolphin\n",[14,121725,121726],{},"kde6",[96,121728,121730],{"className":117281,"code":121729,"language":117283,"meta":22,"style":22},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[102,121731,121732],{"__ignoreMap":22},[105,121733,121734,121736,121738,121740,121742,121744,121746,121748,121750,121752,121754],{"class":107,"line":108},[105,121735,121697],{"class":1954},[105,121737,121700],{"class":220},[105,121739,121703],{"class":220},[105,121741,28128],{"class":115},[105,121743,28186],{"class":220},[105,121745,121710],{"class":115},[105,121747,121713],{"class":220},[105,121749,460],{"class":164},[105,121751,121718],{"class":220},[105,121753,1354],{"class":164},[105,121755,121723],{"class":220},[5118,121757,121758],{},"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":28,"depth":28,"links":121760},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121420,"description":23369},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121767,"title":121768,"body":121769,"description":23369,"extension":30,"meta":121783,"navigation":32,"path":121784,"seo":121785,"stem":121786,"__hash__":121787},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121770,"toc":121781},[121771,121774],[10,121772,121768],{"id":121773},"_5-各种环境配置",[14,121775,121776],{},[354,121777,121780],{"href":121778,"rel":121779},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23858],"电控组环境搭建大全",{"title":22,"searchDepth":28,"depth":28,"links":121782},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121768,"description":23369},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121789,"title":121790,"body":121791,"description":23369,"extension":30,"meta":122139,"navigation":32,"path":122140,"seo":122141,"stem":122142,"__hash__":122143},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121792,"toc":122131},[121793,121796,121800,121804,121808,121813,121820,121824,122117,122121,122128],[10,121794,121790],{"id":121795},"_6-拓展功能",[47,121797,121799],{"id":121798},"_61-wine","6.1 Wine",[47,121801,121803],{"id":121802},"_62-android","6.2 Android",[76,121805,121807],{"id":121806},"_621-i卡a卡","6.2.1 I卡、A卡",[59,121809,121810],{},[62,121811,121812],{},"Wayland-Waydroid(体验超级好)",[14,121814,121815,121816],{},"Waydroid 官网与安装指南：",[354,121817,121818],{"href":121818,"rel":121819},"https:\u002F\u002Fwaydro.id\u002F",[23858],[76,121821,121823],{"id":121822},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[59,121825,121826],{},[62,121827,121828,121829,121831,121832,121836,121838,121841,121846,122043],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53701,121830],{},"BlissOS 官网下载：",[354,121833,121834],{"href":121834,"rel":121835},"https:\u002F\u002Fblissos.org\u002F",[23858],[53701,121837],{},[20,121839],{"alt":22,"src":121840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[59,121842,121843],{"start":1171},[62,121844,121845],{},"比较推荐的配置",[96,121847,121849],{"className":117281,"code":121848,"language":117283,"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",[102,121850,121851,121858,121868,121878,121888,121900,121910,121917,121927,121936,121945,121955,121965,121974,121984,121994,122006,122016,122025,122035],{"__ignoreMap":22},[105,121852,121853,121856],{"class":107,"line":108},[105,121854,121855],{"class":1954},"qemu-system-x86_64",[105,121857,24663],{"class":164},[105,121859,121860,121863,121866],{"class":107,"line":28},[105,121861,121862],{"class":164},"        -M",[105,121864,121865],{"class":220}," q35,vmport=off",[105,121867,24663],{"class":164},[105,121869,121870,121873,121876],{"class":107,"line":1171},[105,121871,121872],{"class":164},"        -accel",[105,121874,121875],{"class":220}," kvm",[105,121877,24663],{"class":164},[105,121879,121880,121883,121886],{"class":107,"line":1186},[105,121881,121882],{"class":164},"        -cpu",[105,121884,121885],{"class":220}," qemu64,+sse3,+sse4.2",[105,121887,24663],{"class":164},[105,121889,121890,121893,121896,121898],{"class":107,"line":1192},[105,121891,121892],{"class":164},"        -smp",[105,121894,121895],{"class":220}," 8,cores=",[105,121897,409],{"class":164},[105,121899,24663],{"class":164},[105,121901,121902,121905,121908],{"class":107,"line":1206},[105,121903,121904],{"class":164},"        -m",[105,121906,121907],{"class":220}," 6G",[105,121909,24663],{"class":164},[105,121911,121912,121915],{"class":107,"line":1212},[105,121913,121914],{"class":164},"        -usb",[105,121916,24663],{"class":164},[105,121918,121919,121922,121925],{"class":107,"line":1303},[105,121920,121921],{"class":164},"        -device",[105,121923,121924],{"class":220}," virtio-tablet",[105,121926,24663],{"class":164},[105,121928,121929,121931,121934],{"class":107,"line":1309},[105,121930,121921],{"class":164},[105,121932,121933],{"class":220}," virtio-keyboard",[105,121935,24663],{"class":164},[105,121937,121938,121940,121943],{"class":107,"line":1321},[105,121939,121921],{"class":164},[105,121941,121942],{"class":220}," usb-tablet",[105,121944,24663],{"class":164},[105,121946,121947,121950,121953],{"class":107,"line":1603},[105,121948,121949],{"class":164},"        -bios",[105,121951,121952],{"class":220}," OVMF-pure-efi64.fd",[105,121954,24663],{"class":164},[105,121956,121957,121960,121963],{"class":107,"line":1608},[105,121958,121959],{"class":164},"        -net",[105,121961,121962],{"class":220}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[105,121964,24663],{"class":164},[105,121966,121967,121969,121972],{"class":107,"line":1614},[105,121968,121959],{"class":164},[105,121970,121971],{"class":220}," nic,model=virtio",[105,121973,24663],{"class":164},[105,121975,121976,121979,121982],{"class":107,"line":1619},[105,121977,121978],{"class":164},"        -audio",[105,121980,121981],{"class":220}," sdl,model=hda",[105,121983,24663],{"class":164},[105,121985,121986,121989,121992],{"class":107,"line":1633},[105,121987,121988],{"class":164},"        -display",[105,121990,121991],{"class":220}," sdl,gl=on,show-cursor=on",[105,121993,24663],{"class":164},[105,121995,121996,121998,122001,122004],{"class":107,"line":1638},[105,121997,121921],{"class":164},[105,121999,122000],{"class":220}," virtio-vga-gl,xres=1920,yres=",[105,122002,122003],{"class":164},"1080",[105,122005,24663],{"class":164},[105,122007,122008,122011,122014],{"class":107,"line":1644},[105,122009,122010],{"class":164},"        -drive",[105,122012,122013],{"class":220}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[105,122015,24663],{"class":164},[105,122017,122018,122020,122023],{"class":107,"line":1665},[105,122019,122010],{"class":164},[105,122021,122022],{"class":220}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[105,122024,24663],{"class":164},[105,122026,122027,122030,122033],{"class":107,"line":1670},[105,122028,122029],{"class":164},"        -monitor",[105,122031,122032],{"class":220}," stdio",[105,122034,24663],{"class":164},[105,122036,122037,122040],{"class":107,"line":1684},[105,122038,122039],{"class":164},"        -serial",[105,122041,122042],{"class":220}," none\n",[59,122044,122045],{"start":1192},[62,122046,122047,122048],{},"常用操作：",[59,122049,122050,122053,122109],{},[62,122051,122052],{},"全屏：Ctrl+Alt+F",[62,122054,122055,122056,122061],{},"adb调试",[59,122057,122058],{},[62,122059,122060],{},"使Linux与Android用ADB连接。",[96,122062,122064],{"className":117281,"code":122063,"language":117283,"meta":22,"style":22},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[102,122065,122066,122071,122082,122087,122099,122104],{"__ignoreMap":22},[105,122067,122068],{"class":107,"line":108},[105,122069,122070],{"class":174},"# 连接安卓\n",[105,122072,122073,122076,122079],{"class":107,"line":28},[105,122074,122075],{"class":1954},"adb",[105,122077,122078],{"class":220}," connect",[105,122080,122081],{"class":164}," 127.0.0.1\n",[105,122083,122084],{"class":107,"line":1171},[105,122085,122086],{"class":174},"# 打开shell\n",[105,122088,122089,122091,122093,122096],{"class":107,"line":1186},[105,122090,122075],{"class":1954},[105,122092,26868],{"class":164},[105,122094,122095],{"class":220}," 127.0.0.1:5555",[105,122097,122098],{"class":220}," shell\n",[105,122100,122101],{"class":107,"line":1192},[105,122102,122103],{"class":174},"# 使用root权限\n",[105,122105,122106],{"class":107,"line":1206},[105,122107,122108],{"class":1954},"su\n",[62,122110,122111,122112],{},"中文输入法",[59,122113,122114],{},[62,122115,122116],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[47,122118,122120],{"id":122119},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122122,122123,122124],{},"rEFInd 官网与文档：",[354,122125,122126],{"href":122126,"rel":122127},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23858],[5118,122129,122130],{},"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":28,"depth":28,"links":122132},[122133,122134,122138],{"id":121798,"depth":28,"text":121799},{"id":121802,"depth":28,"text":121803,"children":122135},[122136,122137],{"id":121806,"depth":1171,"text":121807},{"id":121822,"depth":1171,"text":121823},{"id":122119,"depth":28,"text":122120},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121790,"description":23369},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122145,"title":122146,"body":122147,"description":23369,"extension":30,"meta":125446,"navigation":32,"path":125447,"seo":125448,"stem":125449,"__hash__":125450},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122148,"toc":125420},[122149,122152,122156,122159,122166,122416,122419,122491,122494,122498,122502,122507,122510,122513,122516,122521,122524,122527,122530,122535,122538,122543,122546,122549,122554,122557,122562,122565,122569,122573,122576,122581,122584,122598,122601,122604,122613,122616,122625,122628,122631,122640,122643,122652,122655,122658,122667,122670,122673,122688,122691,122694,122703,122708,122711,122714,122723,122726,122735,122738,122747,122750,122759,122764,122767,122775,122780,122783,122792,122795,122803,122808,122811,122820,122823,122826,122830,122833,122838,122841,122846,122860,122865,122870,122881,122886,122892,122897,122912,122917,122920,122925,122930,122935,122943,122948,122955,122960,122971,122976,122979,122983,122986,122989,122994,122997,123016,123021,123024,123033,123038,123041,123063,123066,123096,123099,123104,123107,123121,123126,123145,123148,123151,123156,123168,123173,123178,123181,123186,123189,123204,123207,123212,123217,123221,123226,123266,123269,123273,123279,123285,123290,123293,123300,123305,123312,123315,123318,123325,123339,123342,123402,123405,123419,123431,123434,123437,123440,123504,123507,123510,123513,123533,123536,123541,123548,123552,123555,123559,123564,123569,123573,123576,123579,123621,123626,123629,123651,123666,123668,123673,123685,123745,123747,123749,123803,123805,123807,123813,123818,123821,123826,123830,123833,123895,123900,123903,123905,123909,123921,124003,124005,124007,124061,124067,124069,124073,124078,124080,124085,124089,124109,124144,124148,124151,124154,124157,124164,124167,124179,124182,124197,124200,124219,124267,124270,124287,124290,124304,124309,124312,124321,124336,124348,124386,124391,124400,124405,124410,124436,124445,124449,124453,124458,124461,124465,124469,124474,124477,124482,124485,124490,124493,124498,124501,124505,124510,124513,124518,124521,124525,124530,124533,124538,124541,124546,124549,124553,124558,124561,124566,124569,124574,124577,124581,124586,124589,124594,124597,124602,124605,124610,124613,124618,124621,124626,124629,124633,124638,124641,124646,124653,124657,124662,124665,124670,124673,124677,124682,124685,124688,124691,124694,124697,124701,124704,124714,124719,124724,124746,124751,124756,124763,124767,124772,124775,124778,124783,124786,124789,124792,124795,124798,124801,124804,124807,124810,124813,124816,124819,124824,124829,124834,124839,124844,124849,124854,124857,124861,124864,124868,124873,124878,124883,124888,124892,124898,124906,124911,124914,124919,124934,124937,124942,124976,124991,124994,125049,125075,125087,125090,125099,125102,125117,125122,125125,125131,125136,125139,125144,125147,125152,125157,125164,125167,125182,125185,125220,125225,125233,125271,125274,125277,125282,125285,125290,125301,125335,125340,125343,125352,125357,125363,125366,125371,125380,125385,125388,125391,125396,125404,125407,125412,125417],[10,122150,122146],{"id":122151},"_7-其他操作",[47,122153,122155],{"id":122154},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122157,122158],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122160,122161,122162,122165],{},"进入工控机的硬盘目录，进入",[102,122163,122164],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[96,122167,122171],{"className":122168,"code":122169,"language":122170,"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",[102,122172,122173,122181,122192,122199,122206,122218,122225,122237,122248,122259,122266,122273,122280,122292,122304,122311,122323,122335,122342,122354,122366,122378,122389,122396,122407],{"__ignoreMap":22},[105,122174,122175,122178],{"class":107,"line":108},[105,122176,122177],{"class":51285},"network",[105,122179,122180],{"class":115},": \n",[105,122182,122183,122186,122188,122190],{"class":107,"line":28},[105,122184,122185],{"class":51285},"  version",[105,122187,51422],{"class":115},[105,122189,193],{"class":164},[105,122191,2665],{"class":115},[105,122193,122194,122197],{"class":107,"line":1171},[105,122195,122196],{"class":51285},"  wifis",[105,122198,122180],{"class":115},[105,122200,122201,122204],{"class":107,"line":1186},[105,122202,122203],{"class":51285},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[105,122205,122180],{"class":115},[105,122207,122208,122211,122213,122216],{"class":107,"line":1192},[105,122209,122210],{"class":51285},"      renderer",[105,122212,51422],{"class":115},[105,122214,122215],{"class":220},"NetworkManager",[105,122217,2665],{"class":115},[105,122219,122220,122223],{"class":107,"line":1206},[105,122221,122222],{"class":51285},"      match",[105,122224,122180],{"class":115},[105,122226,122227,122230,122232,122235],{"class":107,"line":1212},[105,122228,122229],{"class":51285},"        name",[105,122231,51422],{"class":115},[105,122233,122234],{"class":220},"\"wlan0\"",[105,122236,2665],{"class":115},[105,122238,122239,122242,122244,122246],{"class":107,"line":1303},[105,122240,122241],{"class":51285},"      dhcp4",[105,122243,51422],{"class":115},[105,122245,1354],{"class":164},[105,122247,2665],{"class":115},[105,122249,122250,122253,122255,122257],{"class":107,"line":1309},[105,122251,122252],{"class":51285},"      dhcp6",[105,122254,51422],{"class":115},[105,122256,1354],{"class":164},[105,122258,2665],{"class":115},[105,122260,122261,122264],{"class":107,"line":1321},[105,122262,122263],{"class":51285},"      access-points",[105,122265,122180],{"class":115},[105,122267,122268,122271],{"class":107,"line":1603},[105,122269,122270],{"class":220},"        \"EMIS_Vinci_Robocon_5G\"",[105,122272,122180],{"class":115},[105,122274,122275,122278],{"class":107,"line":1608},[105,122276,122277],{"class":51285},"          auth",[105,122279,122180],{"class":115},[105,122281,122282,122285,122287,122290],{"class":107,"line":1614},[105,122283,122284],{"class":51285},"            key-management",[105,122286,51422],{"class":115},[105,122288,122289],{"class":220},"\"psk\"",[105,122291,2665],{"class":115},[105,122293,122294,122297,122299,122302],{"class":107,"line":1619},[105,122295,122296],{"class":51285},"            password",[105,122298,51422],{"class":115},[105,122300,122301],{"class":220},"\"vinci666\"",[105,122303,2665],{"class":115},[105,122305,122306,122309],{"class":107,"line":1633},[105,122307,122308],{"class":51285},"          networkmanager",[105,122310,122180],{"class":115},[105,122312,122313,122316,122318,122321],{"class":107,"line":1638},[105,122314,122315],{"class":51285},"            uuid",[105,122317,51422],{"class":115},[105,122319,122320],{"class":220},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[105,122322,2665],{"class":115},[105,122324,122325,122328,122330,122333],{"class":107,"line":1644},[105,122326,122327],{"class":51285},"            name",[105,122329,51422],{"class":115},[105,122331,122332],{"class":220},"\"EMIS_Vinci_Robocon_5G\"",[105,122334,2665],{"class":115},[105,122336,122337,122340],{"class":107,"line":1665},[105,122338,122339],{"class":51285},"            passthrough",[105,122341,122180],{"class":115},[105,122343,122344,122347,122349,122352],{"class":107,"line":1670},[105,122345,122346],{"class":51285},"              wifi-security.auth-alg",[105,122348,51422],{"class":115},[105,122350,122351],{"class":220},"\"open\"",[105,122353,2665],{"class":115},[105,122355,122356,122359,122361,122364],{"class":107,"line":1684},[105,122357,122358],{"class":51285},"              ipv6.addr-gen-mode",[105,122360,51422],{"class":115},[105,122362,122363],{"class":220},"\"default\"",[105,122365,2665],{"class":115},[105,122367,122368,122371,122373,122376],{"class":107,"line":1689},[105,122369,122370],{"class":51285},"              ipv6.ip6-privacy",[105,122372,51422],{"class":115},[105,122374,122375],{"class":220},"\"-1\"",[105,122377,2665],{"class":115},[105,122379,122380,122383,122385,122387],{"class":107,"line":1718},[105,122381,122382],{"class":51285},"              proxy._",[105,122384,51422],{"class":115},[105,122386,7644],{"class":220},[105,122388,2665],{"class":115},[105,122390,122391,122394],{"class":107,"line":1723},[105,122392,122393],{"class":51285},"      networkmanager",[105,122395,122180],{"class":115},[105,122397,122398,122401,122403,122405],{"class":107,"line":1740},[105,122399,122400],{"class":51285},"        uuid",[105,122402,51422],{"class":115},[105,122404,122320],{"class":220},[105,122406,2665],{"class":115},[105,122408,122409,122411,122413],{"class":107,"line":1745},[105,122410,122229],{"class":51285},[105,122412,51422],{"class":115},[105,122414,122415],{"class":220},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122417,122418],{},"将其改为新wifi的名和密码：",[96,122420,122422],{"className":122168,"code":122421,"language":122170,"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",[102,122423,122424,122430,122439,122445,122452,122461,122469,122475,122481],{"__ignoreMap":22},[105,122425,122426,122428],{"class":107,"line":108},[105,122427,122177],{"class":51285},[105,122429,3730],{"class":115},[105,122431,122432,122434,122436],{"class":107,"line":28},[105,122433,122185],{"class":51285},[105,122435,51422],{"class":115},[105,122437,122438],{"class":164},"2\n",[105,122440,122441,122443],{"class":107,"line":1171},[105,122442,122196],{"class":51285},[105,122444,3730],{"class":115},[105,122446,122447,122450],{"class":107,"line":1186},[105,122448,122449],{"class":51285},"    wlan0",[105,122451,3730],{"class":115},[105,122453,122454,122456,122458],{"class":107,"line":1192},[105,122455,122241],{"class":51285},[105,122457,51422],{"class":115},[105,122459,122460],{"class":164},"true\n",[105,122462,122463,122465,122467],{"class":107,"line":1206},[105,122464,122252],{"class":51285},[105,122466,51422],{"class":115},[105,122468,122460],{"class":164},[105,122470,122471,122473],{"class":107,"line":1212},[105,122472,122263],{"class":51285},[105,122474,3730],{"class":115},[105,122476,122477,122479],{"class":107,"line":1303},[105,122478,122270],{"class":220},[105,122480,3730],{"class":115},[105,122482,122483,122486,122488],{"class":107,"line":1309},[105,122484,122485],{"class":51285},"          password",[105,122487,51422],{"class":115},[105,122489,122490],{"class":220},"\"vinci666\"\n",[14,122492,122493],{},"工控机开机即可连上网。",[47,122495,122497],{"id":122496},"_72-ssh远程开发","7.2 SSH远程开发",[76,122499,122501],{"id":122500},"_721-环境准备","7.2.1 环境准备",[14,122503,122504],{},[265,122505,122506],{},"1.硬件准备",[14,122508,122509],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122511,122512],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122514,122515],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122517,122518],{},[265,122519,122520],{},"2.设置固定IP",[14,122522,122523],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122525,122526],{},"1.进入设置界面",[14,122528,122529],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122531,122532],{},[20,122533],{"alt":22,"src":122534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122536,122537],{},"2.配置所连接的网络",[14,122539,122540],{},[20,122541],{"alt":22,"src":122542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122544,122545],{},"3.设置固定IP",[14,122547,122548],{},"查看当前IP地址。",[14,122550,122551],{},[20,122552],{"alt":22,"src":122553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122555,122556],{},"设置固定IP。",[14,122558,122559],{},[20,122560],{"alt":22,"src":122561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122563,122564],{},"至此，IP配置完毕。",[76,122566,122568],{"id":122567},"_722-环境搭建","7.2.2 环境搭建",[14,122570,122571],{},[265,122572,25738],{},[14,122574,122575],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122577,122578],{},[265,122579,122580],{},"实现",[14,122582,122583],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[59,122585,122586,122589,122592,122595],{},[62,122587,122588],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[62,122590,122591],{},"远程主机启动SSH服务；",[62,122593,122594],{},"本地主机登陆远程主机；",[62,122596,122597],{},"实现数据传输。",[14,122599,122600],{},"1.安装SSH客户端与服务端",[14,122602,122603],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[96,122605,122607],{"className":120801,"code":122606,"language":120803,"meta":120804,"style":22}," sudo apt install openssh-server\n",[102,122608,122609],{"__ignoreMap":22},[105,122610,122611],{"class":107,"line":108},[105,122612,122606],{},[14,122614,122615],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[96,122617,122619],{"className":120801,"code":122618,"language":120803,"meta":120804,"style":22},"sudo apt install openssh-client\n",[102,122620,122621],{"__ignoreMap":22},[105,122622,122623],{"class":107,"line":108},[105,122624,122618],{},[14,122626,122627],{},"2.远程主机启动SSH服务",[14,122629,122630],{},"远程主机启动 ssh 服务命令如下：",[96,122632,122634],{"className":120801,"code":122633,"language":120803,"meta":120804,"style":22},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[102,122635,122636],{"__ignoreMap":22},[105,122637,122638],{"class":107,"line":108},[105,122639,122633],{},[14,122641,122642],{},"启动后可使用如下命令查看服务是否正常运行：",[96,122644,122646],{"className":120801,"code":122645,"language":120803,"meta":120804,"style":22},"ps -e | grep ssh\n",[102,122647,122648],{"__ignoreMap":22},[105,122649,122650],{"class":107,"line":108},[105,122651,122645],{},[14,122653,122654],{},"如果启动成功，会包含 sshd 程序。",[14,122656,122657],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[96,122659,122661],{"className":120801,"code":122660,"language":120803,"meta":120804,"style":22},"sudo systemctl enable ssh\n",[102,122662,122663],{"__ignoreMap":22},[105,122664,122665],{"class":107,"line":108},[105,122666,122660],{},[14,122668,122669],{},"3.本地远程登录",[14,122671,122672],{},"登录远程主机可以调用如下命令:",[96,122674,122676],{"className":117281,"code":122675,"language":117283,"meta":22,"style":22},"ssh -X 用户名@ip地址\n",[102,122677,122678],{"__ignoreMap":22},[105,122679,122680,122682,122685],{"class":107,"line":108},[105,122681,121632],{"class":1954},[105,122683,122684],{"class":164}," -X",[105,122686,122687],{"class":220}," 用户名@ip地址\n",[14,122689,122690],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122692,122693],{},"如果退出，可以调用exit命令：",[96,122695,122697],{"className":120801,"code":122696,"language":120803,"meta":120804,"style":22},"exit\n",[102,122698,122699],{"__ignoreMap":22},[105,122700,122701],{"class":107,"line":108},[105,122702,122696],{},[14,122704,122705],{},[265,122706,122707],{},"4.实现数据传输",[14,122709,122710],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122712,122713],{},"上传文件指令格式如下：",[96,122715,122717],{"className":120801,"code":122716,"language":120803,"meta":120804,"style":22},"scp 本地文件路径 账号@ip:路径\n",[102,122718,122719],{"__ignoreMap":22},[105,122720,122721],{"class":107,"line":108},[105,122722,122716],{},[14,122724,122725],{},"上传文件夹指令格式如下：",[96,122727,122729],{"className":120801,"code":122728,"language":120803,"meta":120804,"style":22},"scp -r 本地文件夹路径 账号@ip:路径\n",[102,122730,122731],{"__ignoreMap":22},[105,122732,122733],{"class":107,"line":108},[105,122734,122728],{},[14,122736,122737],{},"下载文件指令格式如下：",[96,122739,122741],{"className":120801,"code":122740,"language":120803,"meta":120804,"style":22},"scp 账号@ip:路径 本地文件夹路径\n",[102,122742,122743],{"__ignoreMap":22},[105,122744,122745],{"class":107,"line":108},[105,122746,122740],{},[14,122748,122749],{},"下载文件夹指令格式如下：",[96,122751,122753],{"className":120801,"code":122752,"language":120803,"meta":120804,"style":22},"scp -r 账号@ip:路径 本地文件夹路径\n",[102,122754,122755],{"__ignoreMap":22},[105,122756,122757],{"class":107,"line":108},[105,122758,122752],{},[14,122760,122761],{},[265,122762,122763],{},"优化",[14,122765,122766],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[59,122768,122769,122772],{},[62,122770,122771],{},"本地生成密钥对；",[62,122773,122774],{},"将公钥上传至远程主机。",[14,122776,122777],{},[265,122778,122779],{},"1.生成密钥对",[14,122781,122782],{},"本地客户端生成公私钥：（一路回车默认即可）",[96,122784,122786],{"className":120801,"code":122785,"language":120803,"meta":120804,"style":22},"ssh-keygen\n",[102,122787,122788],{"__ignoreMap":22},[105,122789,122790],{"class":107,"line":108},[105,122791,122785],{},[14,122793,122794],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[59,122796,122797,122800],{},[62,122798,122799],{},"id_rsa （私钥）；",[62,122801,122802],{},"id_rsa.pub (公钥)。",[14,122804,122805],{},[265,122806,122807],{},"2.公钥上传",[14,122809,122810],{},"上传指令如下：",[96,122812,122814],{"className":120801,"code":122813,"language":120803,"meta":120804,"style":22},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[102,122815,122816],{"__ignoreMap":22},[105,122817,122818],{"class":107,"line":108},[105,122819,122813],{},[14,122821,122822],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122824,122825],{},"以后再远程登录就无需录入密码了。",[76,122827,122829],{"id":122828},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122831,122832],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122834,122835],{},[265,122836,122837],{},"1.准备工作",[14,122839,122840],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122842,122843],{},[265,122844,122845],{},"2.为VScode安装远程开发插件",[14,122847,122848,122849,122852,122853,122856,122857,28370],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[102,122850,122851],{},"扩展：商店","的搜索栏输入",[102,122854,122855],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[102,122858,122859],{},"安装",[14,122861,122862],{},[20,122863],{"alt":22,"src":122864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122866,122867],{},[265,122868,122869],{},"3.配置远程连接",[14,122871,122872,122873,122876,122877,122880],{},"步骤1：使用快捷键",[102,122874,122875],{},"ctrl + shift + p","打开命令输入窗口，并输入",[102,122878,122879],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122882,122883],{},[20,122884],{"alt":22,"src":122885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122887,122888,122889,28370],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[102,122890,122891],{},"Add New SSH Host",[14,122893,122894],{},[20,122895],{"alt":22,"src":122896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122898,122899,122900,122903,122904,122907,122908,122911],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[102,122901,122902],{},"ssh +X ubuntu@192.168.43.164","，其中，",[102,122905,122906],{},"ubuntu","需要替换为你的登录用户名，",[102,122909,122910],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122913,122914],{},[20,122915],{"alt":22,"src":122916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122918,122919],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122921,122922],{},[20,122923],{"alt":22,"src":122924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[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-098.png",[14,122931,122932],{},[265,122933,122934],{},"4.使用",[14,122936,122937,122938,122876,122940,122942],{},"步骤1：继续使用快捷键",[102,122939,122875],{},[102,122941,122879],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,122944,122945],{},[20,122946],{"alt":22,"src":122947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,122949,122950,122951,122954],{},"或者，也可以点击侧边栏的",[102,122952,122953],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,122956,122957],{},[20,122958],{"alt":22,"src":122959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,122961,122962,122963,122966,122967,122970],{},"步骤2：选择菜单栏的",[102,122964,122965],{},"文件","下的",[102,122968,122969],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,122972,122973],{},[20,122974],{"alt":22,"src":122975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,122977,122978],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[47,122980,122982],{"id":122981},"_73-远程桌面","7.3 远程桌面",[14,122984,122985],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,122987,122988],{},"我们选择使用VNC来看。",[59,122990,122991],{},[62,122992,122993],{},"安装VNC服务器：",[14,122995,122996],{},"这里以TigerVNC为例进行安装：",[96,122998,123000],{"className":117281,"code":122999,"language":117283,"meta":22,"style":22},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[102,123001,123002],{"__ignoreMap":22},[105,123003,123004,123006,123008,123010,123013],{"class":107,"line":108},[105,123005,24561],{"class":1954},[105,123007,117302],{"class":220},[105,123009,23827],{"class":220},[105,123011,123012],{"class":220}," tigervnc-standalone-server",[105,123014,123015],{"class":220}," tigervnc-common\n",[59,123017,123018],{"start":28},[62,123019,123020],{},"设置VNC密码：",[14,123022,123023],{},"为VNC用户设置密码，运行以下命令：",[96,123025,123027],{"className":117281,"code":123026,"language":117283,"meta":22,"style":22},"vncpasswd\n",[102,123028,123029],{"__ignoreMap":22},[105,123030,123031],{"class":107,"line":108},[105,123032,123026],{"class":1954},[59,123034,123035],{"start":1171},[62,123036,123037],{},"配置VNC启动脚本:",[14,123039,123040],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[96,123042,123044],{"className":117281,"code":123043,"language":117283,"meta":22,"style":22},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[102,123045,123046,123055],{"__ignoreMap":22},[105,123047,123048,123050,123052],{"class":107,"line":108},[105,123049,101251],{"class":1954},[105,123051,29201],{"class":164},[105,123053,123054],{"class":220}," ~\u002F.vnc\n",[105,123056,123057,123060],{"class":107,"line":28},[105,123058,123059],{"class":1954},"nano",[105,123061,123062],{"class":220}," ~\u002F.vnc\u002Fxstartup\n",[14,123064,123065],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[96,123067,123069],{"className":117281,"code":123068,"language":117283,"meta":22,"style":22},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[102,123070,123071,123076,123084,123091],{"__ignoreMap":22},[105,123072,123073],{"class":107,"line":108},[105,123074,123075],{"class":174},"#!\u002Fbin\u002Fsh\n",[105,123077,123078,123081],{"class":107,"line":28},[105,123079,123080],{"class":164},"unset",[105,123082,123083],{"class":220}," SESSION_MANAGER\n",[105,123085,123086,123088],{"class":107,"line":1171},[105,123087,123080],{"class":164},[105,123089,123090],{"class":220}," DBUS_SESSION_BUS_ADDRESS\n",[105,123092,123093],{"class":107,"line":1186},[105,123094,123095],{"class":1954},"gnome-session\n",[14,123097,123098],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[59,123100,123101],{"start":1186},[62,123102,123103],{},"给予执行权限：",[14,123105,123106],{},"为xstartup文件设置执行权限：",[96,123108,123110],{"className":117281,"code":123109,"language":117283,"meta":22,"style":22},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[102,123111,123112],{"__ignoreMap":22},[105,123113,123114,123116,123119],{"class":107,"line":108},[105,123115,24596],{"class":1954},[105,123117,123118],{"class":220}," +x",[105,123120,123062],{"class":220},[59,123122,123123],{"start":1192},[62,123124,123125],{},"启动VNC服务器：",[96,123127,123129],{"className":117281,"code":123128,"language":117283,"meta":22,"style":22},"vncserver -geometry 1920x1080 -localhost=0\n",[102,123130,123131],{"__ignoreMap":22},[105,123132,123133,123136,123139,123142],{"class":107,"line":108},[105,123134,123135],{"class":1954},"vncserver",[105,123137,123138],{"class":164}," -geometry",[105,123140,123141],{"class":220}," 1920x1080",[105,123143,123144],{"class":164}," -localhost=0\n",[14,123146,123147],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123149,123150],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[59,123152,123153],{"start":1206},[62,123154,123155],{},"查看已开启的VNC服务器：",[96,123157,123159],{"className":117281,"code":123158,"language":117283,"meta":22,"style":22},"vncserver -list\n",[102,123160,123161],{"__ignoreMap":22},[105,123162,123163,123165],{"class":107,"line":108},[105,123164,123135],{"class":1954},[105,123166,123167],{"class":164}," -list\n",[14,123169,123170],{},[20,123171],{"alt":22,"src":123172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[59,123174,123175],{"start":1212},[62,123176,123177],{},"连接到VNC服务器：",[14,123179,123180],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[59,123182,123183],{"start":1303},[62,123184,123185],{},"停止VNC服务器：",[14,123187,123188],{},"如果需要停止VNC服务器，可以使用以下命令：",[96,123190,123192],{"className":117281,"code":123191,"language":117283,"meta":22,"style":22},"vncserver -kill :1\n",[102,123193,123194],{"__ignoreMap":22},[105,123195,123196,123198,123201],{"class":107,"line":108},[105,123197,123135],{"class":1954},[105,123199,123200],{"class":164}," -kill",[105,123202,123203],{"class":220}," :1\n",[14,123205,123206],{},"将:1替换为你实际使用的显示编号。",[14,123208,123209],{},[20,123210],{"alt":22,"src":123211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[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-104.png",[47,123218,123220],{"id":123219},"_74-usb端口设置","7.4 USB端口设置",[14,123222,123223],{},[265,123224,123225],{},"首先先配置好权限",[96,123227,123229],{"className":117281,"code":123228,"language":117283,"meta":22,"style":22},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[102,123230,123231,123236,123249,123256,123261],{"__ignoreMap":22},[105,123232,123233],{"class":107,"line":108},[105,123234,123235],{"class":174},"# 将用户权限提高\n",[105,123237,123238,123240,123242,123244,123247],{"class":107,"line":28},[105,123239,24561],{"class":1954},[105,123241,26559],{"class":220},[105,123243,26562],{"class":164},[105,123245,123246],{"class":220}," dialout",[105,123248,26567],{"class":115},[105,123250,123251,123253],{"class":107,"line":1171},[105,123252,26586],{"class":1954},[105,123254,123255],{"class":220}," dialout\n",[105,123257,123258],{"class":107,"line":1186},[105,123259,123260],{"class":174},"# 查看下面命令是否输出dialout（若输出才正常）\n",[105,123262,123263],{"class":107,"line":1192},[105,123264,123265],{"class":1954},"groups\n",[14,123267,123268],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[76,123270,123272],{"id":123271},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123274,123275,123278],{},[265,123276,123277],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123280,123281,123284],{},[265,123282,123283],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123286,123287],{},[265,123288,123289],{},"流程如下：",[14,123291,123292],{},"（1）.查找设备idVendor和idProduct",[14,123294,123295,123296,123299],{},"接入两个USB设备，在终端调用指令",[102,123297,123298],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123301,123302],{},[20,123303],{"alt":22,"src":123304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123306,123307,123308,123311],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[102,123309,123310],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123313,123314],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123316,123317],{},"（2）.编写映射规则",[14,123319,123320,123321,123324],{},"在",[102,123322,123323],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[96,123326,123328],{"className":117281,"code":123327,"language":117283,"meta":22,"style":22},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[102,123329,123330],{"__ignoreMap":22},[105,123331,123332,123334,123336],{"class":107,"line":108},[105,123333,24561],{"class":1954},[105,123335,118568],{"class":220},[105,123337,123338],{"class":220}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123340,123341],{},"输入如下内容：",[96,123343,123345],{"className":117281,"code":123344,"language":117283,"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",[102,123346,123347,123377],{"__ignoreMap":22},[105,123348,123349,123352,123354,123357,123360,123363,123366,123368,123371,123374],{"class":107,"line":108},[105,123350,123351],{"class":115},"KERNEL",[105,123353,161],{"class":111},[105,123355,123356],{"class":220},"=\"ttyUSB*\",",[105,123358,123359],{"class":1954}," ATTRS",[105,123361,123362],{"class":220},"{idVendor}==",[105,123364,123365],{"class":1954},"\"10c4\"",[105,123367,494],{"class":1954},[105,123369,123370],{"class":220}," ATTRS{idProduct}==\"ea60\",",[105,123372,123373],{"class":220}," MODE:=\"0777\",",[105,123375,123376],{"class":220}," SYMLINK+=\"mylidar\"\n",[105,123378,123379,123381,123383,123385,123387,123389,123392,123394,123397,123399],{"class":107,"line":28},[105,123380,123351],{"class":115},[105,123382,161],{"class":111},[105,123384,123356],{"class":220},[105,123386,123359],{"class":1954},[105,123388,123362],{"class":220},[105,123390,123391],{"class":1954},"\"1a86\"",[105,123393,494],{"class":1954},[105,123395,123396],{"class":220}," ATTRS{idProduct}==\"7523\",",[105,123398,123373],{"class":220},[105,123400,123401],{"class":220}," SYMLINK+=\"mycar\"\n",[14,123403,123404],{},"代码解释：",[1123,123406,123407,123410,123413,123416],{},[62,123408,123409],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[62,123411,123412],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[62,123414,123415],{},"SYMLINK是符号连接，即绑定的别名；",[62,123417,123418],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123420,123421,123422,123425,123428],{},"***小提示：***",[23546,123423,123424],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[102,123426,123427],{},"\u002Fetc\u002Fudev\u002Frule.d",[23546,123429,123430],{},"目录即可。",[14,123432,123433],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123435,123436],{},"（3）.使规则生效",[14,123438,123439],{},"在终端下输入如下指令：",[96,123441,123443],{"className":117281,"code":123442,"language":117283,"meta":22,"style":22},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[102,123444,123445,123450,123462,123473,123477,123482,123495],{"__ignoreMap":22},[105,123446,123447],{"class":107,"line":108},[105,123448,123449],{"class":174},"# Ubuntu用下方命令\n",[105,123451,123452,123454,123456,123459],{"class":107,"line":28},[105,123453,24561],{"class":1954},[105,123455,120033],{"class":220},[105,123457,123458],{"class":220}," udev",[105,123460,123461],{"class":220}," reload\n",[105,123463,123464,123466,123468,123470],{"class":107,"line":1171},[105,123465,24561],{"class":1954},[105,123467,120033],{"class":220},[105,123469,123458],{"class":220},[105,123471,123472],{"class":220}," restart\n",[105,123474,123475],{"class":107,"line":1186},[105,123476,2391],{"emptyLinePlaceholder":32},[105,123478,123479],{"class":107,"line":1192},[105,123480,123481],{"class":174},"#Fedora用下方命令\n",[105,123483,123484,123486,123489,123492],{"class":107,"line":1206},[105,123485,24561],{"class":1954},[105,123487,123488],{"class":220}," udevadm",[105,123490,123491],{"class":220}," control",[105,123493,123494],{"class":164}," --reload\n",[105,123496,123497,123499,123501],{"class":107,"line":1212},[105,123498,24561],{"class":1954},[105,123500,123488],{"class":220},[105,123502,123503],{"class":220}," trigger\n",[14,123505,123506],{},"再重新插拔设备即可。",[14,123508,123509],{},"（4）.测试",[14,123511,123512],{},"终端下输入如下指令",[96,123514,123516],{"className":117281,"code":123515,"language":117283,"meta":22,"style":22},"ll \u002Fdev | grep ttyUSB\n",[102,123517,123518],{"__ignoreMap":22},[105,123519,123520,123523,123526,123528,123530],{"class":107,"line":108},[105,123521,123522],{"class":1954},"ll",[105,123524,123525],{"class":220}," \u002Fdev",[105,123527,25094],{"class":111},[105,123529,30221],{"class":1954},[105,123531,123532],{"class":220}," ttyUSB\n",[14,123534,123535],{},"运行结果如下：",[14,123537,123538],{},[20,123539],{"alt":22,"src":123540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123542,123543,123544,123547],{},"也可以多次插拔USB设备，会发现设备端口",[102,123545,123546],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123549,123550],{},[265,123551,117949],{},[14,123553,123554],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[76,123556,123558],{"id":123557},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123560,123561,123563],{},[265,123562,123277],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123565,123566,123568],{},[265,123567,123283],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123570,123571],{},[265,123572,123289],{},[14,123574,123575],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123577,123578],{},"调用如下指令查看第一台雷达的USB信息：",[96,123580,123582],{"className":117281,"code":123581,"language":117283,"meta":22,"style":22},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[102,123583,123584,123604],{"__ignoreMap":22},[105,123585,123586,123589,123591,123594,123597,123599,123601],{"class":107,"line":108},[105,123587,123588],{"class":1954},"udevadm",[105,123590,69806],{"class":220},[105,123592,123593],{"class":164}," --attribute-walk",[105,123595,123596],{"class":164}," --name=\u002Fdev\u002FttyUSB0",[105,123598,25094],{"class":111},[105,123600,30221],{"class":1954},[105,123602,123603],{"class":220}," KERNELS\n",[105,123605,123606,123608,123610,123612,123615,123617,123619],{"class":107,"line":28},[105,123607,123588],{"class":1954},[105,123609,69806],{"class":220},[105,123611,123593],{"class":164},[105,123613,123614],{"class":164}," --name=\u002Fdev\u002FttyACM0",[105,123616,25094],{"class":111},[105,123618,30221],{"class":1954},[105,123620,123603],{"class":220},[14,123622,123623],{},[20,123624],{"alt":22,"src":123625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123627,123628],{},"调用如下指令查看第二台雷达的USB信息：",[96,123630,123632],{"className":117281,"code":123631,"language":117283,"meta":22,"style":22},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[102,123633,123634],{"__ignoreMap":22},[105,123635,123636,123638,123640,123642,123645,123647,123649],{"class":107,"line":108},[105,123637,123588],{"class":1954},[105,123639,69806],{"class":220},[105,123641,123593],{"class":164},[105,123643,123644],{"class":164}," --name=\u002Fdev\u002FttyUSB1",[105,123646,25094],{"class":111},[105,123648,30221],{"class":1954},[105,123650,123603],{"class":220},[14,123652,123653,123654,123657,123658,123661,123662,123665],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[102,123655,123656],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[102,123659,123660],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[265,123663,123664],{},"唯一性标识","”。",[14,123667,123317],{},[14,123669,123320,123670,123672],{},[102,123671,123323],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[96,123674,123675],{"className":117281,"code":123327,"language":117283,"meta":22,"style":22},[102,123676,123677],{"__ignoreMap":22},[105,123678,123679,123681,123683],{"class":107,"line":108},[105,123680,24561],{"class":1954},[105,123682,118568],{"class":220},[105,123684,123338],{"class":220},[96,123686,123688],{"className":117281,"code":123687,"language":117283,"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",[102,123689,123690,123719],{"__ignoreMap":22},[105,123691,123692,123694,123696,123698,123701,123703,123706,123709,123711,123714,123716],{"class":107,"line":108},[105,123693,123351],{"class":115},[105,123695,161],{"class":111},[105,123697,123356],{"class":220},[105,123699,123700],{"class":115}," KERNELS",[105,123702,161],{"class":111},[105,123704,123705],{"class":220},"=\"1-1.3:1.0\",",[105,123707,123708],{"class":1954}," MODE:",[105,123710,161],{"class":220},[105,123712,123713],{"class":1954},"\"0777\"",[105,123715,494],{"class":1954},[105,123717,123718],{"class":220}," SYMLINK+=\"rplidar_front\"\n",[105,123720,123721,123723,123725,123727,123729,123731,123734,123736,123738,123740,123742],{"class":107,"line":28},[105,123722,123351],{"class":115},[105,123724,161],{"class":111},[105,123726,123356],{"class":220},[105,123728,123700],{"class":115},[105,123730,161],{"class":111},[105,123732,123733],{"class":220},"=\"1-1.4:1.0\",",[105,123735,123708],{"class":1954},[105,123737,161],{"class":220},[105,123739,123713],{"class":1954},[105,123741,494],{"class":1954},[105,123743,123744],{"class":220}," SYMLINK+=\"rplidar_back\"\n",[14,123746,123436],{},[14,123748,123439],{},[96,123750,123751],{"className":117281,"code":123442,"language":117283,"meta":22,"style":22},[102,123752,123753,123757,123767,123777,123781,123785,123795],{"__ignoreMap":22},[105,123754,123755],{"class":107,"line":108},[105,123756,123449],{"class":174},[105,123758,123759,123761,123763,123765],{"class":107,"line":28},[105,123760,24561],{"class":1954},[105,123762,120033],{"class":220},[105,123764,123458],{"class":220},[105,123766,123461],{"class":220},[105,123768,123769,123771,123773,123775],{"class":107,"line":1171},[105,123770,24561],{"class":1954},[105,123772,120033],{"class":220},[105,123774,123458],{"class":220},[105,123776,123472],{"class":220},[105,123778,123779],{"class":107,"line":1186},[105,123780,2391],{"emptyLinePlaceholder":32},[105,123782,123783],{"class":107,"line":1192},[105,123784,123481],{"class":174},[105,123786,123787,123789,123791,123793],{"class":107,"line":1206},[105,123788,24561],{"class":1954},[105,123790,123488],{"class":220},[105,123792,123491],{"class":220},[105,123794,123494],{"class":164},[105,123796,123797,123799,123801],{"class":107,"line":1212},[105,123798,24561],{"class":1954},[105,123800,123488],{"class":220},[105,123802,123503],{"class":220},[14,123804,123506],{},[14,123806,123509],{},[14,123808,123512,123809,123812],{},[102,123810,123811],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123814,123815],{},[20,123816],{"alt":22,"src":123817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123819,123820],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123822,123823,123825],{},[265,123824,117949],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[76,123827,123829],{"id":123828},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123831,123832],{},"（1）.查看所连接的主机USB接口的信息",[96,123834,123836],{"className":117281,"code":123835,"language":117283,"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",[102,123837,123838,123868],{"__ignoreMap":22},[105,123839,123840,123842,123844,123847,123849,123851,123853,123855,123858,123861,123863,123866],{"class":107,"line":108},[105,123841,123588],{"class":1954},[105,123843,69806],{"class":220},[105,123845,123846],{"class":164}," -a",[105,123848,29201],{"class":164},[105,123850,28407],{"class":115},[105,123852,123588],{"class":1954},[105,123854,69806],{"class":220},[105,123856,123857],{"class":164}," -q",[105,123859,123860],{"class":220}," path",[105,123862,25100],{"class":164},[105,123864,123865],{"class":220}," \u002Fdev\u002FttyACM0",[105,123867,122],{"class":115},[105,123869,123870,123872,123874,123876,123878,123880,123882,123884,123886,123888,123890,123893],{"class":107,"line":28},[105,123871,123588],{"class":1954},[105,123873,69806],{"class":220},[105,123875,123846],{"class":164},[105,123877,29201],{"class":164},[105,123879,28407],{"class":115},[105,123881,123588],{"class":1954},[105,123883,69806],{"class":220},[105,123885,123857],{"class":164},[105,123887,123860],{"class":220},[105,123889,25100],{"class":164},[105,123891,123892],{"class":220}," \u002Fdev\u002FttyUSB0",[105,123894,122],{"class":115},[14,123896,123897],{},[20,123898],{"alt":22,"src":123899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123901,123902],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123904,123317],{},[14,123906,123320,123907,123672],{},[102,123908,123323],{},[96,123910,123911],{"className":117281,"code":123327,"language":117283,"meta":22,"style":22},[102,123912,123913],{"__ignoreMap":22},[105,123914,123915,123917,123919],{"class":107,"line":108},[105,123916,24561],{"class":1954},[105,123918,118568],{"class":220},[105,123920,123338],{"class":220},[96,123922,123924],{"className":117281,"code":123923,"language":117283,"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",[102,123925,123926,123954,123980],{"__ignoreMap":22},[105,123927,123928,123930,123932,123935,123937,123939,123941,123943,123946,123949,123951],{"class":107,"line":108},[105,123929,123351],{"class":115},[105,123931,161],{"class":111},[105,123933,123934],{"class":220},"=\"ttyACM*\",",[105,123936,123359],{"class":1954},[105,123938,123362],{"class":220},[105,123940,123391],{"class":1954},[105,123942,494],{"class":1954},[105,123944,123945],{"class":220}," ATTRS{idProduct}==\"55d4\",",[105,123947,123948],{"class":220}," ATTRS{serial}==\"0001\",",[105,123950,123373],{"class":220},[105,123952,123953],{"class":220}," SYMLINK+=\"ttyACM_MCU\"\n",[105,123955,123956,123958,123960,123962,123964,123966,123968,123970,123972,123975,123977],{"class":107,"line":28},[105,123957,123351],{"class":115},[105,123959,161],{"class":111},[105,123961,123934],{"class":220},[105,123963,123359],{"class":1954},[105,123965,123362],{"class":220},[105,123967,123391],{"class":1954},[105,123969,494],{"class":1954},[105,123971,123945],{"class":220},[105,123973,123974],{"class":220}," ATTRS{serial}==\"0002\",",[105,123976,123373],{"class":220},[105,123978,123979],{"class":220}," SYMLINK+=\"ttyACM_Lidar\"\n",[105,123981,123982,123984,123986,123988,123990,123992,123994,123996,123998,124000],{"class":107,"line":1171},[105,123983,123351],{"class":115},[105,123985,161],{"class":111},[105,123987,123356],{"class":220},[105,123989,123359],{"class":1954},[105,123991,123362],{"class":220},[105,123993,123391],{"class":1954},[105,123995,494],{"class":1954},[105,123997,123396],{"class":220},[105,123999,123373],{"class":220},[105,124001,124002],{"class":220}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124004,123436],{},[14,124006,123439],{},[96,124008,124009],{"className":117281,"code":123442,"language":117283,"meta":22,"style":22},[102,124010,124011,124015,124025,124035,124039,124043,124053],{"__ignoreMap":22},[105,124012,124013],{"class":107,"line":108},[105,124014,123449],{"class":174},[105,124016,124017,124019,124021,124023],{"class":107,"line":28},[105,124018,24561],{"class":1954},[105,124020,120033],{"class":220},[105,124022,123458],{"class":220},[105,124024,123461],{"class":220},[105,124026,124027,124029,124031,124033],{"class":107,"line":1171},[105,124028,24561],{"class":1954},[105,124030,120033],{"class":220},[105,124032,123458],{"class":220},[105,124034,123472],{"class":220},[105,124036,124037],{"class":107,"line":1186},[105,124038,2391],{"emptyLinePlaceholder":32},[105,124040,124041],{"class":107,"line":1192},[105,124042,123481],{"class":174},[105,124044,124045,124047,124049,124051],{"class":107,"line":1206},[105,124046,24561],{"class":1954},[105,124048,123488],{"class":220},[105,124050,123491],{"class":220},[105,124052,123494],{"class":164},[105,124054,124055,124057,124059],{"class":107,"line":1212},[105,124056,24561],{"class":1954},[105,124058,123488],{"class":220},[105,124060,123503],{"class":220},[14,124062,124063,124064],{},"再重新插拔设备即可，或者 ",[265,124065,124066],{},"直接重启系统。",[14,124068,123509],{},[14,124070,123512,124071,123812],{},[102,124072,123811],{},[14,124074,124075],{},[20,124076],{"alt":22,"src":124077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124079,123820],{},[14,124081,124082,124084],{},[265,124083,117949],{}," 一些设备可能没有串口号等。",[76,124086,124088],{"id":124087},"_744-其他注意事项","7.4.4 其他注意事项",[14,124090,124091,124092,124094,124095,124098,124099,18402,124102,124105,124106,124108],{},"并非所有的USB设备端口号都是",[102,124093,123546],{},"的格式，比如Arduino的端口号可能是",[102,124096,124097],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[102,124100,124101],{},"videon",[102,124103,124104],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[102,124107,124101],{},"端口，绑定时需要关联的也是该接口。",[14,124110,124111,124112,124115,124116,124119,124120,124122,124123,124126,124127,124130,124131,124134,124135,124134,124138,124134,124141,28370],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[102,124113,124114],{},"KERNEL==\"ttyUSB*\"","修改为",[102,124117,124118],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[102,124121,124114],{},"修改为类似于",[102,124124,124125],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[102,124128,124129],{},"video[0,2,4,6]","表示可以绑定的端口为",[102,124132,124133],{},"video0","或",[102,124136,124137],{},"video2",[102,124139,124140],{},"video4",[102,124142,124143],{},"video6",[47,124145,124147],{"id":124146},"_75-挂载内网网页","7.5 挂载内网网页",[14,124149,124150],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124152,124153],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124155,124156],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124158,124159,124160],{},"Termux 下载地址（F-Droid）：",[354,124161,124162],{"href":124162,"rel":124163},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23858],[14,124165,124166],{},"首先打开app后，先更新软件缓存：",[96,124168,124170],{"className":117281,"code":124169,"language":117283,"meta":22,"style":22},"pkg update\n",[102,124171,124172],{"__ignoreMap":22},[105,124173,124174,124177],{"class":107,"line":108},[105,124175,124176],{"class":1954},"pkg",[105,124178,26227],{"class":220},[14,124180,124181],{},"然后换源",[96,124183,124185],{"className":117281,"code":124184,"language":117283,"meta":22,"style":22},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[102,124186,124187],{"__ignoreMap":22},[105,124188,124189,124191,124194],{"class":107,"line":108},[105,124190,123059],{"class":1954},[105,124192,124193],{"class":115}," $PREFIX",[105,124195,124196],{"class":220},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124198,124199],{},"将该文件内容替换为下面：",[96,124201,124203],{"className":117281,"code":124202,"language":117283,"meta":22,"style":22},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[102,124204,124205],{"__ignoreMap":22},[105,124206,124207,124210,124213,124216],{"class":107,"line":108},[105,124208,124209],{"class":1954},"deb",[105,124211,124212],{"class":220}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[105,124214,124215],{"class":220}," stable",[105,124217,124218],{"class":220}," main\n",[1123,124220,124221,124248],{},[62,124222,124223,124224,124226,124227],{},"如果你使用的是",[102,124225,123059],{},"编辑器：",[1123,124228,124229,124236,124242],{},[62,124230,124231,124232,124235],{},"按 ",[102,124233,124234],{},"Ctrl+O"," 保存文件。",[62,124237,124231,124238,124241],{},[102,124239,124240],{},"Enter"," 确认文件名。",[62,124243,124231,124244,124247],{},[102,124245,124246],{},"Ctrl+X"," 退出编辑器。",[62,124249,124223,124250,124226,124253],{},[102,124251,124252],{},"vim",[1123,124254,124255,124261],{},[62,124256,124231,124257,124260],{},[102,124258,124259],{},"Esc"," 退出编辑模式。",[62,124262,124263,124264,124266],{},"输入 ",[102,124265,119206],{}," 保存并退出。",[14,124268,124269],{},"接下来重新更新软件源：",[96,124271,124273],{"className":117281,"code":124272,"language":117283,"meta":22,"style":22},"pkg update && pkg upgrade\n",[102,124274,124275],{"__ignoreMap":22},[105,124276,124277,124279,124281,124283,124285],{"class":107,"line":108},[105,124278,124176],{"class":1954},[105,124280,117332],{"class":220},[105,124282,26175],{"class":115},[105,124284,124176],{"class":1954},[105,124286,117318],{"class":220},[14,124288,124289],{},"安装python：",[96,124291,124293],{"className":117281,"code":124292,"language":117283,"meta":22,"style":22},"pkg install python\n",[102,124294,124295],{"__ignoreMap":22},[105,124296,124297,124299,124301],{"class":107,"line":108},[105,124298,124176],{"class":1954},[105,124300,23827],{"class":220},[105,124302,124303],{"class":220}," python\n",[14,124305,124306,26458],{},[265,124307,124308],{},"通过Termux访问设备存储",[14,124310,124311],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[96,124313,124315],{"className":117281,"code":124314,"language":117283,"meta":22,"style":22},"termux-setup-storage\n",[102,124316,124317],{"__ignoreMap":22},[105,124318,124319],{"class":107,"line":108},[105,124320,124314],{"class":1954},[59,124322,124323],{},[62,124324,124325,26458,124328],{},[265,124326,124327],{},"进入HTML文件所在的目录",[59,124329,124330],{},[62,124331,124332,124333,124335],{},"使用",[102,124334,101261],{},"命令进入HTML文件所在的目录：",[96,124337,124339],{"className":117281,"code":124338,"language":117283,"meta":22,"style":22},"cd ~\u002Fyour_html_folder\n",[102,124340,124341],{"__ignoreMap":22},[105,124342,124343,124345],{"class":107,"line":108},[105,124344,101261],{"class":164},[105,124346,124347],{"class":220}," ~\u002Fyour_html_folder\n",[59,124349,124350],{"start":28},[62,124351,124352,26458,124355,124360,124377],{},[265,124353,124354],{},"启动Python HTTP服务器",[59,124356,124357],{},[62,124358,124359],{},"运行以下命令启动一个简单的HTTP服务器：",[96,124361,124363],{"className":117281,"code":124362,"language":117283,"meta":22,"style":22},"python -m http.server 8000\n",[102,124364,124365],{"__ignoreMap":22},[105,124366,124367,124369,124371,124374],{"class":107,"line":108},[105,124368,30365],{"class":1954},[105,124370,100867],{"class":164},[105,124372,124373],{"class":220}," http.server",[105,124375,124376],{"class":164}," 8000\n",[59,124378,124379],{"start":1171},[62,124380,124381,124382,124385],{},"这会在端口",[102,124383,124384],{},"8000","上启动一个Web服务器。",[1123,124387,124388],{},[62,124389,124390],{},"启动服务器后，Termux会显示日志信息，例如：",[96,124392,124394],{"className":120801,"code":124393,"language":120803,"meta":120804,"style":22},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[102,124395,124396],{"__ignoreMap":22},[105,124397,124398],{"class":107,"line":108},[105,124399,124393],{},[1123,124401,124402],{},[62,124403,124404],{},"这表示服务器已成功启动。",[14,124406,124407],{},[265,124408,124409],{},"在浏览器中访问HTML文件",[59,124411,124412],{},[62,124413,124414,26458,124417,124422],{},[265,124415,124416],{},"在同一设备上访问",[59,124418,124419],{},[62,124420,124421],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[96,124423,124426],{"className":124424,"code":124425,"language":71649,"meta":22,"style":22},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[102,124427,124428],{"__ignoreMap":22},[105,124429,124430,124433],{"class":107,"line":108},[105,124431,124432],{"class":115},"http:",[105,124434,124435],{"class":174},"\u002F\u002Flocalhost:8000\n",[1123,124437,124438],{},[62,124439,124440,124441,124444],{},"如果HTML文件中有",[102,124442,124443],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[47,124446,124448],{"id":124447},"_76-linux重点知识","7.6 Linux重点知识",[76,124450,124452],{"id":124451},"_761-关于点的说明","7.6.1 关于点的说明",[14,124454,124455],{},[20,124456],{"alt":22,"src":124457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124459,124460],{},"一点本目录，两点上目录",[76,124462,124464],{"id":124463},"_762-目录","7.6.2 目录",[21990,124466,124468],{"id":124467},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124470,124471],{},[265,124472,124473],{},"\u002Fboot:",[14,124475,124476],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124478,124479],{},[265,124480,124481],{},"\u002Fetc:",[14,124483,124484],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124486,124487],{},[265,124488,124489],{},"\u002Flib：",[14,124491,124492],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124494,124495],{},[265,124496,124497],{},"\u002Fsys:",[14,124499,124500],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21990,124502,124504],{"id":124503},"_7622-指令集合","7.6.2.2 指令集合",[14,124506,124507],{},[265,124508,124509],{},"\u002Fbin:",[14,124511,124512],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124514,124515],{},[265,124516,124517],{},"\u002Fsbin:",[14,124519,124520],{},"只有系统管理员才能使用的程序和指令",[21990,124522,124524],{"id":124523},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124526,124527],{},[265,124528,124529],{},"\u002Fdev:",[14,124531,124532],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124534,124535],{},[265,124536,124537],{},"\u002Fmedia:",[14,124539,124540],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124542,124543],{},[265,124544,124545],{},"\u002Fmnt:",[14,124547,124548],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21990,124550,124552],{"id":124551},"_7624-临时文件","7.6.2.4 临时文件",[14,124554,124555],{},[265,124556,124557],{},"\u002Frun:",[14,124559,124560],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124562,124563],{},[265,124564,124565],{},"\u002Flost+found:",[14,124567,124568],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124570,124571],{},[265,124572,124573],{},"\u002Ftmp:",[14,124575,124576],{},"这个目录是用来存放一些临时文件的",[21990,124578,124580],{"id":124579},"_7625-账户","7.6.2.5 账户",[14,124582,124583],{},[265,124584,124585],{},"\u002Froot：",[14,124587,124588],{},"系统管理员的用户主目录",[14,124590,124591,26458],{},[265,124592,124593],{},"\u002Fhome",[14,124595,124596],{},"用户的主目录，以用户的账号命名的",[14,124598,124599,26458],{},[265,124600,124601],{},"\u002Fusr",[14,124603,124604],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124606,124607],{},[265,124608,124609],{},"\u002Fusr\u002Fbin：",[14,124611,124612],{},"系统用户使用的应用程序与指令",[14,124614,124615],{},[265,124616,124617],{},"\u002Fusr\u002Fsbin：",[14,124619,124620],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124622,124623],{},[265,124624,124625],{},"\u002Fusr\u002Fsrc：",[14,124627,124628],{},"内核源代码默认的放置目录",[21990,124630,124632],{"id":124631},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124634,124635],{},[265,124636,124637],{},"\u002Fvar：",[14,124639,124640],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124642,124643],{},[265,124644,124645],{},"\u002Fproc:",[14,124647,124648,124649,124652],{},"管理 ",[265,124650,124651],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21990,124654,124656],{"id":124655},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124658,124659],{},[265,124660,124661],{},"\u002Fopt:",[14,124663,124664],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124666,124667],{},[265,124668,124669],{},"\u002Fsrv:",[14,124671,124672],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[76,124674,124676],{"id":124675},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124678,124679],{},[20,124680],{"alt":22,"src":124681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124683,124684],{},"windows-->linux:",[14,124686,124687],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124689,124690],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124692,124693],{},"linux传输文件到windows",[14,124695,124696],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[76,124698,124700],{"id":124699},"_764-易忘知识","7.6.4 易忘知识",[14,124702,124703],{},"操作系统内核查看",[96,124705,124706],{"className":117281,"code":121275,"language":117283,"meta":22,"style":22},[102,124707,124708],{"__ignoreMap":22},[105,124709,124710,124712],{"class":107,"line":108},[105,124711,70189],{"class":1954},[105,124713,121284],{"class":164},[14,124715,124716],{},[20,124717],{"alt":22,"src":124718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[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-114.png",[96,124725,124727],{"className":117281,"code":124726,"language":117283,"meta":22,"style":22},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[102,124728,124729,124741],{"__ignoreMap":22},[105,124730,124731,124733,124736,124739],{"class":107,"line":108},[105,124732,121492],{"class":1954},[105,124734,124735],{"class":220}," mvtest",[105,124737,124738],{"class":220}," mvtest2",[105,124740,2665],{"class":115},[105,124742,124743],{"class":107,"line":28},[105,124744,124745],{"class":1954},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124747,124748],{},[20,124749],{"alt":22,"src":124750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[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-116.png",[14,124757,124758,124759,124762],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[102,124760,124761],{},"du -a"," 可以快速查看磁盘使用细节。",[76,124764,124766],{"id":124765},"_765-vim","7.6.5 Vim",[14,124768,124769],{},[20,124770],{"alt":22,"src":124771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124773,124774],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124776,124777],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124779,124780],{},[265,124781,124782],{},"1.命令模式：",[14,124784,124785],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124787,124788],{},"x 删除当前光标所在处的字符",[14,124790,124791],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124793,124794],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124796,124797],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124799,124800],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124802,124803],{},"dd 剪切当前行",[14,124805,124806],{},"yy 复制当前行",[14,124808,124809],{},"p 粘贴剪贴板内容到光标下方",[14,124811,124812],{},"P 粘贴剪贴板内容到光标上方",[14,124814,124815],{},"u 撤销上一次操作",[14,124817,124818],{},"ctrl+r 重做上一次操作",[14,124820,124821,124823],{},[911,124822],{}," 保存文件",[14,124825,124826,124828],{},[761,124827],{}," 退出Vim编辑器",[14,124830,124831,124833],{},[761,124832],{},"! 强制退出Vim编辑器，不保存修改",[14,124835,124836],{},[265,124837,124838],{},"2.输入模式：",[14,124840,124841],{},[20,124842],{"alt":22,"src":124843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124845,124846],{},[265,124847,124848],{},"3.底线命令模式：",[14,124850,124851],{},[20,124852],{"alt":22,"src":124853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124855,124856],{},"按下esc可以退出底线命令模式",[76,124858,124860],{"id":124859},"_766-apt","7.6.6 apt",[14,124862,124863],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[76,124865,124867],{"id":124866},"_767-home与root的区别","7.6.7 home与root的区别",[14,124869,124870],{},[20,124871],{"alt":22,"src":124872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[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-121.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-122.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-123.png",[76,124889,124891],{"id":124890},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124893,124894],{},[354,124895,124896],{"href":124896,"rel":124897},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23858],[59,124899,124900,124903],{},[62,124901,124902],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[62,124904,124905],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124907,124908],{},[20,124909],{"alt":22,"src":124910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124912,124913],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124915,124916],{},[20,124917],{"alt":22,"src":124918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[96,124920,124922],{"className":120801,"code":124921,"language":120803,"meta":120804,"style":22},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[102,124923,124924,124929],{"__ignoreMap":22},[105,124925,124926],{"class":107,"line":108},[105,124927,124928],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[105,124930,124931],{"class":107,"line":28},[105,124932,124933],{},".\u002Fpycharm.sh\n",[14,124935,124936],{},"3️⃣创建.desktop文件",[14,124938,124939],{},[265,124940,124941],{},"原理：",[1123,124943,124944,124954],{},[62,124945,124946,124947,124953],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[265,124948,124949,124952],{},[102,124950,124951],{},".desktop"," 文件"," 来识别应用。",[62,124955,124956,124958,124959],{},[102,124957,124951],{}," 文件相当于一个“应用注册表”，告诉系统：",[1123,124960,124961,124964,124967,124970,124973],{},[62,124962,124963],{},"应用名字（Name）",[62,124965,124966],{},"图标（Icon）",[62,124968,124969],{},"执行命令（Exec）",[62,124971,124972],{},"分类（Categories）",[62,124974,124975],{},"是否需要终端（Terminal）",[96,124977,124979],{"className":120801,"code":124978,"language":120803,"meta":120804,"style":22},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[102,124980,124981,124986],{"__ignoreMap":22},[105,124982,124983],{"class":107,"line":108},[105,124984,124985],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[105,124987,124988],{"class":107,"line":28},[105,124989,124990],{},"nano pycharm.desktop\n",[14,124992,124993],{},"nano是一个命令行下的编辑器，也可以使用vim",[96,124995,124997],{"className":120801,"code":124996,"language":120803,"meta":120804,"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",[102,124998,124999,125004,125009,125014,125019,125024,125029,125034,125039,125044],{"__ignoreMap":22},[105,125000,125001],{"class":107,"line":108},[105,125002,125003],{},"[Desktop Entry]\n",[105,125005,125006],{"class":107,"line":28},[105,125007,125008],{},"Version=1.0\n",[105,125010,125011],{"class":107,"line":1171},[105,125012,125013],{},"Type=Application\n",[105,125015,125016],{"class":107,"line":1186},[105,125017,125018],{},"Name=PyCharm\n",[105,125020,125021],{"class":107,"line":1192},[105,125022,125023],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[105,125025,125026],{"class":107,"line":1206},[105,125027,125028],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[105,125030,125031],{"class":107,"line":1212},[105,125032,125033],{},"Comment=JetBrains PyCharm IDE\n",[105,125035,125036],{"class":107,"line":1303},[105,125037,125038],{},"Categories=Development;IDE;\n",[105,125040,125041],{"class":107,"line":1309},[105,125042,125043],{},"Terminal=false\n",[105,125045,125046],{"class":107,"line":1321},[105,125047,125048],{},"StartupWMClass=jetbrains-pycharm\n",[1123,125050,125051,125057,125063,125069],{},[62,125052,125053,125056],{},[102,125054,125055],{},"Exec"," → 点击图标时执行的命令",[62,125058,125059,125062],{},[102,125060,125061],{},"Icon"," → 显示在菜单和桌面上的图标",[62,125064,125065,125068],{},[102,125066,125067],{},"Terminal=false"," → 不打开终端",[62,125070,125071,125074],{},[102,125072,125073],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125076,125077,125078],"blockquote",{},[14,125079,125080,125081,125083,125084],{},"可以理解成 ",[102,125082,124951],{}," 文件是 Linux 的 ",[265,125085,125086],{},"快捷方式配置文件",[14,125088,125089],{},"4️⃣设置可执行权限",[96,125091,125093],{"className":120801,"code":125092,"language":120803,"meta":120804,"style":22},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[102,125094,125095],{"__ignoreMap":22},[105,125096,125097],{"class":107,"line":108},[105,125098,125092],{},[14,125100,125101],{},"5️⃣桌面图标启动的话如下：",[96,125103,125105],{"className":120801,"code":125104,"language":120803,"meta":120804,"style":22},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[102,125106,125107,125112],{"__ignoreMap":22},[105,125108,125109],{"class":107,"line":108},[105,125110,125111],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[105,125113,125114],{"class":107,"line":28},[105,125115,125116],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[59,125118,125119],{"start":1171},[62,125120,125121],{},"下载Appimage文件实现软件的安装",[14,125123,125124],{},"1️⃣先下载appimage",[14,125126,125127],{},[354,125128,125129],{"href":125129,"rel":125130},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23858],[14,125132,125133],{},[20,125134],{"alt":22,"src":125135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125137,125138],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125140,125141],{},[20,125142],{"alt":22,"src":125143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125145,125146],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125148,125149],{},[20,125150],{"alt":22,"src":125151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[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-129.png",[14,125158,125159,125160,125163],{},"3️⃣给他们放在",[102,125161,125162],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125165,125166],{},"4️⃣给软件执行权限",[96,125168,125170],{"className":120801,"code":125169,"language":120803,"meta":120804,"style":22},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[102,125171,125172,125177],{"__ignoreMap":22},[105,125173,125174],{"class":107,"line":108},[105,125175,125176],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[105,125178,125179],{"class":107,"line":28},[105,125180,125181],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125183,125184],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[96,125186,125188],{"className":117281,"code":125187,"language":117283,"meta":22,"style":22},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[102,125189,125190,125197,125204,125210],{"__ignoreMap":22},[105,125191,125192,125194],{"class":107,"line":108},[105,125193,101261],{"class":164},[105,125195,125196],{"class":220}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[105,125198,125199,125201],{"class":107,"line":28},[105,125200,101268],{"class":1954},[105,125202,125203],{"class":220}," .\u002Fqqmusic.desktop\n",[105,125205,125206,125208],{"class":107,"line":1171},[105,125207,124252],{"class":1954},[105,125209,125203],{"class":220},[105,125211,125212,125214,125216,125218],{"class":107,"line":1186},[105,125213,24561],{"class":1954},[105,125215,24564],{"class":220},[105,125217,123118],{"class":220},[105,125219,125203],{"class":220},[14,125221,125222,125224],{},[102,125223,101268],{},"：一个 Linux 命令，主要功能是：",[1123,125226,125227,125230],{},[62,125228,125229],{},"如果文件不存在，就创建一个新的空文件",[62,125231,125232],{},"如果文件已存在，就更新该文件的最后修改时间",[96,125234,125236],{"className":120801,"code":125235,"language":120803,"meta":120804,"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",[102,125237,125238,125242,125247,125252,125257,125261,125266],{"__ignoreMap":22},[105,125239,125240],{"class":107,"line":108},[105,125241,125003],{},[105,125243,125244],{"class":107,"line":28},[105,125245,125246],{},"Name=QQ音乐\n",[105,125248,125249],{"class":107,"line":1171},[105,125250,125251],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[105,125253,125254],{"class":107,"line":1186},[105,125255,125256],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[105,125258,125259],{"class":107,"line":1192},[105,125260,125013],{},[105,125262,125263],{"class":107,"line":1206},[105,125264,125265],{},"Categories=Audio;Music;Player;\n",[105,125267,125268],{"class":107,"line":1212},[105,125269,125270],{},"Comment=QQ Music Client for Linux\n",[14,125272,125273],{},"将文件复制进去",[14,125275,125276],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125278,125279],{},[20,125280],{"alt":22,"src":125281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125283,125284],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125286,125287],{},[20,125288],{"alt":22,"src":125289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125291,125292,125293,125296,125297,125300],{},"如果你用的不是KDE，那么也可以直接修改",[102,125294,125295],{},"qqmuic.desktop","：在exec的末尾加上",[102,125298,125299],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[96,125302,125304],{"className":120801,"code":125303,"language":120803,"meta":120804,"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",[102,125305,125306,125310,125314,125319,125323,125327,125331],{"__ignoreMap":22},[105,125307,125308],{"class":107,"line":108},[105,125309,125003],{},[105,125311,125312],{"class":107,"line":28},[105,125313,125246],{},[105,125315,125316],{"class":107,"line":1171},[105,125317,125318],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[105,125320,125321],{"class":107,"line":1186},[105,125322,125256],{},[105,125324,125325],{"class":107,"line":1192},[105,125326,125013],{},[105,125328,125329],{"class":107,"line":1206},[105,125330,125265],{},[105,125332,125333],{"class":107,"line":1212},[105,125334,125270],{},[14,125336,125337],{},[20,125338],{"alt":22,"src":125339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125341,125342],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[96,125344,125346],{"className":120801,"code":125345,"language":120803,"meta":120804,"style":22},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[102,125347,125348],{"__ignoreMap":22},[105,125349,125350],{"class":107,"line":108},[105,125351,125345],{},[59,125353,125354],{"start":1186},[62,125355,125356],{},"去Flathub上安装软件",[14,125358,125359],{},[354,125360,125361],{"href":125361,"rel":125362},"https:\u002F\u002Fflathub.org\u002F",[23858],[14,125364,125365],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125367,125368],{},[20,125369],{"alt":22,"src":125370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[96,125372,125374],{"className":120801,"code":125373,"language":120803,"meta":120804,"style":22},"flatpak install flathub com.obsproject.Studio\n",[102,125375,125376],{"__ignoreMap":22},[105,125377,125378],{"class":107,"line":108},[105,125379,125373],{},[14,125381,125382],{},[20,125383],{"alt":22,"src":125384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125386,125387],{},"2️⃣运行软件",[14,125389,125390],{},"a.官方方式：",[14,125392,125393],{},[20,125394],{"alt":22,"src":125395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[96,125397,125398],{"className":120801,"code":125373,"language":120803,"meta":120804,"style":22},[102,125399,125400],{"__ignoreMap":22},[105,125401,125402],{"class":107,"line":108},[105,125403,125373],{},[14,125405,125406],{},"b.当普通软件运行：",[14,125408,125409],{},[20,125410],{"alt":22,"src":125411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[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-137.png",[5118,125418,125419],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":28,"depth":28,"links":125421},[125422,125423,125428,125429,125435,125436],{"id":122154,"depth":28,"text":122155},{"id":122496,"depth":28,"text":122497,"children":125424},[125425,125426,125427],{"id":122500,"depth":1171,"text":122501},{"id":122567,"depth":1171,"text":122568},{"id":122828,"depth":1171,"text":122829},{"id":122981,"depth":28,"text":122982},{"id":123219,"depth":28,"text":123220,"children":125430},[125431,125432,125433,125434],{"id":123271,"depth":1171,"text":123272},{"id":123557,"depth":1171,"text":123558},{"id":123828,"depth":1171,"text":123829},{"id":124087,"depth":1171,"text":124088},{"id":124146,"depth":28,"text":124147},{"id":124447,"depth":28,"text":124448,"children":125437},[125438,125439,125440,125441,125442,125443,125444,125445],{"id":124451,"depth":1171,"text":124452},{"id":124463,"depth":1171,"text":124464},{"id":124675,"depth":1171,"text":124676},{"id":124699,"depth":1171,"text":124700},{"id":124765,"depth":1171,"text":124766},{"id":124859,"depth":1171,"text":124860},{"id":124866,"depth":1171,"text":124867},{"id":124890,"depth":1171,"text":124891},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122146,"description":23369},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125452,"title":125453,"body":125454,"description":23369,"extension":30,"meta":125458,"navigation":32,"path":125459,"seo":125460,"stem":125461,"__hash__":125462},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125455,"toc":125456},[],{"title":22,"searchDepth":28,"depth":28,"links":125457},[],{"category":30248},"\u002Fwiki\u002F2025-01-27-linux",{"title":125453,"description":23369},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125464,"title":125465,"body":125466,"description":125470,"extension":30,"meta":125861,"navigation":32,"path":125862,"seo":125863,"stem":125864,"__hash__":125865},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125467,"toc":125859},[125468,125471,125475,125492,125495,125548,125552,125554,125594,125603,125607,125610,125851,125856],[14,125469,125470],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125472,125474],{"id":125473},"_1ubuntu环境配置","1.Ubuntu环境配置",[59,125476,125477,125480,125483,125486,125489],{},[62,125478,125479],{},"ubuntu环境换源",[62,125481,125482],{},"安装cuda",[62,125484,125485],{},"安装miniconda",[62,125487,125488],{},"安装pytorch",[62,125490,125491],{},"安装genesis",[14,125493,125494],{},"参考链接：",[96,125496,125498],{"className":23815,"code":125497,"language":23817,"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",[102,125499,125500],{"__ignoreMap":22},[105,125501,125502,125505,125508,125511,125513,125516,125519,125521,125524,125527,125529,125532,125535,125537,125540,125543,125545],{"class":107,"line":108},[105,125503,125504],{"class":1954},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[105,125506,125507],{"class":220},"=blogdetail",[105,125509,125510],{"class":115},"&sharetype",[105,125512,161],{"class":111},[105,125514,125515],{"class":220},"blogdetail",[105,125517,125518],{"class":115},"&sharerId",[105,125520,161],{"class":111},[105,125522,125523],{"class":220},"144728092",[105,125525,125526],{"class":115},"&sharerefer",[105,125528,161],{"class":111},[105,125530,125531],{"class":220},"PC",[105,125533,125534],{"class":115},"&sharesource",[105,125536,161],{"class":111},[105,125538,125539],{"class":220},"qq_69379513",[105,125541,125542],{"class":115},"&sharefrom",[105,125544,161],{"class":111},[105,125546,125547],{"class":220},"from_link\n",[10,125549,125551],{"id":125550},"_2genesis-报错issue","2.Genesis 报错issue",[14,125553,125494],{},[96,125555,125556],{"className":23815,"code":125497,"language":23817,"meta":22,"style":22},[102,125557,125558],{"__ignoreMap":22},[105,125559,125560,125562,125564,125566,125568,125570,125572,125574,125576,125578,125580,125582,125584,125586,125588,125590,125592],{"class":107,"line":108},[105,125561,125504],{"class":1954},[105,125563,125507],{"class":220},[105,125565,125510],{"class":115},[105,125567,161],{"class":111},[105,125569,125515],{"class":220},[105,125571,125518],{"class":115},[105,125573,161],{"class":111},[105,125575,125523],{"class":220},[105,125577,125526],{"class":115},[105,125579,161],{"class":111},[105,125581,125531],{"class":220},[105,125583,125534],{"class":115},[105,125585,161],{"class":111},[105,125587,125539],{"class":220},[105,125589,125542],{"class":115},[105,125591,161],{"class":111},[105,125593,125547],{"class":220},[96,125595,125597],{"className":23815,"code":125596,"language":23817,"meta":22,"style":22},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[102,125598,125599],{"__ignoreMap":22},[105,125600,125601],{"class":107,"line":108},[105,125602,125596],{"class":1954},[10,125604,125606],{"id":125605},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125608,125609],{},"hello_robot.py",[96,125611,125613],{"className":30363,"code":125612,"language":30365,"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",[102,125614,125615,125621,125636,125640,125652,125664,125668,125681,125685,125704,125714,125724,125738,125742,125746,125751,125755,125765,125772,125786,125793,125803,125808,125812,125830,125835,125839,125846],{"__ignoreMap":22},[105,125616,125617,125619],{"class":107,"line":108},[105,125618,30377],{"class":111},[105,125620,45290],{"class":115},[105,125622,125623,125626,125629,125631,125633],{"class":107,"line":28},[105,125624,125625],{"class":115},"os.environ[",[105,125627,125628],{"class":220},"'PYOPENGL_PLATFORM'",[105,125630,4434],{"class":115},[105,125632,161],{"class":111},[105,125634,125635],{"class":220}," 'glx'\n",[105,125637,125638],{"class":107,"line":1171},[105,125639,2391],{"emptyLinePlaceholder":32},[105,125641,125642,125644,125647,125649],{"class":107,"line":1186},[105,125643,30377],{"class":111},[105,125645,125646],{"class":115}," genesis ",[105,125648,31368],{"class":111},[105,125650,125651],{"class":115}," gs\n",[105,125653,125654,125656,125659,125661],{"class":107,"line":1192},[105,125655,30722],{"class":111},[105,125657,125658],{"class":115}," pynput ",[105,125660,30377],{"class":111},[105,125662,125663],{"class":115}," keyboard\n",[105,125665,125666],{"class":107,"line":1206},[105,125667,2391],{"emptyLinePlaceholder":32},[105,125669,125670,125673,125676,125678],{"class":107,"line":1212},[105,125671,125672],{"class":115},"gs.init(",[105,125674,125675],{"class":5208},"backend",[105,125677,161],{"class":111},[105,125679,125680],{"class":115},"gs.gpu)\n",[105,125682,125683],{"class":107,"line":1303},[105,125684,2391],{"emptyLinePlaceholder":32},[105,125686,125687,125690,125692,125695,125698,125700,125702],{"class":107,"line":1309},[105,125688,125689],{"class":115},"scene ",[105,125691,161],{"class":111},[105,125693,125694],{"class":115}," gs.Scene(",[105,125696,125697],{"class":5208},"show_viewer",[105,125699,161],{"class":111},[105,125701,31461],{"class":164},[105,125703,122],{"class":115},[105,125705,125706,125709,125711],{"class":107,"line":1321},[105,125707,125708],{"class":115},"plane ",[105,125710,161],{"class":111},[105,125712,125713],{"class":115}," scene.add_entity(gs.morphs.Plane())\n",[105,125715,125716,125719,125721],{"class":107,"line":1603},[105,125717,125718],{"class":115},"franka ",[105,125720,161],{"class":111},[105,125722,125723],{"class":115}," scene.add_entity(\n",[105,125725,125726,125729,125731,125733,125736],{"class":107,"line":1608},[105,125727,125728],{"class":115},"    gs.morphs.MJCF(",[105,125730,45339],{"class":5208},[105,125732,161],{"class":111},[105,125734,125735],{"class":220},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[105,125737,38032],{"class":115},[105,125739,125740],{"class":107,"line":1614},[105,125741,122],{"class":115},[105,125743,125744],{"class":107,"line":1619},[105,125745,2391],{"emptyLinePlaceholder":32},[105,125747,125748],{"class":107,"line":1633},[105,125749,125750],{"class":115},"scene.build()\n",[105,125752,125753],{"class":107,"line":1638},[105,125754,2391],{"emptyLinePlaceholder":32},[105,125756,125757,125759,125762],{"class":107,"line":1644},[105,125758,31932],{"class":111},[105,125760,125761],{"class":1954}," on_press",[105,125763,125764],{"class":115},"(key):\n",[105,125766,125767,125770],{"class":107,"line":1665},[105,125768,125769],{"class":111},"    try",[105,125771,3730],{"class":115},[105,125773,125774,125776,125779,125781,125784],{"class":107,"line":1670},[105,125775,2488],{"class":111},[105,125777,125778],{"class":115}," key.char ",[105,125780,2940],{"class":111},[105,125782,125783],{"class":220}," 'q'",[105,125785,3730],{"class":115},[105,125787,125788,125790],{"class":107,"line":1684},[105,125789,15724],{"class":111},[105,125791,125792],{"class":164}," False\n",[105,125794,125795,125798,125801],{"class":107,"line":1689},[105,125796,125797],{"class":111},"    except",[105,125799,125800],{"class":164}," AttributeError",[105,125802,3730],{"class":115},[105,125804,125805],{"class":107,"line":1718},[105,125806,125807],{"class":111},"        pass\n",[105,125809,125810],{"class":107,"line":1723},[105,125811,2391],{"emptyLinePlaceholder":32},[105,125813,125814,125817,125819,125822,125825,125827],{"class":107,"line":1740},[105,125815,125816],{"class":115},"listener ",[105,125818,161],{"class":111},[105,125820,125821],{"class":115}," keyboard.Listener(",[105,125823,125824],{"class":5208},"on_press",[105,125826,161],{"class":111},[105,125828,125829],{"class":115},"on_press)\n",[105,125831,125832],{"class":107,"line":1745},[105,125833,125834],{"class":115},"listener.start()\n",[105,125836,125837],{"class":107,"line":1750},[105,125838,2391],{"emptyLinePlaceholder":32},[105,125840,125841,125843],{"class":107,"line":1755},[105,125842,108648],{"class":111},[105,125844,125845],{"class":115}," listener.running:\n",[105,125847,125848],{"class":107,"line":1769},[105,125849,125850],{"class":115},"    scene.step()\n",[14,125852,125853],{},[20,125854],{"alt":22,"src":125855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5118,125857,125858],{},"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":28,"depth":28,"links":125860},[],{"category":23371},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125465,"description":125470},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125867,"title":125868,"body":125869,"description":23369,"extension":30,"meta":125884,"navigation":32,"path":125885,"seo":125886,"stem":125887,"__hash__":125888},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125870,"toc":125881},[125871,125874,125878],[10,125872,125868],{"id":125873},"_1-基础知识",[47,125875,125877],{"id":125876},"_11-js的组成","1.1 js的组成",[14,125879,125880],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":22,"searchDepth":28,"depth":28,"links":125882},[125883],{"id":125876,"depth":28,"text":125877},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125868,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125890,"title":125891,"body":125892,"description":23369,"extension":30,"meta":126031,"navigation":32,"path":126032,"seo":126033,"stem":126034,"__hash__":126035},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125893,"toc":126019},[125894,125897,125901,125904,125908,125918,125922,125925,125928,125931,125935,125942,125948,125952,125958,125969,125973,125976,125980,125983,125987,125990,125994,125997,126001,126004,126007,126010,126013,126016],[10,125895,125891],{"id":125896},"_2-vscode必备内容",[47,125898,125900],{"id":125899},"_21-标签分类","2.1 标签分类",[14,125902,125903],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[47,125905,125907],{"id":125906},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125909,125910,125911,125913,125914,125917],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[102,125912,342],{}," 然后按 ",[102,125915,125916],{},"Tab","，快速自动生成基本结构。",[47,125919,125921],{"id":125920},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125923,125924],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125926,125927],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125929,125930],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[47,125932,125934],{"id":125933},"_24-视图缩放","2.4 视图缩放",[14,125936,125937,125938,125941],{},"缩放视图 ",[102,125939,125940],{},"ctrl+"," 可实现代码增大。",[14,125943,125944,125947],{},[102,125945,125946],{},"ctrl-"," 可实现代码减小。",[47,125949,125951],{"id":125950},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,125953,125954,125955,28370],{},"VSCode 新建文件快捷键为 ",[102,125956,125957],{},"ctrl+N",[14,125959,125960,125961,125964,125965,125968],{},"保存快捷键为 ",[102,125962,125963],{},"ctrl+S","，将文本保存为 ",[102,125966,125967],{},".html"," 文件。",[47,125970,125972],{"id":125971},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,125974,125975],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[47,125977,125979],{"id":125978},"_27-vscode-icons","2.7 vscode-icons",[14,125981,125982],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[47,125984,125986],{"id":125985},"_28-easy-less","2.8 Easy LESS",[14,125988,125989],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[47,125991,125993],{"id":125992},"_29-会了吧插件","2.9 会了吧插件",[14,125995,125996],{},"会了吧插件可以展示代码中英语单词的意思。",[47,125998,126000],{"id":125999},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126002,126003],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126005,126006],{},"②选定多个相同的单词:ctrl+D",[14,126008,126009],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126011,126012],{},"④全局替换某些单词:ctrl+h",[14,126014,126015],{},"⑤快速定位到某一行:ctrl+g",[14,126017,126018],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":22,"searchDepth":28,"depth":28,"links":126020},[126021,126022,126023,126024,126025,126026,126027,126028,126029,126030],{"id":125899,"depth":28,"text":125900},{"id":125906,"depth":28,"text":125907},{"id":125920,"depth":28,"text":125921},{"id":125933,"depth":28,"text":125934},{"id":125950,"depth":28,"text":125951},{"id":125971,"depth":28,"text":125972},{"id":125978,"depth":28,"text":125979},{"id":125985,"depth":28,"text":125986},{"id":125992,"depth":28,"text":125993},{"id":125999,"depth":28,"text":126000},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125891,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126037,"title":126038,"body":126039,"description":23369,"extension":30,"meta":126198,"navigation":32,"path":126199,"seo":126200,"stem":126201,"__hash__":126202},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126040,"toc":126190},[126041,126044,126048,126058,126064,126070,126074,126083,126087,126092,126095,126098,126102,126105,126115,126124,126133,126142,126152,126159,126164,126169,126182],[10,126042,126038],{"id":126043},"_3-html文本与容器标签",[47,126045,126047],{"id":126046},"_31-标题标签","3.1 标题标签",[14,126049,126050,126053,126054,126057],{},[102,126051,126052],{},"\u003Ch1>","我是一级标签",[102,126055,126056],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126059,126060,126053,126062],{},[102,126061,126052],{},[102,126063,126056],{},[14,126065,123320,126066,126069],{},[102,126067,126068],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[47,126071,126073],{"id":126072},"_32-段落标签","3.2 段落标签",[14,126075,126076,126079,126080],{},[102,126077,126078],{},"\u003Cp>","....",[102,126081,126082],{},"\u003C\u002Fp>",[47,126084,126086],{"id":126085},"_33-换行标签","3.3 换行标签",[14,126088,126089],{},[102,126090,126091],{},"\u003Cbr \u002F>",[14,126093,126094],{},"具有强制换行的作用",[14,126096,126097],{},"单标签",[47,126099,126101],{"id":126100},"_34-文本格式化标签","3.4 文本格式化标签",[14,126103,126104],{},"提供粗体、斜体和下划线等效果",[14,126106,126107,126108,82524,126111,126114],{},"加粗：",[102,126109,126110],{},"\u003Cstrong>...\u003C\u002Fstrong>",[102,126112,126113],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126116,126117,126118,82524,126121,126114],{},"斜体：",[102,126119,126120],{},"\u003Cem>...\u003C\u002Fem>",[102,126122,126123],{},"\u003Ci>...\u003C\u002Fi>",[14,126125,126126,126127,82524,126130,126114],{},"删除线：",[102,126128,126129],{},"\u003Cdel>...\u003C\u002Fdel>",[102,126131,126132],{},"\u003Cs>...\u003C\u002Fs>",[14,126134,126135,126136,82524,126139,126114],{},"下划线：",[102,126137,126138],{},"\u003Cins>...\u003C\u002Fins>",[102,126140,126141],{},"\u003Cu>...\u003C\u002Fu>",[47,126143,126145,126146,18402,126149,102678],{"id":126144},"_35-div和span标签","3.5 ",[102,126147,126148],{},"\u003Cdiv>",[102,126150,126151],{},"\u003Cspan>",[14,126153,126154,101003,126156,126158],{},[102,126155,126148],{},[102,126157,126151],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126160,126161],{},[102,126162,126163],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126165,126166],{},[102,126167,126168],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126170,126171,126172,126174,126175,126177,126178,126181],{},"两者特点：①",[102,126173,126148],{}," 标签用来布局，但一行通常只放一个 ",[102,126176,126148],{},"。可以理解为一个大盒子，独占一行，在 ",[102,126179,126180],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126183,77234,126184,126186,126187,126189],{},[102,126185,126151],{}," 标签也可用于布局，一行可以放多个 ",[102,126188,126151],{},"，可理解为小盒子。",{"title":22,"searchDepth":28,"depth":28,"links":126191},[126192,126193,126194,126195,126196],{"id":126046,"depth":28,"text":126047},{"id":126072,"depth":28,"text":126073},{"id":126085,"depth":28,"text":126086},{"id":126100,"depth":28,"text":126101},{"id":126144,"depth":28,"text":126197},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126038,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126204,"title":126205,"body":126206,"description":23369,"extension":30,"meta":126403,"navigation":32,"path":126404,"seo":126405,"stem":126406,"__hash__":126407},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126207,"toc":126395},[126208,126211,126215,126218,126224,126231,126237,126243,126246,126249,126252,126255,126258,126261,126264,126268,126271,126274,126277,126283,126289,126295,126302,126306,126312,126318,126321,126324,126330,126336,126342,126345,126348,126352,126355,126365,126371,126375,126384,126388,126391],[10,126209,126205],{"id":126210},"_4-html图像与链接",[47,126212,126214],{"id":126213},"_41-图像标签","4.1 图像标签",[14,126216,126217],{},"（1）标签",[14,126219,126220,126223],{},[102,126221,126222],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126225,126226,126227,126230],{},"src是",[102,126228,126229],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126232,126233,126234],{},"alt:文本，替换文本。图像不能显示的文字 ",[102,126235,126236],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126238,126239,126240],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[102,126241,126242],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126244,126245],{},"width:像素，设置图像的宽度",[14,126247,126248],{},"height:像素，设置图像的高度",[14,126250,126251],{},"border：像素，设置图像的边框粗细",[14,126253,126254],{},"（2）图像标签属性的注意点：",[14,126256,126257],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126259,126260],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126262,126263],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[47,126265,126267],{"id":126266},"_42-路径注意要点","4.2 路径注意要点：",[14,126269,126270],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126272,126273],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126275,126276],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126278,126279,126280],{},"①同一级路径：图像文件位于HTML文件同一级，如",[102,126281,126282],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126284,126285,126286],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[102,126287,126288],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126290,126291,126292],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[102,126293,126294],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126296,126297,126298,367],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[354,126299,126300],{"href":126300,"rel":126301},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23858],[47,126303,126305],{"id":126304},"_43-超链接标签","4.3 超链接标签",[14,126307,126308,126311],{},[102,126309,126310],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126313,126314,126315],{},"①语法格式：",[102,126316,126317],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126319,126320],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126322,126323],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126325,126326,126327],{},"③链接分类：外部链接：",[102,126328,126329],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126331,126332,126333],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[102,126334,126335],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126337,126338,126339],{},"空链接：如果当时没有确定链接目标时，",[102,126340,126341],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126343,126344],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126346,126347],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[47,126349,126351],{"id":126350},"_44-锚点链接","4.4 锚点链接",[14,126353,126354],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126356,126357,126358,126361,126362],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[102,126359,126360],{},"\u003Ca href=\"#two\">","第二级",[102,126363,126364],{},"\u003C\u002Fa>",[14,126366,126367,126368],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[102,126369,126370],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[47,126372,126374],{"id":126373},"_45-注释标签","4.5 注释标签",[14,126376,126377,126380,126381],{},[102,126378,126379],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[102,126382,126383],{},"ctrl+\u002F",[47,126385,126387],{"id":126386},"_46-特殊字符","4.6 特殊字符",[14,126389,126390],{},"可以实现添加多个空格",[20,126392],{"style":126393,"src":126394},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":22,"searchDepth":28,"depth":28,"links":126396},[126397,126398,126399,126400,126401,126402],{"id":126213,"depth":28,"text":126214},{"id":126266,"depth":28,"text":126267},{"id":126304,"depth":28,"text":126305},{"id":126350,"depth":28,"text":126351},{"id":126373,"depth":28,"text":126374},{"id":126386,"depth":28,"text":126387},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126205,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126409,"title":126410,"body":126411,"description":23369,"extension":30,"meta":126704,"navigation":32,"path":126705,"seo":126706,"stem":126707,"__hash__":126708},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126412,"toc":126695},[126413,126416,126420,126423,126426,126429,126432,126435,126438,126441,126444,126447,126467,126473,126477,126480,126483,126486,126489,126492,126495,126499,126502,126505,126508,126511,126524,126529,126532,126535,126550,126553,126556,126559,126562,126565,126569,126572,126579,126582,126585,126588,126591,126594,126600,126603,126606,126612,126615,126618,126621,126627,126630,126633,126647,126654,126657,126660,126667,126676,126679,126682,126685,126689,126692],[10,126414,126410],{"id":126415},"_5-html表格列表与表单",[47,126417,126419],{"id":126418},"_51-表格标签","5.1 表格标签",[14,126421,126422],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126424,126425],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126427,126428],{},"②表格基本语法：",[20,126430],{"style":126393,"src":126431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126433,126434],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[20,126436],{"style":126393,"src":126437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126439,126440],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[20,126442],{"style":126393,"src":126443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126445,126446],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126448,126449,126452,126453,126455,126456,126459,126460,126462,126463,126466],{},[102,126450,126451],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[102,126454,126451],{},"内部必须拥有",[102,126457,126458],{},"\u003Ctr>","标签，一般位于第一行，",[102,126461,126451],{},"比",[102,126464,126465],{},"\u003Cth>","范围广",[14,126468,126469,126472],{},[102,126470,126471],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[47,126474,126476],{"id":126475},"_52-合并单元格","5.2 合并单元格",[14,126478,126479],{},"（1）合并单元格方式：",[14,126481,126482],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126484,126485],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126487,126488],{},"（2）目标单元格：",[14,126490,126491],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126493,126494],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[47,126496,126498],{"id":126497},"_53-列表标签","5.3 列表标签",[14,126500,126501],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126503,126504],{},"①无序列表：",[20,126506],{"style":126393,"src":126507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126509,126510],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126512,126513,126516,126517,126520,126521,126523],{},[102,126514,126515],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[102,126518,126519],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[102,126522,126515],{},"中输入其他标签或文字是不对的",[14,126525,126526,126528],{},[102,126527,126519],{},"之间相当于一个容器，可以容纳所有元素",[14,126530,126531],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126533,126534],{},"在css中去除前边的小圆点采用如下代码:",[96,126536,126540],{"className":126537,"code":126538,"language":126539,"meta":22,"style":22},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[102,126541,126542],{"__ignoreMap":22},[105,126543,126544,126547],{"class":107,"line":108},[105,126545,126546],{"class":51285},"list-style",[105,126548,126549],{"class":115},": none;\n",[14,126551,126552],{},"②有序列表：",[20,126554],{"style":126393,"src":126555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126557,126558],{},"③自定义列表：",[20,126560],{"style":126393,"src":126561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[20,126563],{"style":126393,"src":126564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[47,126566,126568],{"id":126567},"_54-表单标签","5.4 表单标签",[14,126570,126571],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126573,126574,126575,126578],{},"（1）表单域：包含单元素的区域，",[102,126576,126577],{},"\u003Cform>","标签可以实现信息的收集和传递。",[20,126580],{"style":126393,"src":126581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126583,126584],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126586,126587],{},"表单元素提交必须有name属性",[14,126589,126590],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126592,126593],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126595,77211,126596,126599],{},[102,126597,126598],{},"\u003Cinput>","输入表单元素",[20,126601],{"style":126393,"src":126602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[20,126604],{"style":126393,"src":126605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126607,126608,126609],{},"单选按钮：",[102,126610,126611],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[20,126613],{"style":126393,"src":126614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126616,126617],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[20,126619],{"style":126393,"src":126620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126622,126623,126626],{},[265,126624,126625],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126628,126629],{},"②select下拉表单元素：可以节约页面控件",[20,126631],{"style":126393,"src":126632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126634,126635,13787,126637,126640,126641,126643,126644,126646],{},[265,126636,145],{},[102,126638,126639],{},"\u003Cselect>","中至少包含一对",[102,126642,102699],{},"；在",[102,126645,102699],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126648,126649,126650,126653],{},"③",[102,126651,126652],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[20,126655],{"style":126393,"src":126656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126658,126659],{},"3行20列",[47,126661,126663,126664,102678],{"id":126662},"_55-lable标签","5.5 ",[102,126665,126666],{},"\u003Clable>",[14,126668,126669,126670,126672,126673,126675],{},"它不是表单标签，但常常与表单标签搭配使用，",[102,126671,126666],{},"标签用于绑定一个表单标签，当点击",[102,126674,126666],{},"标签内的文本",[14,126677,126678],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[20,126680],{"style":126393,"src":126681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[20,126683],{"style":126393,"src":126684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[47,126686,126688],{"id":126687},"_56-实例","5.6 实例",[20,126690],{"style":126393,"src":126691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5118,126693,126694],{},"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":28,"depth":28,"links":126696},[126697,126698,126699,126700,126701,126703],{"id":126418,"depth":28,"text":126419},{"id":126475,"depth":28,"text":126476},{"id":126497,"depth":28,"text":126498},{"id":126567,"depth":28,"text":126568},{"id":126662,"depth":28,"text":126702},"5.5 \u003Clable>标签",{"id":126687,"depth":28,"text":126688},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126410,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126710,"title":126711,"body":126712,"description":23369,"extension":30,"meta":127261,"navigation":32,"path":127262,"seo":127263,"stem":127264,"__hash__":127265},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126713,"toc":127236},[126714,126717,126721,126724,126727,126731,126734,126737,126740,126743,126746,126749,126752,126756,126759,126763,126766,126769,126772,126776,126779,126782,126785,126791,126794,126797,126800,126803,126806,126809,126812,126845,126849,126852,126855,126858,126862,126865,126868,126871,126874,126877,126881,126884,126887,126890,126894,126897,126901,126904,126908,126911,126916,126920,126923,126927,126930,126933,126936,126939,126966,126969,126973,126976,126979,126984,126987,126990,126994,126997,127002,127005,127008,127011,127015,127018,127021,127024,127028,127031,127034,127037,127041,127045,127048,127088,127091,127095,127102,127105,127109,127112,127158,127162,127165,127168,127171,127199,127203,127206,127233],[10,126715,126711],{"id":126716},"_6-css语法与文本样式",[47,126718,126720],{"id":126719},"_61-css语法规范","6.1 css语法规范",[14,126722,126723],{},"由两部分组成，选择器及一条或多条声明",[20,126725],{"style":126393,"src":126726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126728,126729],{},[265,126730,145],{},[14,126732,126733],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126735,126736],{},"②属性与属性值以“键值对”的形式出现",[14,126738,126739],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126741,126742],{},"④属性和属性值之间用英文“;”分开",[20,126744],{"style":126393,"src":126745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[20,126747],{"style":126393,"src":126748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[20,126750],{"style":126393,"src":126751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[47,126753,126755],{"id":126754},"_62-css选择器","6.2 css选择器",[14,126757,126758],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[76,126760,126762],{"id":126761},"_621-标签选择器","6.2.1 标签选择器",[14,126764,126765],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126767,126768],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[20,126770],{"style":126393,"src":126771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[76,126773,126775],{"id":126774},"_622-类选择器","6.2.2 类选择器",[14,126777,126778],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126780,126781],{},"②样例",[20,126783],{"style":126393,"src":126784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126786,126787,126788,126790],{},"③ ",[265,126789,126625],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126792,126793],{},"可以理解为给这个标签起了个名字，来表示；",[14,126795,126796],{},"长名称或词组可以使用横线来为选择器命名；",[14,126798,126799],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126801,126802],{},"命名要有意义；",[20,126804],{"style":126393,"src":126805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126807,126808],{},"类选择器也可以指定特殊的元素p.center{}",[14,126810,126811],{},"p.center和.center都对",[96,126813,126815],{"className":126537,"code":126814,"language":126539,"meta":22,"style":22},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[102,126816,126817,126822,126831,126841],{"__ignoreMap":22},[105,126818,126819],{"class":107,"line":108},[105,126820,126821],{"class":174},"\u002F* 类选择器指定特殊元素 *\u002F\n",[105,126823,126824,126826,126829],{"class":107,"line":28},[105,126825,14],{"class":51285},[105,126827,126828],{"class":1954},".center",[105,126830,15564],{"class":115},[105,126832,126833,126835,126837,126839],{"class":107,"line":1171},[105,126834,70511],{"class":164},[105,126836,51422],{"class":115},[105,126838,51577],{"class":164},[105,126840,1282],{"class":115},[105,126842,126843],{"class":107,"line":1186},[105,126844,1556],{"class":115},[76,126846,126848],{"id":126847},"_623-多类名使用","6.2.3 多类名使用",[14,126850,126851],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[20,126853],{"style":126393,"src":126854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126856,126857],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[76,126859,126861],{"id":126860},"_624-id选择器","6.2.4 id选择器",[14,126863,126864],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126866,126867],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[20,126869],{"style":126393,"src":126870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126872,126873],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126875,126876],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[76,126878,126880],{"id":126879},"_625-通配符选择器","6.2.5 通配符选择器",[14,126882,126883],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126885,126886],{},"* {",[14,126888,126889],{},"color=\"red\"}",[76,126891,126893],{"id":126892},"_626-总结","6.2.6 总结",[20,126895],{"style":126393,"src":126896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[47,126898,126900],{"id":126899},"_63-css字体属性","6.3 css字体属性",[14,126902,126903],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[76,126905,126907],{"id":126906},"_631-字体系列","6.3.1 字体系列",[14,126909,126910],{},"font-family: '宋体';",[14,126912,126913,126915],{},[265,126914,145],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[76,126917,126919],{"id":126918},"_632-字体大小","6.3.2 字体大小",[14,126921,126922],{},"font-size: 20px",[14,126924,126925,26458],{},[265,126926,126625],{},[14,126928,126929],{},"①px（像素）大小是网页的最常用单位",[14,126931,126932],{},"②谷歌浏览器默认为16px",[14,126934,126935],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,126937,126938],{},"④可以给body指定整个页面的大小：会自动引用",[96,126940,126942],{"className":126537,"code":126941,"language":126539,"meta":22,"style":22},"body {\n  font-size: 16px;\n}\n",[102,126943,126944,126950,126962],{"__ignoreMap":22},[105,126945,126946,126948],{"class":107,"line":108},[105,126947,51785],{"class":51285},[105,126949,15564],{"class":115},[105,126951,126952,126954,126956,126958,126960],{"class":107,"line":28},[105,126953,70611],{"class":164},[105,126955,51422],{"class":115},[105,126957,717],{"class":164},[105,126959,51477],{"class":111},[105,126961,1282],{"class":115},[105,126963,126964],{"class":107,"line":1171},[105,126965,1556],{"class":115},[14,126967,126968],{},"⑤标题标签比较特殊，需要单独指定大小",[76,126970,126972],{"id":126971},"_633-字体粗细","6.3.3 字体粗细",[14,126974,126975],{},"font-weight: bold;",[14,126977,126978],{},"font-weight: 100；",[14,126980,126981,126983],{},[265,126982,145],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,126985,126986],{},"font-weight= 400;",[14,126988,126989],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[76,126991,126993],{"id":126992},"_634-文字样式","6.3.4 文字样式",[14,126995,126996],{},"font-style: normal；",[14,126998,126999,26458],{},[265,127000,127001],{},"属性值",[14,127003,127004],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127006,127007],{},"②italic：浏览器会显示斜体的字体样式",[20,127009],{"style":126393,"src":127010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[76,127012,127014],{"id":127013},"_635-字体符合属性","6.3.5 字体符合属性",[20,127016],{"style":126393,"src":127017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[20,127019],{"style":126393,"src":127020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127022,127023],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127025,127026,26458],{},[265,127027,126625],{},[14,127029,127030],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127032,127033],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127035,127036],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[47,127038,127040],{"id":127039},"_64-css-test文本属性","6.4 css test文本属性",[76,127042,127044],{"id":127043},"_641-文本颜色","6.4.1 文本颜色",[14,127046,127047],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[96,127049,127051],{"className":126537,"code":127050,"language":126539,"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",[102,127052,127053,127058,127064,127074,127079,127084],{"__ignoreMap":22},[105,127054,127055],{"class":107,"line":108},[105,127056,127057],{"class":174},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[105,127059,127060,127062],{"class":107,"line":28},[105,127061,14],{"class":51285},[105,127063,15564],{"class":115},[105,127065,127066,127068,127070,127072],{"class":107,"line":1171},[105,127067,70890],{"class":164},[105,127069,51422],{"class":115},[105,127071,57406],{"class":164},[105,127073,1282],{"class":115},[105,127075,127076],{"class":107,"line":1186},[105,127077,127078],{"class":174},"  \u002F* color: #ff0000; *\u002F\n",[105,127080,127081],{"class":107,"line":1192},[105,127082,127083],{"class":174},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[105,127085,127086],{"class":107,"line":1206},[105,127087,1556],{"class":115},[20,127089],{"style":126393,"src":127090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[76,127092,127094],{"id":127093},"_642-对齐文本","6.4.2 对齐文本",[14,127096,127097,127098,127101],{},"text-align属于用于设置元素内文本内容的 ",[265,127099,127100],{},"水平对齐"," 方式",[14,127103,127104],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[76,127106,127108],{"id":127107},"_643-装饰文本","6.4.3 装饰文本",[14,127110,127111],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[96,127113,127115],{"className":126537,"code":127114,"language":126539,"meta":22,"style":22},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[102,127116,127117,127123,127133,127137,127143,127154],{"__ignoreMap":22},[105,127118,127119,127121],{"class":107,"line":108},[105,127120,354],{"class":51285},[105,127122,15564],{"class":115},[105,127124,127125,127127,127129,127131],{"class":107,"line":28},[105,127126,70487],{"class":164},[105,127128,51422],{"class":115},[105,127130,54722],{"class":164},[105,127132,1282],{"class":115},[105,127134,127135],{"class":107,"line":1171},[105,127136,1556],{"class":115},[105,127138,127139,127141],{"class":107,"line":1186},[105,127140,14],{"class":51285},[105,127142,15564],{"class":115},[105,127144,127145,127147,127149,127152],{"class":107,"line":1192},[105,127146,70487],{"class":164},[105,127148,51422],{"class":115},[105,127150,127151],{"class":164},"underline",[105,127153,1282],{"class":115},[105,127155,127156],{"class":107,"line":1206},[105,127157,1556],{"class":115},[76,127159,127161],{"id":127160},"_644-文本缩进","6.4.4 文本缩进",[14,127163,127164],{},"实现文本的第一行首行缩进自己指定的距离",[14,127166,127167],{},"20px往右边走；-20px往左边走",[14,127169,127170],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[96,127172,127174],{"className":126537,"code":127173,"language":126539,"meta":22,"style":22},"p {\n  text-indent: 2em;\n}\n",[102,127175,127176,127182,127195],{"__ignoreMap":22},[105,127177,127178,127180],{"class":107,"line":108},[105,127179,14],{"class":51285},[105,127181,15564],{"class":115},[105,127183,127184,127187,127189,127191,127193],{"class":107,"line":28},[105,127185,127186],{"class":164},"  text-indent",[105,127188,51422],{"class":115},[105,127190,193],{"class":164},[105,127192,23546],{"class":111},[105,127194,1282],{"class":115},[105,127196,127197],{"class":107,"line":1171},[105,127198,1556],{"class":115},[76,127200,127202],{"id":127201},"_645-行间距","6.4.5 行间距",[14,127204,127205],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[96,127207,127209],{"className":126537,"code":127208,"language":126539,"meta":22,"style":22},"p {\n  line-height: 1.6;\n}\n",[102,127210,127211,127217,127229],{"__ignoreMap":22},[105,127212,127213,127215],{"class":107,"line":108},[105,127214,14],{"class":51285},[105,127216,15564],{"class":115},[105,127218,127219,127222,127224,127227],{"class":107,"line":28},[105,127220,127221],{"class":164},"  line-height",[105,127223,51422],{"class":115},[105,127225,127226],{"class":164},"1.6",[105,127228,1282],{"class":115},[105,127230,127231],{"class":107,"line":1171},[105,127232,1556],{"class":115},[5118,127234,127235],{},"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":28,"depth":28,"links":127237},[127238,127239,127247,127254],{"id":126719,"depth":28,"text":126720},{"id":126754,"depth":28,"text":126755,"children":127240},[127241,127242,127243,127244,127245,127246],{"id":126761,"depth":1171,"text":126762},{"id":126774,"depth":1171,"text":126775},{"id":126847,"depth":1171,"text":126848},{"id":126860,"depth":1171,"text":126861},{"id":126879,"depth":1171,"text":126880},{"id":126892,"depth":1171,"text":126893},{"id":126899,"depth":28,"text":126900,"children":127248},[127249,127250,127251,127252,127253],{"id":126906,"depth":1171,"text":126907},{"id":126918,"depth":1171,"text":126919},{"id":126971,"depth":1171,"text":126972},{"id":126992,"depth":1171,"text":126993},{"id":127013,"depth":1171,"text":127014},{"id":127039,"depth":28,"text":127040,"children":127255},[127256,127257,127258,127259,127260],{"id":127043,"depth":1171,"text":127044},{"id":127093,"depth":1171,"text":127094},{"id":127107,"depth":1171,"text":127108},{"id":127160,"depth":1171,"text":127161},{"id":127201,"depth":1171,"text":127202},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126711,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127267,"title":127268,"body":127269,"description":23369,"extension":30,"meta":127918,"navigation":32,"path":127919,"seo":127920,"stem":127921,"__hash__":127922},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127270,"toc":127899},[127271,127274,127278,127282,127342,127346,127356,127359,127362,127366,127391,127395,127398,127401,127404,127407,127410,127414,127417,127420,127462,127465,127491,127497,127500,127504,127508,127514,127517,127520,127523,127526,127529,127532,127577,127581,127584,127587,127591,127595,127624,127627,127632,127635,127638,127641,127644,127648,127652,127655,127657,127660,127664,127667,127671,127674,127677,127680,127684,127688,127694,127704,127707,127710,127713,127716,127719,127842,127850,127858,127896],[10,127272,127268],{"id":127273},"_7-css引入方式与选择器进阶",[47,127275,127277],{"id":127276},"_71-css引入方式","7.1 css引入方式",[76,127279,127281],{"id":127280},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[96,127283,127287],{"className":127284,"code":127285,"language":127286,"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",[102,127288,127289,127297,127304,127316,127329,127334],{"__ignoreMap":22},[105,127290,127291,127293,127295],{"class":107,"line":108},[105,127292,1026],{"class":115},[105,127294,5118],{"class":51285},[105,127296,51292],{"class":115},[105,127298,127299,127302],{"class":107,"line":28},[105,127300,127301],{"class":51285},"  h1",[105,127303,15564],{"class":115},[105,127305,127306,127309,127311,127314],{"class":107,"line":1171},[105,127307,127308],{"class":164},"    color",[105,127310,51422],{"class":115},[105,127312,127313],{"class":164},"blue",[105,127315,1282],{"class":115},[105,127317,127318,127321,127323,127325,127327],{"class":107,"line":1186},[105,127319,127320],{"class":164},"    font-size",[105,127322,51422],{"class":115},[105,127324,916],{"class":164},[105,127326,51477],{"class":111},[105,127328,1282],{"class":115},[105,127330,127331],{"class":107,"line":1192},[105,127332,127333],{"class":115},"  }\n",[105,127335,127336,127338,127340],{"class":107,"line":1206},[105,127337,51770],{"class":115},[105,127339,5118],{"class":51285},[105,127341,51292],{"class":115},[14,127343,127344,26458],{},[265,127345,126625],{},[14,127347,77211,127348,127351,127352,127355],{},[102,127349,127350],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[102,127353,127354],{},"\u003Chead>","标签中",[14,127357,127358],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127360,127361],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[76,127363,127365],{"id":127364},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[96,127367,127369],{"className":127284,"code":127368,"language":127286,"meta":22,"style":22},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[102,127370,127371],{"__ignoreMap":22},[105,127372,127373,127375,127377,127379,127381,127384,127387,127389],{"class":107,"line":108},[105,127374,1026],{"class":115},[105,127376,14],{"class":51285},[105,127378,62611],{"class":1954},[105,127380,161],{"class":115},[105,127382,127383],{"class":220},"\"color: red; font-size: 16px;\"",[105,127385,127386],{"class":115},">这是一个段落\u003C\u002F",[105,127388,14],{"class":51285},[105,127390,51292],{"class":115},[14,127392,127393,26458],{},[265,127394,126625],{},[14,127396,127397],{},"①style其实就是标签的属性",[14,127399,127400],{},"②在双引号中间，写法要符合css规范",[14,127402,127403],{},"③可以控制当前的标签设置样式",[14,127405,127406],{},"④书写繁琐，简单时才用",[14,127408,127409],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[76,127411,127413],{"id":127412},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127415,127416],{},"使用最多，单独建一个css文件，然后html引用",[14,127418,127419],{},"①css文件部分： style.css",[96,127421,127423],{"className":126537,"code":127422,"language":126539,"meta":22,"style":22},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[102,127424,127425,127430,127436,127446,127458],{"__ignoreMap":22},[105,127426,127427],{"class":107,"line":108},[105,127428,127429],{"class":174},"\u002F* style.css *\u002F\n",[105,127431,127432,127434],{"class":107,"line":28},[105,127433,10],{"class":51285},[105,127435,15564],{"class":115},[105,127437,127438,127440,127442,127444],{"class":107,"line":1171},[105,127439,70890],{"class":164},[105,127441,51422],{"class":115},[105,127443,127313],{"class":164},[105,127445,1282],{"class":115},[105,127447,127448,127450,127452,127454,127456],{"class":107,"line":1186},[105,127449,70611],{"class":164},[105,127451,51422],{"class":115},[105,127453,916],{"class":164},[105,127455,51477],{"class":111},[105,127457,1282],{"class":115},[105,127459,127460],{"class":107,"line":1192},[105,127461,1556],{"class":115},[14,127463,127464],{},"②html部分",[96,127466,127468],{"className":127284,"code":127467,"language":127286,"meta":22,"style":22},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[102,127469,127470],{"__ignoreMap":22},[105,127471,127472,127474,127476,127478,127480,127482,127484,127486,127489],{"class":107,"line":108},[105,127473,1026],{"class":115},[105,127475,68990],{"class":51285},[105,127477,68993],{"class":1954},[105,127479,161],{"class":115},[105,127481,68998],{"class":220},[105,127483,61042],{"class":1954},[105,127485,161],{"class":115},[105,127487,127488],{"class":220},"\"style.css\"",[105,127490,51292],{"class":115},[14,127492,127493,127496],{},[102,127494,127495],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127498,127499],{},"ctrl+0回到页面原来大小",[47,127501,127503],{"id":127502},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[76,127505,127507],{"id":127506},"_721-快速生成html","7.2.1 快速生成html",[14,127509,127510,127511],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[102,127512,127513],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127515,127516],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127518,127519],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127521,127522],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127524,127525],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127527,127528],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127530,127531],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[96,127533,127535],{"className":127284,"code":127534,"language":127286,"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",[102,127536,127537,127542,127547,127552,127557,127562,127567,127572],{"__ignoreMap":22},[105,127538,127539],{"class":107,"line":108},[105,127540,127541],{"class":174},"\u003C!-- Emmet 语法示例 -->\n",[105,127543,127544],{"class":107,"line":28},[105,127545,127546],{"class":174},"\u003C!-- div*3        → 生成3个div -->\n",[105,127548,127549],{"class":107,"line":1171},[105,127550,127551],{"class":174},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[105,127553,127554],{"class":107,"line":1186},[105,127555,127556],{"class":174},"\u003C!-- div+p        → 兄弟div和p -->\n",[105,127558,127559],{"class":107,"line":1192},[105,127560,127561],{"class":174},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[105,127563,127564],{"class":107,"line":1206},[105,127565,127566],{"class":174},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[105,127568,127569],{"class":107,"line":1212},[105,127570,127571],{"class":174},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[105,127573,127574],{"class":107,"line":1303},[105,127575,127576],{"class":174},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[76,127578,127580],{"id":127579},"_722-快速生成css","7.2.2 快速生成css",[14,127582,127583],{},"简写开头",[14,127585,127586],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[47,127588,127590],{"id":127589},"_73-css复合选择器","7.3 css复合选择器",[76,127592,127594],{"id":127593},"_731-后代选择器","7.3.1 后代选择器",[96,127596,127598],{"className":126537,"code":127597,"language":126539,"meta":22,"style":22},".parent .child {\n  color: blue;\n}\n",[102,127599,127600,127610,127620],{"__ignoreMap":22},[105,127601,127602,127605,127608],{"class":107,"line":108},[105,127603,127604],{"class":1954},".parent",[105,127606,127607],{"class":1954}," .child",[105,127609,15564],{"class":115},[105,127611,127612,127614,127616,127618],{"class":107,"line":28},[105,127613,70890],{"class":164},[105,127615,51422],{"class":115},[105,127617,127313],{"class":164},[105,127619,1282],{"class":115},[105,127621,127622],{"class":107,"line":1171},[105,127623,1556],{"class":115},[14,127625,127626],{},"元素1 元素2 {样式声明}",[14,127628,127629],{},[265,127630,127631],{},"注意点:",[14,127633,127634],{},"①元素1和元素2中间用空格隔开",[14,127636,127637],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127639,127640],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127642,127643],{},"④元素1和元素2可以是任意基础选择器",[76,127645,127647],{"id":127646},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127649,127650],{},[265,127651,127631],{},[14,127653,127654],{},"①元素1和元素2中间用大于号隔开",[14,127656,127637],{},[14,127658,127659],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[76,127661,127663],{"id":127662},"_733-并集选择器","7.3.3 并集选择器",[14,127665,127666],{},"元素1，元素2 {样式声明}",[14,127668,127669],{},[265,127670,127631],{},[14,127672,127673],{},"①元素1和元素2中间用逗号隔开",[14,127675,127676],{},"②逗号可以理解为和的意思",[14,127678,127679],{},"③并集选择器通常用于集体声明",[76,127681,127683],{"id":127682},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127685,127686],{},[265,127687,127631],{},[14,127689,127690,127691,127693],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68990,127692],{},"－:visited－:hover－:active。",[14,127695,127696,127697,127700,127701,25725],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127698,127699],"hover",{}," 、 ",[127702,127703],"first-child",{},[14,127705,127706],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127708,127709],{},"link对没访问的进行设置",[14,127711,127712],{},"vistied对已访问的进行改变",[14,127714,127715],{},"hover鼠标经过就会变",[14,127717,127718],{},"active常按(点)就会变",[96,127720,127722],{"className":126537,"code":127721,"language":126539,"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",[102,127723,127724,127729,127738,127748,127758,127762,127771,127782,127786,127794,127804,127814,127818,127827,127838],{"__ignoreMap":22},[105,127725,127726],{"class":107,"line":108},[105,127727,127728],{"class":174},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[105,127730,127731,127733,127736],{"class":107,"line":28},[105,127732,354],{"class":51285},[105,127734,127735],{"class":1954},":link",[105,127737,15564],{"class":115},[105,127739,127740,127742,127744,127746],{"class":107,"line":1171},[105,127741,70890],{"class":164},[105,127743,51422],{"class":115},[105,127745,62354],{"class":164},[105,127747,1282],{"class":115},[105,127749,127750,127752,127754,127756],{"class":107,"line":1186},[105,127751,70487],{"class":164},[105,127753,51422],{"class":115},[105,127755,54722],{"class":164},[105,127757,1282],{"class":115},[105,127759,127760],{"class":107,"line":1192},[105,127761,1556],{"class":115},[105,127763,127764,127766,127769],{"class":107,"line":1206},[105,127765,354],{"class":51285},[105,127767,127768],{"class":1954},":visited",[105,127770,15564],{"class":115},[105,127772,127773,127775,127777,127780],{"class":107,"line":1212},[105,127774,70890],{"class":164},[105,127776,51422],{"class":115},[105,127778,127779],{"class":164},"purple",[105,127781,1282],{"class":115},[105,127783,127784],{"class":107,"line":1303},[105,127785,1556],{"class":115},[105,127787,127788,127790,127792],{"class":107,"line":1309},[105,127789,354],{"class":51285},[105,127791,60925],{"class":1954},[105,127793,15564],{"class":115},[105,127795,127796,127798,127800,127802],{"class":107,"line":1321},[105,127797,70890],{"class":164},[105,127799,51422],{"class":115},[105,127801,54874],{"class":164},[105,127803,1282],{"class":115},[105,127805,127806,127808,127810,127812],{"class":107,"line":1603},[105,127807,70487],{"class":164},[105,127809,51422],{"class":115},[105,127811,127151],{"class":164},[105,127813,1282],{"class":115},[105,127815,127816],{"class":107,"line":1608},[105,127817,1556],{"class":115},[105,127819,127820,127822,127825],{"class":107,"line":1614},[105,127821,354],{"class":51285},[105,127823,127824],{"class":1954},":active",[105,127826,15564],{"class":115},[105,127828,127829,127831,127833,127836],{"class":107,"line":1619},[105,127830,70890],{"class":164},[105,127832,51422],{"class":115},[105,127834,127835],{"class":164},"green",[105,127837,1282],{"class":115},[105,127839,127840],{"class":107,"line":1633},[105,127841,1556],{"class":115},[76,127843,127845,127846,127849],{"id":127844},"_735-伪类选择器","7.3.5 ",[127847,127848],"focus",{},"伪类选择器",[14,127851,127852,127854,127855,127857],{},[127847,127853],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[102,127856,126598],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[96,127859,127861],{"className":126537,"code":127860,"language":126539,"meta":22,"style":22},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[102,127862,127863,127871,127882,127892],{"__ignoreMap":22},[105,127864,127865,127867,127869],{"class":107,"line":108},[105,127866,53806],{"class":51285},[105,127868,61885],{"class":1954},[105,127870,15564],{"class":115},[105,127872,127873,127876,127878,127880],{"class":107,"line":28},[105,127874,127875],{"class":164},"  border-color",[105,127877,51422],{"class":115},[105,127879,54874],{"class":164},[105,127881,1282],{"class":115},[105,127883,127884,127886,127888,127890],{"class":107,"line":1171},[105,127885,70783],{"class":164},[105,127887,51422],{"class":115},[105,127889,54722],{"class":164},[105,127891,1282],{"class":115},[105,127893,127894],{"class":107,"line":1186},[105,127895,1556],{"class":115},[5118,127897,127898],{},"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":28,"depth":28,"links":127900},[127901,127906,127910],{"id":127276,"depth":28,"text":127277,"children":127902},[127903,127904,127905],{"id":127280,"depth":1171,"text":127281},{"id":127364,"depth":1171,"text":127365},{"id":127412,"depth":1171,"text":127413},{"id":127502,"depth":28,"text":127503,"children":127907},[127908,127909],{"id":127506,"depth":1171,"text":127507},{"id":127579,"depth":1171,"text":127580},{"id":127589,"depth":28,"text":127590,"children":127911},[127912,127913,127914,127915,127916],{"id":127593,"depth":1171,"text":127594},{"id":127646,"depth":1171,"text":127647},{"id":127662,"depth":1171,"text":127663},{"id":127682,"depth":1171,"text":127683},{"id":127844,"depth":1171,"text":127917},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127268,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127924,"title":127925,"body":127926,"description":23369,"extension":30,"meta":129849,"navigation":32,"path":129850,"seo":129851,"stem":129852,"__hash__":129853},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127927,"toc":129823},[127928,127931,127935,127944,127948,127974,127979,127982,127985,127988,127991,127995,127998,128008,128016,128020,128055,128060,128063,128066,128069,128072,128076,128079,128088,128092,128105,128110,128113,128116,128119,128123,128126,128130,128133,128188,128191,128222,128225,128279,128283,128286,128452,128575,128578,128581,128584,128587,128591,128594,128598,128601,128604,128608,128611,128642,128669,128697,128700,128704,128730,128773,128777,128871,128874,128901,128904,128907,128910,128913,128916,128919,128922,128925,128928,128932,128989,129016,129020,129068,129072,129113,129115,129118,129121,129124,129127,129131,129223,129226,129229,129232,129236,129359,129560,129564,129568,129571,129574,129577,129581,129584,129587,129612,129615,129618,129621,129624,129627,129631,129639,129701,129704,129762,129765,129768,129771,129774,129777,129780,129783,129820],[10,127929,127925],{"id":127930},"_8-css显示模式与背景特性",[47,127932,127934],{"id":127933},"_81-css元素显示模式","8.1 css元素显示模式",[14,127936,127937,127938,127940,127941,127943],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[102,127939,126148],{},"自己占一行，比如一行可以放多个",[102,127942,126151],{},"，HTML 元素一般分为块元素和行内元素两种类型",[76,127945,127947],{"id":127946},"_811-块元素","8.1.1 块元素",[14,127949,127950,127951,127953,127954,328,127957,328,127959,328,127961,328,127964,328,127967,127970,127971,127973],{},"常见的块元素有",[102,127952,126052],{},"~",[102,127955,127956],{},"\u003Ch6>",[102,127958,126078],{},[102,127960,126148],{},[102,127962,127963],{},"\u003Cul>",[102,127965,127966],{},"\u003Col>",[102,127968,127969],{},"\u003Cli>","等，其中 ",[102,127972,126148],{}," 标签是最典型的块元素",[14,127975,127976],{},[265,127977,127978],{},"块级元素的特点：",[14,127980,127981],{},"① 比较霸道，自己独占一行。",[14,127983,127984],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,127986,127987],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,127989,127990],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,127992,127993],{},[265,127994,145],{},[14,127996,127997],{},"①文字类的元素内不能使用块级元素",[14,127999,77234,128000,128002,128003,128005,128006],{},[102,128001,126078],{}," 标签主要用于存放文字，因此 ",[102,128004,126078],{}," 里面不能放块级元素，特别是不能放",[102,128007,126148],{},[14,128009,128010,128011,127953,128013,128015],{},"⑥同理， ",[102,128012,126052],{},[102,128014,127956],{},"等都是文字类块级标签，里面也不能放其他块级元素",[76,128017,128019],{"id":128018},"_812-行内元素","8.1.2 行内元素",[14,128021,128022,128023,328,128025,328,128028,328,128031,328,128034,328,128037,328,128040,328,128043,328,128046,328,128049,128051,128052,128054],{},"常见的行内元素有 ",[102,128024,126310],{},[102,128026,128027],{},"\u003Cstrong>",[102,128029,128030],{},"\u003Cb>",[102,128032,128033],{},"\u003Cem>",[102,128035,128036],{},"\u003Ci>",[102,128038,128039],{},"\u003Cdel>",[102,128041,128042],{},"\u003Cs>",[102,128044,128045],{},"\u003Cins>",[102,128047,128048],{},"\u003Cu>",[102,128050,126151],{}," 等，其中 ",[102,128053,126151],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128056,128057],{},[265,128058,128059],{},"特点：",[14,128061,128062],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128064,128065],{},"② 高、宽直接设置是无效的。",[14,128067,128068],{},"③ 默认宽度就是它本身内容的宽度。",[14,128070,128071],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128073,128074],{},[265,128075,145],{},[14,128077,128078],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128080,128081,128082,128084,128085,128087],{},"②特殊情况链接 ",[102,128083,126310],{}," 里面可以放块级元素，但是给 ",[102,128086,126310],{}," 转换一下块级模式最安全",[76,128089,128091],{"id":128090},"_813-行内块元素","8.1.3 行内块元素",[14,128093,128094,128095,328,128098,328,128101,128104],{},"在行内元素中有几个特殊的标签 —— ",[102,128096,128097],{},"\u003Cimg \u002F>",[102,128099,128100],{},"\u003Cinput \u002F>",[102,128102,128103],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128106,128107],{},[265,128108,128109],{},"行内块元素的特点：",[14,128111,128112],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128114,128115],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128117,128118],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[76,128120,128122],{"id":128121},"_814-总结","8.1.4 总结",[20,128124],{"style":126393,"src":128125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[76,128127,128129],{"id":128128},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128131,128132],{},"①转换为块元素：display:block;",[96,128134,128136],{"className":126537,"code":128135,"language":126539,"meta":22,"style":22},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[102,128137,128138,128143,128149,128160,128172,128184],{"__ignoreMap":22},[105,128139,128140],{"class":107,"line":108},[105,128141,128142],{"class":174},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[105,128144,128145,128147],{"class":107,"line":28},[105,128146,354],{"class":51285},[105,128148,15564],{"class":115},[105,128150,128151,128154,128156,128158],{"class":107,"line":1171},[105,128152,128153],{"class":164},"  display",[105,128155,51422],{"class":115},[105,128157,60854],{"class":164},[105,128159,1282],{"class":115},[105,128161,128162,128164,128166,128168,128170],{"class":107,"line":1186},[105,128163,70553],{"class":164},[105,128165,51422],{"class":115},[105,128167,427],{"class":164},[105,128169,51477],{"class":111},[105,128171,1282],{"class":115},[105,128173,128174,128176,128178,128180,128182],{"class":107,"line":1192},[105,128175,70773],{"class":164},[105,128177,51422],{"class":115},[105,128179,517],{"class":164},[105,128181,51477],{"class":111},[105,128183,1282],{"class":115},[105,128185,128186],{"class":107,"line":1206},[105,128187,1556],{"class":115},[14,128189,128190],{},"②转换为行内元素：display:inline;",[96,128192,128194],{"className":126537,"code":128193,"language":126539,"meta":22,"style":22},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[102,128195,128196,128201,128207,128218],{"__ignoreMap":22},[105,128197,128198],{"class":107,"line":108},[105,128199,128200],{"class":174},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[105,128202,128203,128205],{"class":107,"line":28},[105,128204,51596],{"class":51285},[105,128206,15564],{"class":115},[105,128208,128209,128211,128213,128216],{"class":107,"line":1171},[105,128210,128153],{"class":164},[105,128212,51422],{"class":115},[105,128214,128215],{"class":164},"inline",[105,128217,1282],{"class":115},[105,128219,128220],{"class":107,"line":1186},[105,128221,1556],{"class":115},[14,128223,128224],{},"③转换为行内块：display:inline-block;",[96,128226,128228],{"className":126537,"code":128227,"language":126539,"meta":22,"style":22},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[102,128229,128230,128235,128241,128251,128263,128275],{"__ignoreMap":22},[105,128231,128232],{"class":107,"line":108},[105,128233,128234],{"class":174},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[105,128236,128237,128239],{"class":107,"line":28},[105,128238,105],{"class":51285},[105,128240,15564],{"class":115},[105,128242,128243,128245,128247,128249],{"class":107,"line":1171},[105,128244,128153],{"class":164},[105,128246,51422],{"class":115},[105,128248,72368],{"class":164},[105,128250,1282],{"class":115},[105,128252,128253,128255,128257,128259,128261],{"class":107,"line":1186},[105,128254,70553],{"class":164},[105,128256,51422],{"class":115},[105,128258,728],{"class":164},[105,128260,51477],{"class":111},[105,128262,1282],{"class":115},[105,128264,128265,128267,128269,128271,128273],{"class":107,"line":1192},[105,128266,70773],{"class":164},[105,128268,51422],{"class":115},[105,128270,1067],{"class":164},[105,128272,51477],{"class":111},[105,128274,1282],{"class":115},[105,128276,128277],{"class":107,"line":1206},[105,128278,1556],{"class":115},[76,128280,128282],{"id":128281},"_816-小米侧边栏","8.1.6 小米侧边栏",[20,128284],{"style":126393,"src":128285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[96,128287,128289],{"className":127284,"code":128288,"language":127286,"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",[102,128290,128291,128296,128311,128330,128349,128368,128387,128406,128425,128444],{"__ignoreMap":22},[105,128292,128293],{"class":107,"line":108},[105,128294,128295],{"class":174},"\u003C!-- 小米侧边栏案例 -->\n",[105,128297,128298,128300,128302,128304,128306,128309],{"class":107,"line":28},[105,128299,1026],{"class":115},[105,128301,51596],{"class":51285},[105,128303,53471],{"class":1954},[105,128305,161],{"class":115},[105,128307,128308],{"class":220},"\"sidebar\"",[105,128310,51292],{"class":115},[105,128312,128313,128315,128317,128319,128321,128323,128326,128328],{"class":107,"line":1171},[105,128314,52129],{"class":115},[105,128316,354],{"class":51285},[105,128318,61042],{"class":1954},[105,128320,161],{"class":115},[105,128322,61047],{"class":220},[105,128324,128325],{"class":115},">手机 电话卡\u003C\u002F",[105,128327,354],{"class":51285},[105,128329,51292],{"class":115},[105,128331,128332,128334,128336,128338,128340,128342,128345,128347],{"class":107,"line":1186},[105,128333,52129],{"class":115},[105,128335,354],{"class":51285},[105,128337,61042],{"class":1954},[105,128339,161],{"class":115},[105,128341,61047],{"class":220},[105,128343,128344],{"class":115},">电视 盒子\u003C\u002F",[105,128346,354],{"class":51285},[105,128348,51292],{"class":115},[105,128350,128351,128353,128355,128357,128359,128361,128364,128366],{"class":107,"line":1192},[105,128352,52129],{"class":115},[105,128354,354],{"class":51285},[105,128356,61042],{"class":1954},[105,128358,161],{"class":115},[105,128360,61047],{"class":220},[105,128362,128363],{"class":115},">笔记本 平板\u003C\u002F",[105,128365,354],{"class":51285},[105,128367,51292],{"class":115},[105,128369,128370,128372,128374,128376,128378,128380,128383,128385],{"class":107,"line":1206},[105,128371,52129],{"class":115},[105,128373,354],{"class":51285},[105,128375,61042],{"class":1954},[105,128377,161],{"class":115},[105,128379,61047],{"class":220},[105,128381,128382],{"class":115},">出行 穿戴\u003C\u002F",[105,128384,354],{"class":51285},[105,128386,51292],{"class":115},[105,128388,128389,128391,128393,128395,128397,128399,128402,128404],{"class":107,"line":1212},[105,128390,52129],{"class":115},[105,128392,354],{"class":51285},[105,128394,61042],{"class":1954},[105,128396,161],{"class":115},[105,128398,61047],{"class":220},[105,128400,128401],{"class":115},">智能 路由器\u003C\u002F",[105,128403,354],{"class":51285},[105,128405,51292],{"class":115},[105,128407,128408,128410,128412,128414,128416,128418,128421,128423],{"class":107,"line":1303},[105,128409,52129],{"class":115},[105,128411,354],{"class":51285},[105,128413,61042],{"class":1954},[105,128415,161],{"class":115},[105,128417,61047],{"class":220},[105,128419,128420],{"class":115},">健康 儿童\u003C\u002F",[105,128422,354],{"class":51285},[105,128424,51292],{"class":115},[105,128426,128427,128429,128431,128433,128435,128437,128440,128442],{"class":107,"line":1309},[105,128428,52129],{"class":115},[105,128430,354],{"class":51285},[105,128432,61042],{"class":1954},[105,128434,161],{"class":115},[105,128436,61047],{"class":220},[105,128438,128439],{"class":115},">耳机 音响\u003C\u002F",[105,128441,354],{"class":51285},[105,128443,51292],{"class":115},[105,128445,128446,128448,128450],{"class":107,"line":1321},[105,128447,51770],{"class":115},[105,128449,51596],{"class":51285},[105,128451,51292],{"class":115},[96,128453,128455],{"className":126537,"code":128454,"language":126539,"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",[102,128456,128457,128466,128476,128489,128501,128513,128525,128535,128546,128550,128560,128571],{"__ignoreMap":22},[105,128458,128459,128462,128464],{"class":107,"line":108},[105,128460,128461],{"class":1954},".sidebar",[105,128463,1390],{"class":51285},[105,128465,15564],{"class":115},[105,128467,128468,128470,128472,128474],{"class":107,"line":28},[105,128469,128153],{"class":164},[105,128471,51422],{"class":115},[105,128473,60854],{"class":164},[105,128475,1282],{"class":115},[105,128477,128478,128480,128482,128485,128487],{"class":107,"line":1171},[105,128479,70553],{"class":164},[105,128481,51422],{"class":115},[105,128483,128484],{"class":164},"234",[105,128486,51477],{"class":111},[105,128488,1282],{"class":115},[105,128490,128491,128493,128495,128497,128499],{"class":107,"line":1186},[105,128492,70773],{"class":164},[105,128494,51422],{"class":115},[105,128496,568],{"class":164},[105,128498,51477],{"class":111},[105,128500,1282],{"class":115},[105,128502,128503,128505,128507,128509,128511],{"class":107,"line":1192},[105,128504,127221],{"class":164},[105,128506,51422],{"class":115},[105,128508,568],{"class":164},[105,128510,51477],{"class":111},[105,128512,1282],{"class":115},[105,128514,128515,128517,128519,128521,128523],{"class":107,"line":1206},[105,128516,70808],{"class":164},[105,128518,51422],{"class":115},[105,128520,1067],{"class":164},[105,128522,51477],{"class":111},[105,128524,1282],{"class":115},[105,128526,128527,128529,128531,128533],{"class":107,"line":1212},[105,128528,70890],{"class":164},[105,128530,51422],{"class":115},[105,128532,60827],{"class":164},[105,128534,1282],{"class":115},[105,128536,128537,128539,128541,128544],{"class":107,"line":1303},[105,128538,70863],{"class":164},[105,128540,51422],{"class":115},[105,128542,128543],{"class":164},"#55585a",[105,128545,1282],{"class":115},[105,128547,128548],{"class":107,"line":1309},[105,128549,1556],{"class":115},[105,128551,128552,128554,128556,128558],{"class":107,"line":1321},[105,128553,128461],{"class":1954},[105,128555,1390],{"class":51285},[105,128557,60925],{"class":1954},[105,128559,15564],{"class":115},[105,128561,128562,128564,128566,128569],{"class":107,"line":1603},[105,128563,70863],{"class":164},[105,128565,51422],{"class":115},[105,128567,128568],{"class":164},"#ff6700",[105,128570,1282],{"class":115},[105,128572,128573],{"class":107,"line":1608},[105,128574,1556],{"class":115},[20,128576],{"style":126393,"src":128577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128579,128580],{},"行高=盒子高度：实现文字的垂直居中",[14,128582,128583],{},"原理讲解：",[20,128585],{"style":126393,"src":128586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[47,128588,128590],{"id":128589},"_82-css背景","8.2 css背景",[14,128592,128593],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[76,128595,128597],{"id":128596},"_821-背景颜色","8.2.1 背景颜色",[14,128599,128600],{},"background-color:颜色值;",[14,128602,128603],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[76,128605,128607],{"id":128606},"_822-背景图片","8.2.2 背景图片",[14,128609,128610],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[96,128612,128614],{"className":126537,"code":128613,"language":126539,"meta":22,"style":22},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[102,128615,128616,128622,128638],{"__ignoreMap":22},[105,128617,128618,128620],{"class":107,"line":108},[105,128619,51596],{"class":51285},[105,128621,15564],{"class":115},[105,128623,128624,128627,128629,128631,128633,128636],{"class":107,"line":28},[105,128625,128626],{"class":164},"  background-image",[105,128628,51422],{"class":115},[105,128630,61711],{"class":164},[105,128632,116],{"class":115},[105,128634,128635],{"class":5208},"images\u002Fbg.png",[105,128637,2710],{"class":115},[105,128639,128640],{"class":107,"line":1171},[105,128641,1556],{"class":115},[253,128643,128644,128653],{},[256,128645,128646],{},[259,128647,128648,128651],{},[262,128649,128650],{"align":23729},"参数值",[262,128652,102681],{"align":23729},[300,128654,128655,128662],{},[259,128656,128657,128659],{},[305,128658,54722],{"align":23729},[305,128660,128661],{"align":23729},"无背景图（默认的）",[259,128663,128664,128666],{},[305,128665,61711],{"align":23729},[305,128667,128668],{"align":23729},"使用绝对或相对地址指定背景图像",[96,128670,128671],{"className":126537,"code":128613,"language":126539,"meta":22,"style":22},[102,128672,128673,128679,128693],{"__ignoreMap":22},[105,128674,128675,128677],{"class":107,"line":108},[105,128676,51596],{"class":51285},[105,128678,15564],{"class":115},[105,128680,128681,128683,128685,128687,128689,128691],{"class":107,"line":28},[105,128682,128626],{"class":164},[105,128684,51422],{"class":115},[105,128686,61711],{"class":164},[105,128688,116],{"class":115},[105,128690,128635],{"class":5208},[105,128692,2710],{"class":115},[105,128694,128695],{"class":107,"line":1171},[105,128696,1556],{"class":115},[14,128698,128699],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[76,128701,128703],{"id":128702},"_823-背景平铺","8.2.3 背景平铺",[96,128705,128707],{"className":126537,"code":128706,"language":126539,"meta":22,"style":22},"div {\n  background-repeat: no-repeat;\n}\n",[102,128708,128709,128715,128726],{"__ignoreMap":22},[105,128710,128711,128713],{"class":107,"line":108},[105,128712,51596],{"class":51285},[105,128714,15564],{"class":115},[105,128716,128717,128720,128722,128724],{"class":107,"line":28},[105,128718,128719],{"class":164},"  background-repeat",[105,128721,51422],{"class":115},[105,128723,61721],{"class":164},[105,128725,1282],{"class":115},[105,128727,128728],{"class":107,"line":1171},[105,128729,1556],{"class":115},[253,128731,128732,128740],{},[256,128733,128734],{},[259,128735,128736,128738],{},[262,128737,128650],{"align":23729},[262,128739,102681],{"align":23729},[300,128741,128742,128750,128757,128765],{},[259,128743,128744,128747],{},[305,128745,128746],{"align":23729},"repeat",[305,128748,128749],{"align":23729},"背景图像在纵向和横向上平铺（默认的）",[259,128751,128752,128754],{},[305,128753,61721],{"align":23729},[305,128755,128756],{"align":23729},"背景图像不平铺",[259,128758,128759,128762],{},[305,128760,128761],{"align":23729},"repeat-x",[305,128763,128764],{"align":23729},"背景图像在横向上平铺",[259,128766,128767,128770],{},[305,128768,128769],{"align":23729},"repeat-y",[305,128771,128772],{"align":23729},"背景图像在纵向平铺",[76,128774,128776],{"id":128775},"_824-背景图片位置","8.2.4 背景图片位置",[96,128778,128780],{"className":126537,"code":128779,"language":126539,"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",[102,128781,128782,128787,128793,128807,128811,128816,128822,128838,128842,128847,128853,128867],{"__ignoreMap":22},[105,128783,128784],{"class":107,"line":108},[105,128785,128786],{"class":174},"\u002F* 方位名词 *\u002F\n",[105,128788,128789,128791],{"class":107,"line":28},[105,128790,51596],{"class":51285},[105,128792,15564],{"class":115},[105,128794,128795,128798,128800,128802,128805],{"class":107,"line":1171},[105,128796,128797],{"class":164},"  background-position",[105,128799,51422],{"class":115},[105,128801,51577],{"class":164},[105,128803,128804],{"class":164}," top",[105,128806,1282],{"class":115},[105,128808,128809],{"class":107,"line":1186},[105,128810,1556],{"class":115},[105,128812,128813],{"class":107,"line":1192},[105,128814,128815],{"class":174},"\u002F* 精确单位 *\u002F\n",[105,128817,128818,128820],{"class":107,"line":1206},[105,128819,51596],{"class":51285},[105,128821,15564],{"class":115},[105,128823,128824,128826,128828,128830,128832,128834,128836],{"class":107,"line":1212},[105,128825,128797],{"class":164},[105,128827,51422],{"class":115},[105,128829,816],{"class":164},[105,128831,51477],{"class":111},[105,128833,57489],{"class":164},[105,128835,51477],{"class":111},[105,128837,1282],{"class":115},[105,128839,128840],{"class":107,"line":1303},[105,128841,1556],{"class":115},[105,128843,128844],{"class":107,"line":1309},[105,128845,128846],{"class":174},"\u002F* 混合单位 *\u002F\n",[105,128848,128849,128851],{"class":107,"line":1321},[105,128850,51596],{"class":51285},[105,128852,15564],{"class":115},[105,128854,128855,128857,128859,128861,128863,128865],{"class":107,"line":1603},[105,128856,128797],{"class":164},[105,128858,51422],{"class":115},[105,128860,816],{"class":164},[105,128862,51477],{"class":111},[105,128864,17136],{"class":164},[105,128866,1282],{"class":115},[105,128868,128869],{"class":107,"line":1608},[105,128870,1556],{"class":115},[14,128872,128873],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[253,128875,128876,128884],{},[256,128877,128878],{},[259,128879,128880,128882],{},[262,128881,128650],{"align":23729},[262,128883,25854],{"align":23729},[300,128885,128886,128893],{},[259,128887,128888,128890],{},[305,128889,51953],{"align":23729},[305,128891,128892],{"align":23729},"百分数|由浮点数和单位标识符组成的长度值",[259,128894,128895,128898],{},[305,128896,128897],{"align":23729},"position",[305,128899,128900],{"align":23729},"top|center|bottom|left|center|right 方位名词",[14,128902,128903],{},"其他说明：",[14,128905,128906],{},"①参数是方位名词",[14,128908,128909],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128911,128912],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128914,128915],{},"②参数是精确单位",[14,128917,128918],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128920,128921],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128923,128924],{},"③参数是混合单位",[14,128926,128927],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[76,128929,128931],{"id":128930},"_825-背景图片固定","8.2.5 背景图片固定",[96,128933,128935],{"className":126537,"code":128934,"language":126539,"meta":22,"style":22},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[102,128936,128937,128942,128948,128960,128964,128969,128975,128985],{"__ignoreMap":22},[105,128938,128939],{"class":107,"line":108},[105,128940,128941],{"class":174},"\u002F* 背景滚动（默认） *\u002F\n",[105,128943,128944,128946],{"class":107,"line":28},[105,128945,51596],{"class":51285},[105,128947,15564],{"class":115},[105,128949,128950,128953,128955,128958],{"class":107,"line":1171},[105,128951,128952],{"class":164},"  background-attachment",[105,128954,51422],{"class":115},[105,128956,128957],{"class":164},"scroll",[105,128959,1282],{"class":115},[105,128961,128962],{"class":107,"line":1186},[105,128963,1556],{"class":115},[105,128965,128966],{"class":107,"line":1192},[105,128967,128968],{"class":174},"\u002F* 背景固定 *\u002F\n",[105,128970,128971,128973],{"class":107,"line":1206},[105,128972,51596],{"class":51285},[105,128974,15564],{"class":115},[105,128976,128977,128979,128981,128983],{"class":107,"line":1212},[105,128978,128952],{"class":164},[105,128980,51422],{"class":115},[105,128982,86218],{"class":164},[105,128984,1282],{"class":115},[105,128986,128987],{"class":107,"line":1303},[105,128988,1556],{"class":115},[253,128990,128991,129000],{},[256,128992,128993],{},[259,128994,128995,128998],{},[262,128996,128997],{"align":23729},"参数",[262,128999,102681],{"align":23729},[300,129001,129002,129009],{},[259,129003,129004,129006],{},[305,129005,128957],{"align":23729},[305,129007,129008],{"align":23729},"背景图像是随对象内容滚动",[259,129010,129011,129013],{},[305,129012,86218],{"align":23729},[305,129014,129015],{"align":23729},"背景图像固定",[76,129017,129019],{"id":129018},"_826-背景样式合写","8.2.6 背景样式合写",[96,129021,129023],{"className":126537,"code":129022,"language":126539,"meta":22,"style":22},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[102,129024,129025,129030,129036,129064],{"__ignoreMap":22},[105,129026,129027],{"class":107,"line":108},[105,129028,129029],{"class":174},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[105,129031,129032,129034],{"class":107,"line":28},[105,129033,51596],{"class":51285},[105,129035,15564],{"class":115},[105,129037,129038,129040,129042,129044,129047,129049,129051,129053,129055,129058,129060,129062],{"class":107,"line":1171},[105,129039,70596],{"class":164},[105,129041,51422],{"class":115},[105,129043,60827],{"class":164},[105,129045,129046],{"class":164}," url",[105,129048,116],{"class":115},[105,129050,128635],{"class":5208},[105,129052,13706],{"class":115},[105,129054,61721],{"class":164},[105,129056,129057],{"class":164}," fixed",[105,129059,17136],{"class":164},[105,129061,128804],{"class":164},[105,129063,1282],{"class":115},[105,129065,129066],{"class":107,"line":1186},[105,129067,1556],{"class":115},[76,129069,129071],{"id":129070},"_827-背景色半透明","8.2.7 背景色半透明",[96,129073,129075],{"className":126537,"code":129074,"language":126539,"meta":22,"style":22},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[102,129076,129077,129083,129109],{"__ignoreMap":22},[105,129078,129079,129081],{"class":107,"line":108},[105,129080,51596],{"class":51285},[105,129082,15564],{"class":115},[105,129084,129085,129087,129089,129091,129093,129095,129097,129099,129101,129103,129105,129107],{"class":107,"line":28},[105,129086,70596],{"class":164},[105,129088,51422],{"class":115},[105,129090,55095],{"class":164},[105,129092,116],{"class":115},[105,129094,307],{"class":164},[105,129096,12427],{"class":115},[105,129098,307],{"class":164},[105,129100,12427],{"class":115},[105,129102,307],{"class":164},[105,129104,12427],{"class":115},[105,129106,100506],{"class":164},[105,129108,2710],{"class":115},[105,129110,129111],{"class":107,"line":1171},[105,129112,1556],{"class":115},[14,129114,99381],{},[14,129116,129117],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129119,129120],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129122,129123],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129125,129126],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[76,129128,129130],{"id":129129},"_828-总结","8.2.8 总结",[253,129132,129133,129144],{},[256,129134,129135],{},[259,129136,129137,129140,129142],{},[262,129138,129139],{"align":23729},"属性",[262,129141,102681],{"align":23729},[262,129143,268],{"align":23729},[300,129145,129146,129157,129168,129179,129190,129201,129212],{},[259,129147,129148,129151,129154],{},[305,129149,129150],{"align":23729},"background-color",[305,129152,129153],{"align":23729},"背景颜色",[305,129155,129156],{"align":23729},"预定义的颜色值\u002F十六进制\u002FRGB代码",[259,129158,129159,129162,129165],{},[305,129160,129161],{"align":23729},"background-image",[305,129163,129164],{"align":23729},"背景图片",[305,129166,129167],{"align":23729},"url(图片路径)",[259,129169,129170,129173,129176],{},[305,129171,129172],{"align":23729},"background-repeat",[305,129174,129175],{"align":23729},"是否平铺",[305,129177,129178],{"align":23729},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[259,129180,129181,129184,129187],{},[305,129182,129183],{"align":23729},"background-position",[305,129185,129186],{"align":23729},"背景位置",[305,129188,129189],{"align":23729},"length\u002Fposition 分别是x和y坐标",[259,129191,129192,129195,129198],{},[305,129193,129194],{"align":23729},"background-attachment",[305,129196,129197],{"align":23729},"背景附着",[305,129199,129200],{"align":23729},"scroll(背景滚动) \u002Ffixed (背景固定)",[259,129202,129203,129206,129209],{},[305,129204,129205],{"align":23729},"背景简写",[305,129207,129208],{"align":23729},"书写更简单",[305,129210,129211],{"align":23729},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[259,129213,129214,129217,129220],{},[305,129215,129216],{"align":23729},"背景半透明",[305,129218,129219],{"align":23729},"背景颜色半透明",[305,129221,129222],{"align":23729},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129224,129225],{},"颜色渐变：",[20,129227],{"style":126393,"src":129228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[20,129230],{"style":126393,"src":129231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[76,129233,129235],{"id":129234},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[96,129237,129239],{"className":127284,"code":129238,"language":127286,"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",[102,129240,129241,129256,129275,129294,129313,129332,129351],{"__ignoreMap":22},[105,129242,129243,129245,129247,129249,129251,129254],{"class":107,"line":108},[105,129244,1026],{"class":115},[105,129246,51596],{"class":51285},[105,129248,53471],{"class":1954},[105,129250,161],{"class":115},[105,129252,129253],{"class":220},"\"nav\"",[105,129255,51292],{"class":115},[105,129257,129258,129260,129262,129264,129266,129268,129271,129273],{"class":107,"line":28},[105,129259,52129],{"class":115},[105,129261,354],{"class":51285},[105,129263,61042],{"class":1954},[105,129265,161],{"class":115},[105,129267,61047],{"class":220},[105,129269,129270],{"class":115},">五彩导航1\u003C\u002F",[105,129272,354],{"class":51285},[105,129274,51292],{"class":115},[105,129276,129277,129279,129281,129283,129285,129287,129290,129292],{"class":107,"line":1171},[105,129278,52129],{"class":115},[105,129280,354],{"class":51285},[105,129282,61042],{"class":1954},[105,129284,161],{"class":115},[105,129286,61047],{"class":220},[105,129288,129289],{"class":115},">五彩导航2\u003C\u002F",[105,129291,354],{"class":51285},[105,129293,51292],{"class":115},[105,129295,129296,129298,129300,129302,129304,129306,129309,129311],{"class":107,"line":1186},[105,129297,52129],{"class":115},[105,129299,354],{"class":51285},[105,129301,61042],{"class":1954},[105,129303,161],{"class":115},[105,129305,61047],{"class":220},[105,129307,129308],{"class":115},">五彩导航3\u003C\u002F",[105,129310,354],{"class":51285},[105,129312,51292],{"class":115},[105,129314,129315,129317,129319,129321,129323,129325,129328,129330],{"class":107,"line":1192},[105,129316,52129],{"class":115},[105,129318,354],{"class":51285},[105,129320,61042],{"class":1954},[105,129322,161],{"class":115},[105,129324,61047],{"class":220},[105,129326,129327],{"class":115},">五彩导航4\u003C\u002F",[105,129329,354],{"class":51285},[105,129331,51292],{"class":115},[105,129333,129334,129336,129338,129340,129342,129344,129347,129349],{"class":107,"line":1206},[105,129335,52129],{"class":115},[105,129337,354],{"class":51285},[105,129339,61042],{"class":1954},[105,129341,161],{"class":115},[105,129343,61047],{"class":220},[105,129345,129346],{"class":115},">五彩导航5\u003C\u002F",[105,129348,354],{"class":51285},[105,129350,51292],{"class":115},[105,129352,129353,129355,129357],{"class":107,"line":1212},[105,129354,51770],{"class":115},[105,129356,51596],{"class":51285},[105,129358,51292],{"class":115},[96,129360,129362],{"className":126537,"code":129361,"language":126539,"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",[102,129363,129364,129373,129383,129395,129407,129417,129429,129439,129443,129468,129491,129514,129537],{"__ignoreMap":22},[105,129365,129366,129369,129371],{"class":107,"line":108},[105,129367,129368],{"class":1954},".nav",[105,129370,1390],{"class":51285},[105,129372,15564],{"class":115},[105,129374,129375,129377,129379,129381],{"class":107,"line":28},[105,129376,128153],{"class":164},[105,129378,51422],{"class":115},[105,129380,72368],{"class":164},[105,129382,1282],{"class":115},[105,129384,129385,129387,129389,129391,129393],{"class":107,"line":1171},[105,129386,70553],{"class":164},[105,129388,51422],{"class":115},[105,129390,933],{"class":164},[105,129392,51477],{"class":111},[105,129394,1282],{"class":115},[105,129396,129397,129399,129401,129403,129405],{"class":107,"line":1186},[105,129398,70773],{"class":164},[105,129400,51422],{"class":115},[105,129402,972],{"class":164},[105,129404,51477],{"class":111},[105,129406,1282],{"class":115},[105,129408,129409,129411,129413,129415],{"class":107,"line":1192},[105,129410,70511],{"class":164},[105,129412,51422],{"class":115},[105,129414,51577],{"class":164},[105,129416,1282],{"class":115},[105,129418,129419,129421,129423,129425,129427],{"class":107,"line":1206},[105,129420,127221],{"class":164},[105,129422,51422],{"class":115},[105,129424,972],{"class":164},[105,129426,51477],{"class":111},[105,129428,1282],{"class":115},[105,129430,129431,129433,129435,129437],{"class":107,"line":1212},[105,129432,70890],{"class":164},[105,129434,51422],{"class":115},[105,129436,60827],{"class":164},[105,129438,1282],{"class":115},[105,129440,129441],{"class":107,"line":1303},[105,129442,1556],{"class":115},[105,129444,129445,129447,129449,129452,129454,129456,129459,129461,129463,129465],{"class":107,"line":1309},[105,129446,129368],{"class":1954},[105,129448,1390],{"class":51285},[105,129450,129451],{"class":1954},":nth-child",[105,129453,116],{"class":115},[105,129455,333],{"class":164},[105,129457,129458],{"class":115},") { ",[105,129460,129150],{"class":164},[105,129462,51422],{"class":115},[105,129464,128568],{"class":164},[105,129466,129467],{"class":115},"; }\n",[105,129469,129470,129472,129474,129476,129478,129480,129482,129484,129486,129489],{"class":107,"line":1321},[105,129471,129368],{"class":1954},[105,129473,1390],{"class":51285},[105,129475,129451],{"class":1954},[105,129477,116],{"class":115},[105,129479,193],{"class":164},[105,129481,129458],{"class":115},[105,129483,129150],{"class":164},[105,129485,51422],{"class":115},[105,129487,129488],{"class":164},"#ff0000",[105,129490,129467],{"class":115},[105,129492,129493,129495,129497,129499,129501,129503,129505,129507,129509,129512],{"class":107,"line":1603},[105,129494,129368],{"class":1954},[105,129496,1390],{"class":51285},[105,129498,129451],{"class":1954},[105,129500,116],{"class":115},[105,129502,187],{"class":164},[105,129504,129458],{"class":115},[105,129506,129150],{"class":164},[105,129508,51422],{"class":115},[105,129510,129511],{"class":164},"#00a4ff",[105,129513,129467],{"class":115},[105,129515,129516,129518,129520,129522,129524,129526,129528,129530,129532,129535],{"class":107,"line":1608},[105,129517,129368],{"class":1954},[105,129519,1390],{"class":51285},[105,129521,129451],{"class":1954},[105,129523,116],{"class":115},[105,129525,409],{"class":164},[105,129527,129458],{"class":115},[105,129529,129150],{"class":164},[105,129531,51422],{"class":115},[105,129533,129534],{"class":164},"#ff00ff",[105,129536,129467],{"class":115},[105,129538,129539,129541,129543,129545,129547,129549,129551,129553,129555,129558],{"class":107,"line":1614},[105,129540,129368],{"class":1954},[105,129542,1390],{"class":51285},[105,129544,129451],{"class":1954},[105,129546,116],{"class":115},[105,129548,435],{"class":164},[105,129550,129458],{"class":115},[105,129552,129150],{"class":164},[105,129554,51422],{"class":115},[105,129556,129557],{"class":164},"#00ff00",[105,129559,129467],{"class":115},[47,129561,129563],{"id":129562},"_83-css三大特性","8.3 css三大特性",[76,129565,129567],{"id":129566},"_831-层叠性","8.3.1 层叠性",[14,129569,129570],{},"为了解决样式冲突问题",[14,129572,129573],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129575,129576],{},"   ②样式不冲突，不会层叠",[76,129578,129580],{"id":129579},"_832-继承性","8.3.2 继承性",[14,129582,129583],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129585,129586],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[96,129588,129590],{"className":126537,"code":129589,"language":126539,"meta":22,"style":22},"p {\n  color: #333;\n}\n",[102,129591,129592,129598,129608],{"__ignoreMap":22},[105,129593,129594,129596],{"class":107,"line":108},[105,129595,14],{"class":51285},[105,129597,15564],{"class":115},[105,129599,129600,129602,129604,129606],{"class":107,"line":28},[105,129601,70890],{"class":164},[105,129603,51422],{"class":115},[105,129605,62354],{"class":164},[105,129607,1282],{"class":115},[105,129609,129610],{"class":107,"line":1171},[105,129611,1556],{"class":115},[20,129613],{"style":126393,"src":129614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129616,129617],{},"解释：①行高可以跟单位也可以不跟单位",[14,129619,129620],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129622,129623],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129625,129626],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[76,129628,129630],{"id":129629},"_833-优先级","8.3.3 优先级",[59,129632,129633,129636],{},[62,129634,129635],{},"选择器相同，则执行层叠性",[62,129637,129638],{},"选择器不同，则根据选择器权重执行",[253,129640,129641,129651],{},[256,129642,129643],{},[259,129644,129645,129648],{},[262,129646,129647],{"align":23729},"选择器",[262,129649,129650],{"align":23729},"选择器权重",[300,129652,129653,129661,129669,129677,129685,129693],{},[259,129654,129655,129658],{},[305,129656,129657],{"align":23729},"继承 或者*",[305,129659,129660],{"align":23729},"0，0，0，0",[259,129662,129663,129666],{},[305,129664,129665],{"align":23729},"标签选择器",[305,129667,129668],{"align":23729},"0，0，0，1",[259,129670,129671,129674],{},[305,129672,129673],{"align":23729},"类选择器，伪类选择器",[305,129675,129676],{"align":23729},"0，0，1，0",[259,129678,129679,129682],{},[305,129680,129681],{"align":23729},"ID选择器",[305,129683,129684],{"align":23729},"0，1，0，0",[259,129686,129687,129690],{},[305,129688,129689],{"align":23729},"行内样式",[305,129691,129692],{"align":23729},"1，0，0，0",[259,129694,129695,129698],{},[305,129696,129697],{"align":23729},"！important",[305,129699,129700],{"align":23729},"无穷大",[14,129702,129703],{},"! important用法：",[96,129705,129707],{"className":126537,"code":129706,"language":126539,"meta":22,"style":22},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[102,129708,129709,129714,129720,129733,129737,129742,129748,129758],{"__ignoreMap":22},[105,129710,129711],{"class":107,"line":108},[105,129712,129713],{"class":174},"\u002F* !important 拥有最高优先级 *\u002F\n",[105,129715,129716,129718],{"class":107,"line":28},[105,129717,51596],{"class":51285},[105,129719,15564],{"class":115},[105,129721,129722,129724,129726,129728,129731],{"class":107,"line":1171},[105,129723,70890],{"class":164},[105,129725,51422],{"class":115},[105,129727,51630],{"class":164},[105,129729,129730],{"class":111}," !important",[105,129732,1282],{"class":115},[105,129734,129735],{"class":107,"line":1186},[105,129736,1556],{"class":115},[105,129738,129739],{"class":107,"line":1192},[105,129740,129741],{"class":174},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[105,129743,129744,129746],{"class":107,"line":1206},[105,129745,51596],{"class":51285},[105,129747,15564],{"class":115},[105,129749,129750,129752,129754,129756],{"class":107,"line":1212},[105,129751,70890],{"class":164},[105,129753,51422],{"class":115},[105,129755,57406],{"class":164},[105,129757,1282],{"class":115},[105,129759,129760],{"class":107,"line":1303},[105,129761,1556],{"class":115},[14,129763,129764],{},"优先级注意点：",[14,129766,129767],{},"①权重是有4组数字组成,但是不会有进位",[14,129769,129770],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129772,129773],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129775,129776],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129778,129779],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129781,129782],{},"⑥复合选择器",[253,129784,129785,129795],{},[256,129786,129787],{},[259,129788,129789,129792],{},[262,129790,129791],{"align":23729},"div ul li",[262,129793,129794],{"align":23729},"0,0,0,3",[300,129796,129797,129805,129813],{},[259,129798,129799,129802],{},[305,129800,129801],{"align":23729},".nav ul li",[305,129803,129804],{"align":23729},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[259,129806,129807,129810],{},[305,129808,129809],{"align":23729},"a:hover",[305,129811,129812],{"align":23729},"0,0,1,1",[259,129814,129815,129818],{},[305,129816,129817],{"align":23729},".nav a",[305,129819,129812],{"align":23729},[5118,129821,129822],{},"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":28,"depth":28,"links":129824},[129825,129833,129844],{"id":127933,"depth":28,"text":127934,"children":129826},[129827,129828,129829,129830,129831,129832],{"id":127946,"depth":1171,"text":127947},{"id":128018,"depth":1171,"text":128019},{"id":128090,"depth":1171,"text":128091},{"id":128121,"depth":1171,"text":128122},{"id":128128,"depth":1171,"text":128129},{"id":128281,"depth":1171,"text":128282},{"id":128589,"depth":28,"text":128590,"children":129834},[129835,129836,129837,129838,129839,129840,129841,129842,129843],{"id":128596,"depth":1171,"text":128597},{"id":128606,"depth":1171,"text":128607},{"id":128702,"depth":1171,"text":128703},{"id":128775,"depth":1171,"text":128776},{"id":128930,"depth":1171,"text":128931},{"id":129018,"depth":1171,"text":129019},{"id":129070,"depth":1171,"text":129071},{"id":129129,"depth":1171,"text":129130},{"id":129234,"depth":1171,"text":129235},{"id":129562,"depth":28,"text":129563,"children":129845},[129846,129847,129848],{"id":129566,"depth":1171,"text":129567},{"id":129579,"depth":1171,"text":129580},{"id":129629,"depth":1171,"text":129630},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127925,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129855,"title":129856,"body":129857,"description":23369,"extension":30,"meta":131447,"navigation":32,"path":131448,"seo":131449,"stem":131450,"__hash__":131451},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129858,"toc":131426},[129859,129862,129866,129869,129872,129875,129878,129881,129884,129887,129891,129899,129936,129972,129975,129989,129994,130028,130031,130124,130129,130132,130162,130165,130170,130178,130182,130189,130235,130279,130284,130287,130290,130293,130296,130299,130302,130304,130307,130311,130316,130360,130365,130368,130371,130408,130413,130416,130419,130422,130425,130457,130460,130463,130466,130498,130501,130504,130507,130511,130514,130546,130549,130553,130573,130576,130584,130587,130591,130596,130599,130631,130636,130639,130677,130681,130686,130689,130692,130723,130726,130743,130748,130800,130860,130865,130919,130957,130961,130965,130968,130972,130980,130983,130985,130996,131001,131049,131083,131086,131089,131092,131095,131139,131142,131145,131148,131151,131154,131157,131201,131204,131207,131210,131213,131216,131219,131225,131228,131272,131275,131278,131281,131284,131287,131331,131334,131336,131339,131343,131347,131385,131389,131392,131395,131399,131407,131411,131414,131417,131420,131423],[10,129860,129856],{"id":129861},"_9-css盒模型浮动与切图",[47,129863,129865],{"id":129864},"_91-盒子模型","9.1 盒子模型",[14,129867,129868],{},"利用盒子来设计网页",[14,129870,129871],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129873,129874],{},"网页布局设置：",[14,129876,129877],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129879,129880],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129882,129883],{},"③往盒子里装内容",[20,129885],{"style":126393,"src":129886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[76,129888,129890],{"id":129889},"_911-边框border","9.1.1 边框（border）",[59,129892,129893,129896],{},[62,129894,129895],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[62,129897,129898],{},"语法",[96,129900,129902],{"className":126537,"code":129901,"language":126539,"meta":22,"style":22},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[102,129903,129904,129909,129915,129932],{"__ignoreMap":22},[105,129905,129906],{"class":107,"line":108},[105,129907,129908],{"class":174},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[105,129910,129911,129913],{"class":107,"line":28},[105,129912,51596],{"class":51285},[105,129914,15564],{"class":115},[105,129916,129917,129919,129921,129923,129925,129927,129930],{"class":107,"line":1171},[105,129918,70881],{"class":164},[105,129920,51422],{"class":115},[105,129922,333],{"class":164},[105,129924,51477],{"class":111},[105,129926,51506],{"class":164},[105,129928,129929],{"class":164}," #ccc",[105,129931,1282],{"class":115},[105,129933,129934],{"class":107,"line":1186},[105,129935,1556],{"class":115},[253,129937,129938,129946],{},[256,129939,129940],{},[259,129941,129942,129944],{},[262,129943,129139],{"align":23729},[262,129945,102681],{"align":23729},[300,129947,129948,129956,129964],{},[259,129949,129950,129953],{},[305,129951,129952],{"align":23729},"border-width",[305,129954,129955],{"align":23729},"定义边框粗细，单位是px",[259,129957,129958,129961],{},[305,129959,129960],{"align":23729},"border-style",[305,129962,129963],{"align":23729},"边框的样式",[259,129965,129966,129969],{},[305,129967,129968],{"align":23729},"border-color",[305,129970,129971],{"align":23729},"边框的颜色",[14,129973,129974],{},"边框样式 border-style 可以设置如下值：",[1123,129976,129977,129980,129983,129986],{},[62,129978,129979],{},"none：没有边框即忽略所有边框的宽度（默认值）",[62,129981,129982],{},"solid：边框为单实线(最为常用的)",[62,129984,129985],{},"dashed：边框为虚线",[62,129987,129988],{},"dotted：边框为点线",[59,129990,129991],{"start":1171},[62,129992,129993],{},"边框的合写分写",[96,129995,129996],{"className":126537,"code":129901,"language":126539,"meta":22,"style":22},[102,129997,129998,130002,130008,130024],{"__ignoreMap":22},[105,129999,130000],{"class":107,"line":108},[105,130001,129908],{"class":174},[105,130003,130004,130006],{"class":107,"line":28},[105,130005,51596],{"class":51285},[105,130007,15564],{"class":115},[105,130009,130010,130012,130014,130016,130018,130020,130022],{"class":107,"line":1171},[105,130011,70881],{"class":164},[105,130013,51422],{"class":115},[105,130015,333],{"class":164},[105,130017,51477],{"class":111},[105,130019,51506],{"class":164},[105,130021,129929],{"class":164},[105,130023,1282],{"class":115},[105,130025,130026],{"class":107,"line":1186},[105,130027,1556],{"class":115},[14,130029,130030],{},"边框分开写法：",[96,130032,130034],{"className":126537,"code":130033,"language":126539,"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",[102,130035,130036,130041,130047,130065,130083,130102,130120],{"__ignoreMap":22},[105,130037,130038],{"class":107,"line":108},[105,130039,130040],{"class":174},"\u002F* 边框分开写法 *\u002F\n",[105,130042,130043,130045],{"class":107,"line":28},[105,130044,51596],{"class":51285},[105,130046,15564],{"class":115},[105,130048,130049,130052,130054,130056,130058,130060,130063],{"class":107,"line":1171},[105,130050,130051],{"class":164},"  border-top",[105,130053,51422],{"class":115},[105,130055,333],{"class":164},[105,130057,51477],{"class":111},[105,130059,51506],{"class":164},[105,130061,130062],{"class":164}," #000",[105,130064,1282],{"class":115},[105,130066,130067,130070,130072,130074,130076,130078,130081],{"class":107,"line":1186},[105,130068,130069],{"class":164},"  border-right",[105,130071,51422],{"class":115},[105,130073,193],{"class":164},[105,130075,51477],{"class":111},[105,130077,62226],{"class":164},[105,130079,130080],{"class":164}," #333",[105,130082,1282],{"class":115},[105,130084,130085,130088,130090,130092,130094,130097,130100],{"class":107,"line":1192},[105,130086,130087],{"class":164},"  border-bottom",[105,130089,51422],{"class":115},[105,130091,187],{"class":164},[105,130093,51477],{"class":111},[105,130095,130096],{"class":164}," dotted",[105,130098,130099],{"class":164}," #666",[105,130101,1282],{"class":115},[105,130103,130104,130107,130109,130111,130113,130115,130118],{"class":107,"line":1206},[105,130105,130106],{"class":164},"  border-left",[105,130108,51422],{"class":115},[105,130110,333],{"class":164},[105,130112,51477],{"class":111},[105,130114,51506],{"class":164},[105,130116,130117],{"class":164}," #999",[105,130119,1282],{"class":115},[105,130121,130122],{"class":107,"line":1212},[105,130123,1556],{"class":115},[59,130125,130126],{"start":1186},[62,130127,130128],{},"表格的细线边框",[14,130130,130131],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[96,130133,130135],{"className":126537,"code":130134,"language":126539,"meta":22,"style":22},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[102,130136,130137,130142,130148,130158],{"__ignoreMap":22},[105,130138,130139],{"class":107,"line":108},[105,130140,130141],{"class":174},"\u002F* 表格细线边框合并 *\u002F\n",[105,130143,130144,130146],{"class":107,"line":28},[105,130145,253],{"class":51285},[105,130147,15564],{"class":115},[105,130149,130150,130152,130154,130156],{"class":107,"line":1171},[105,130151,70563],{"class":164},[105,130153,51422],{"class":115},[105,130155,65020],{"class":164},[105,130157,1282],{"class":115},[105,130159,130160],{"class":107,"line":1186},[105,130161,1556],{"class":115},[14,130163,130164],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[59,130166,130167],{"start":1192},[62,130168,130169],{},"解决边框额外增加盒子的实际大小的方法：",[1123,130171,130172,130175],{},[62,130173,130174],{},"测量盒子大小的时候,不量边框",[62,130176,130177],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[76,130179,130181],{"id":130180},"_912-内边距","9.1.2 内边距",[59,130183,130184,130187],{},[62,130185,130186],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[62,130188,129898],{},[253,130190,130191,130201],{},[256,130192,130193],{},[259,130194,130195,130198],{},[262,130196,130197],{"align":23729},"值的个数",[262,130199,130200],{"align":23729},"表达意思",[300,130202,130203,130211,130219,130227],{},[259,130204,130205,130208],{},[305,130206,130207],{"align":23729},"padding: 5px;",[305,130209,130210],{"align":23729},"1个值，代表上下左右都有5个元素",[259,130212,130213,130216],{},[305,130214,130215],{"align":23729},"padding: 5px 10px;",[305,130217,130218],{"align":23729},"2个值，代表上下内边距为5像素，左右内边距为10像素",[259,130220,130221,130224],{},[305,130222,130223],{"align":23729},"padding: 5px 10px 20px;",[305,130225,130226],{"align":23729},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[259,130228,130229,130232],{},[305,130230,130231],{"align":23729},"padding: 5px 10px 20px 30px;",[305,130233,130234],{"align":23729},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[253,130236,130237,130245],{},[256,130238,130239],{},[259,130240,130241,130243],{},[262,130242,129139],{"align":23729},[262,130244,102681],{"align":23729},[300,130246,130247,130255,130263,130271],{},[259,130248,130249,130252],{},[305,130250,130251],{"align":23729},"padding-left",[305,130253,130254],{"align":23729},"左内边距",[259,130256,130257,130260],{},[305,130258,130259],{"align":23729},"padding-right",[305,130261,130262],{"align":23729},"右内边距",[259,130264,130265,130268],{},[305,130266,130267],{"align":23729},"padding-top",[305,130269,130270],{"align":23729},"上内边距",[259,130272,130273,130276],{},[305,130274,130275],{"align":23729},"padding-bottom",[305,130277,130278],{"align":23729},"下内边距",[59,130280,130281],{"start":1171},[62,130282,130283],{},"内边距会影响盒子的实际大小",[14,130285,130286],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130288,130289],{},"①内容和边框有了距离，添加了内边距",[14,130291,130292],{},"②padding影响了盒子实际大小",[14,130294,130295],{},"内边距对盒子大小的影响：",[14,130297,130298],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130300,130301],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130303,95205],{},[14,130305,130306],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[76,130308,130310],{"id":130309},"_913-外边距","9.1.3 外边距",[59,130312,130313],{},[62,130314,130315],{},"控制盒子与盒子之间的距离",[253,130317,130318,130326],{},[256,130319,130320],{},[259,130321,130322,130324],{},[262,130323,129139],{"align":23729},[262,130325,102681],{"align":23729},[300,130327,130328,130336,130344,130352],{},[259,130329,130330,130333],{},[305,130331,130332],{"align":23729},"margin-left",[305,130334,130335],{"align":23729},"左外边距",[259,130337,130338,130341],{},[305,130339,130340],{"align":23729},"margin-right",[305,130342,130343],{"align":23729},"右外边距",[259,130345,130346,130349],{},[305,130347,130348],{"align":23729},"margin-top",[305,130350,130351],{"align":23729},"上外边距",[259,130353,130354,130357],{},[305,130355,130356],{"align":23729},"margin-bottom",[305,130358,130359],{"align":23729},"下外边距",[59,130361,130362],{"start":28},[62,130363,130364],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130366,130367],{},"①盒子必须指定了宽度（width）",[14,130369,130370],{},"②盒子左右的外边距都设置为 auto",[96,130372,130374],{"className":126537,"code":130373,"language":126539,"meta":22,"style":22},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[102,130375,130376,130381,130388,130404],{"__ignoreMap":22},[105,130377,130378],{"class":107,"line":108},[105,130379,130380],{"class":174},"\u002F* margin 复合写法（同上） *\u002F\n",[105,130382,130383,130386],{"class":107,"line":28},[105,130384,130385],{"class":1954},".box",[105,130387,15564],{"class":115},[105,130389,130390,130392,130394,130396,130398,130401],{"class":107,"line":1171},[105,130391,70455],{"class":164},[105,130393,51422],{"class":115},[105,130395,307],{"class":164},[105,130397,51541],{"class":164},[105,130399,130400],{"class":115},";  ",[105,130402,130403],{"class":174},"\u002F* 块级盒子水平居中 *\u002F\n",[105,130405,130406],{"class":107,"line":1186},[105,130407,1556],{"class":115},[59,130409,130410],{"start":1171},[62,130411,130412],{},"外边距塌陷问题",[14,130414,130415],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[20,130417],{"style":126393,"src":130418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130420,130421],{},"解决方案：",[14,130423,130424],{},"①可以为父亲元素定义上边距",[96,130426,130427],{"className":126537,"code":130373,"language":126539,"meta":22,"style":22},[102,130428,130429,130433,130439,130453],{"__ignoreMap":22},[105,130430,130431],{"class":107,"line":108},[105,130432,130380],{"class":174},[105,130434,130435,130437],{"class":107,"line":28},[105,130436,130385],{"class":1954},[105,130438,15564],{"class":115},[105,130440,130441,130443,130445,130447,130449,130451],{"class":107,"line":1171},[105,130442,70455],{"class":164},[105,130444,51422],{"class":115},[105,130446,307],{"class":164},[105,130448,51541],{"class":164},[105,130450,130400],{"class":115},[105,130452,130403],{"class":174},[105,130454,130455],{"class":107,"line":1186},[105,130456,1556],{"class":115},[14,130458,130459],{},"②可以为父亲元素定义上内边距",[14,130461,130462],{},"③可以为父亲元素添加overflow:hidden",[20,130464],{"style":126393,"src":130465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[96,130467,130468],{"className":126537,"code":130373,"language":126539,"meta":22,"style":22},[102,130469,130470,130474,130480,130494],{"__ignoreMap":22},[105,130471,130472],{"class":107,"line":108},[105,130473,130380],{"class":174},[105,130475,130476,130478],{"class":107,"line":28},[105,130477,130385],{"class":1954},[105,130479,15564],{"class":115},[105,130481,130482,130484,130486,130488,130490,130492],{"class":107,"line":1171},[105,130483,70455],{"class":164},[105,130485,51422],{"class":115},[105,130487,307],{"class":164},[105,130489,51541],{"class":164},[105,130491,130400],{"class":115},[105,130493,130403],{"class":174},[105,130495,130496],{"class":107,"line":1186},[105,130497,1556],{"class":115},[20,130499],{"style":126393,"src":130500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130502,130503],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130505,130506],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[76,130508,130510],{"id":130509},"_914-清除内外边距","9.1.4 清除内外边距",[14,130512,130513],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[96,130515,130516],{"className":126537,"code":130373,"language":126539,"meta":22,"style":22},[102,130517,130518,130522,130528,130542],{"__ignoreMap":22},[105,130519,130520],{"class":107,"line":108},[105,130521,130380],{"class":174},[105,130523,130524,130526],{"class":107,"line":28},[105,130525,130385],{"class":1954},[105,130527,15564],{"class":115},[105,130529,130530,130532,130534,130536,130538,130540],{"class":107,"line":1171},[105,130531,70455],{"class":164},[105,130533,51422],{"class":115},[105,130535,307],{"class":164},[105,130537,51541],{"class":164},[105,130539,130400],{"class":115},[105,130541,130403],{"class":174},[105,130543,130544],{"class":107,"line":1186},[105,130545,1556],{"class":115},[14,130547,130548],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[76,130550,130552],{"id":130551},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1123,130554,130555,130558,130561,130564,130567,130570],{},[62,130556,130557],{},"文件→打开 ：可以打开我们要测量的图片",[62,130559,130560],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[62,130562,130563],{},"右击标尺，把里面的单位改为像素",[62,130565,130566],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[62,130568,130569],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[62,130571,130572],{},"用选区拖动 可以测量大小",[20,130574],{"style":126393,"src":130575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1123,130577,130578,130581],{},[62,130579,130580],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[62,130582,130583],{},"吸管取色工具",[20,130585],{"style":126393,"src":130586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[76,130588,130590],{"id":130589},"_916-案例","9.1.6 案例",[59,130592,130593],{},[62,130594,130595],{},"小米商品",[20,130597],{"style":126393,"src":130598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[96,130600,130601],{"className":126537,"code":130373,"language":126539,"meta":22,"style":22},[102,130602,130603,130607,130613,130627],{"__ignoreMap":22},[105,130604,130605],{"class":107,"line":108},[105,130606,130380],{"class":174},[105,130608,130609,130611],{"class":107,"line":28},[105,130610,130385],{"class":1954},[105,130612,15564],{"class":115},[105,130614,130615,130617,130619,130621,130623,130625],{"class":107,"line":1171},[105,130616,70455],{"class":164},[105,130618,51422],{"class":115},[105,130620,307],{"class":164},[105,130622,51541],{"class":164},[105,130624,130400],{"class":115},[105,130626,130403],{"class":174},[105,130628,130629],{"class":107,"line":1186},[105,130630,1556],{"class":115},[59,130632,130633],{"start":28},[62,130634,130635],{},"快报模块",[20,130637],{"style":126393,"src":130638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[96,130640,130642],{"className":127284,"code":130641,"language":127286,"meta":22,"style":22},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[102,130643,130644,130649,130664,130669],{"__ignoreMap":22},[105,130645,130646],{"class":107,"line":108},[105,130647,130648],{"class":174},"\u003C!-- HTML 代码示例 -->\n",[105,130650,130651,130653,130655,130657,130659,130662],{"class":107,"line":28},[105,130652,1026],{"class":115},[105,130654,51596],{"class":51285},[105,130656,53471],{"class":1954},[105,130658,161],{"class":115},[105,130660,130661],{"class":220},"\"example\"",[105,130663,51292],{"class":115},[105,130665,130666],{"class":107,"line":1171},[105,130667,130668],{"class":115},"  示例内容\n",[105,130670,130671,130673,130675],{"class":107,"line":1186},[105,130672,51770],{"class":115},[105,130674,51596],{"class":51285},[105,130676,51292],{"class":115},[76,130678,130680],{"id":130679},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[59,130682,130683],{},[62,130684,130685],{},"圆角边框",[14,130687,130688],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[20,130690],{"style":126393,"src":130691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[96,130693,130695],{"className":126537,"code":130694,"language":126539,"meta":22,"style":22},"div {\n  border: 1px solid #ccc;\n}\n",[102,130696,130697,130703,130719],{"__ignoreMap":22},[105,130698,130699,130701],{"class":107,"line":108},[105,130700,51596],{"class":51285},[105,130702,15564],{"class":115},[105,130704,130705,130707,130709,130711,130713,130715,130717],{"class":107,"line":28},[105,130706,70881],{"class":164},[105,130708,51422],{"class":115},[105,130710,333],{"class":164},[105,130712,51477],{"class":111},[105,130714,51506],{"class":164},[105,130716,129929],{"class":164},[105,130718,1282],{"class":115},[105,130720,130721],{"class":107,"line":1171},[105,130722,1556],{"class":115},[14,130724,130725],{},"解释:",[1123,130727,130728,130731,130734,130737,130740],{},[62,130729,130730],{},"参数值可以为数值或百分比的形式",[62,130732,130733],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[62,130735,130736],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[62,130738,130739],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[62,130741,130742],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[59,130744,130745],{"start":28},[62,130746,130747],{},"盒子阴影",[96,130749,130751],{"className":126537,"code":130750,"language":126539,"meta":22,"style":22},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[102,130752,130753,130759,130796],{"__ignoreMap":22},[105,130754,130755,130757],{"class":107,"line":108},[105,130756,51596],{"class":51285},[105,130758,15564],{"class":115},[105,130760,130761,130764,130766,130768,130770,130772,130774,130776,130778,130780,130782,130784,130786,130788,130790,130792,130794],{"class":107,"line":28},[105,130762,130763],{"class":164},"  box-shadow",[105,130765,51422],{"class":115},[105,130767,307],{"class":164},[105,130769,14747],{"class":164},[105,130771,51477],{"class":111},[105,130773,2029],{"class":164},[105,130775,51477],{"class":111},[105,130777,78752],{"class":164},[105,130779,116],{"class":115},[105,130781,307],{"class":164},[105,130783,12427],{"class":115},[105,130785,307],{"class":164},[105,130787,12427],{"class":115},[105,130789,307],{"class":164},[105,130791,12427],{"class":115},[105,130793,86195],{"class":164},[105,130795,2710],{"class":115},[105,130797,130798],{"class":107,"line":1171},[105,130799,1556],{"class":115},[253,130801,130802,130810],{},[256,130803,130804],{},[259,130805,130806,130808],{},[262,130807,268],{"align":23729},[262,130809,27474],{"align":23729},[300,130811,130812,130820,130828,130836,130844,130852],{},[259,130813,130814,130817],{},[305,130815,130816],{"align":23729},"h-shadow",[305,130818,130819],{"align":23729},"必需,水平阴影的位置,允许负值",[259,130821,130822,130825],{},[305,130823,130824],{"align":23729},"v-shadow",[305,130826,130827],{"align":23729},"必需,垂直阴影的位置,允许负值",[259,130829,130830,130833],{},[305,130831,130832],{"align":23729},"blur",[305,130834,130835],{"align":23729},"可选,模糊距离,就是影子的虚实",[259,130837,130838,130841],{},[305,130839,130840],{"align":23729},"spread",[305,130842,130843],{"align":23729},"可选,阴影尺寸",[259,130845,130846,130849],{},[305,130847,130848],{"align":23729},"color",[305,130850,130851],{"align":23729},"可选,阴影的颜色",[259,130853,130854,130857],{},[305,130855,130856],{"align":23729},"inset",[305,130858,130859],{"align":23729},"可选,将外部阴影(outset)改为内部阴影",[59,130861,130862],{"start":1171},[62,130863,130864],{},"文字阴影",[96,130866,130868],{"className":126537,"code":130867,"language":126539,"meta":22,"style":22},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[102,130869,130870,130876,130915],{"__ignoreMap":22},[105,130871,130872,130874],{"class":107,"line":108},[105,130873,14],{"class":51285},[105,130875,15564],{"class":115},[105,130877,130878,130881,130883,130885,130887,130889,130891,130893,130895,130897,130899,130901,130903,130905,130907,130909,130911,130913],{"class":107,"line":28},[105,130879,130880],{"class":164},"  text-shadow",[105,130882,51422],{"class":115},[105,130884,333],{"class":164},[105,130886,51477],{"class":111},[105,130888,25103],{"class":164},[105,130890,51477],{"class":111},[105,130892,14747],{"class":164},[105,130894,51477],{"class":111},[105,130896,78752],{"class":164},[105,130898,116],{"class":115},[105,130900,307],{"class":164},[105,130902,12427],{"class":115},[105,130904,307],{"class":164},[105,130906,12427],{"class":115},[105,130908,307],{"class":164},[105,130910,12427],{"class":115},[105,130912,100506],{"class":164},[105,130914,2710],{"class":115},[105,130916,130917],{"class":107,"line":1171},[105,130918,1556],{"class":115},[253,130920,130921,130929],{},[256,130922,130923],{},[259,130924,130925,130927],{},[262,130926,268],{"align":23729},[262,130928,27474],{"align":23729},[300,130930,130931,130937,130944,130951],{},[259,130932,130933,130935],{},[305,130934,130816],{"align":23729},[305,130936,130819],{"align":23729},[259,130938,130939,130941],{},[305,130940,130824],{"align":23729},[305,130942,130943],{"align":23729},"必需,垂直阴影位置,允许负值",[259,130945,130946,130948],{},[305,130947,130832],{"align":23729},[305,130949,130950],{"align":23729},"可选,模糊的距离",[259,130952,130953,130955],{},[305,130954,130848],{"align":23729},[305,130956,130851],{"align":23729},[47,130958,130960],{"id":130959},"_92-浮动","9.2 浮动",[76,130962,130964],{"id":130963},"_921-浮动介绍","9.2.1 浮动介绍",[14,130966,130967],{},"在16.2中详细介绍",[76,130969,130971],{"id":130970},"_922-清除浮动","9.2.2 清除浮动",[59,130973,130974,130977],{},[62,130975,130976],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[62,130978,130979],{},"清除浮动的本质",[14,130981,130982],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,130984,9017],{},[1123,130986,130987,130990,130993],{},[62,130988,130989],{},"如果父盒子本身有高度，则不需要清除浮动",[62,130991,130992],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[62,130994,130995],{},"父级有了高度，就不会影响下面的标准流了",[59,130997,130998],{"start":1171},[62,130999,131000],{},"清除浮动样式",[96,131002,131004],{"className":126537,"code":131003,"language":126539,"meta":22,"style":22},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[102,131005,131006,131013,131024,131028,131035,131045],{"__ignoreMap":22},[105,131007,131008,131011],{"class":107,"line":108},[105,131009,131010],{"class":1954},".left",[105,131012,15564],{"class":115},[105,131014,131015,131018,131020,131022],{"class":107,"line":28},[105,131016,131017],{"class":164},"  float",[105,131019,51422],{"class":115},[105,131021,23729],{"class":164},[105,131023,1282],{"class":115},[105,131025,131026],{"class":107,"line":1171},[105,131027,1556],{"class":115},[105,131029,131030,131033],{"class":107,"line":1186},[105,131031,131032],{"class":1954},".right",[105,131034,15564],{"class":115},[105,131036,131037,131039,131041,131043],{"class":107,"line":1192},[105,131038,131017],{"class":164},[105,131040,51422],{"class":115},[105,131042,72507],{"class":164},[105,131044,1282],{"class":115},[105,131046,131047],{"class":107,"line":1206},[105,131048,1556],{"class":115},[253,131050,131051,131059],{},[256,131052,131053],{},[259,131054,131055,131057],{},[262,131056,127001],{"align":23729},[262,131058,27474],{"align":23729},[300,131060,131061,131068,131075],{},[259,131062,131063,131065],{},[305,131064,23729],{"align":23729},[305,131066,131067],{"align":23729},"不允许左侧有浮动元素（清除左侧浮动的影响）",[259,131069,131070,131072],{},[305,131071,72507],{"align":23729},[305,131073,131074],{"align":23729},"不允许右侧有浮动元素（清除右侧浮动的影响）",[259,131076,131077,131080],{},[305,131078,131079],{"align":23729},"both",[305,131081,131082],{"align":23729},"同时清除左右侧浮动的影响",[14,131084,131085],{},"法一",[14,131087,131088],{},"额外标签法也称为隔墙法",[14,131090,131091],{},"使用方式：",[14,131093,131094],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[96,131096,131097],{"className":126537,"code":131003,"language":126539,"meta":22,"style":22},[102,131098,131099,131105,131115,131119,131125,131135],{"__ignoreMap":22},[105,131100,131101,131103],{"class":107,"line":108},[105,131102,131010],{"class":1954},[105,131104,15564],{"class":115},[105,131106,131107,131109,131111,131113],{"class":107,"line":28},[105,131108,131017],{"class":164},[105,131110,51422],{"class":115},[105,131112,23729],{"class":164},[105,131114,1282],{"class":115},[105,131116,131117],{"class":107,"line":1171},[105,131118,1556],{"class":115},[105,131120,131121,131123],{"class":107,"line":1186},[105,131122,131032],{"class":1954},[105,131124,15564],{"class":115},[105,131126,131127,131129,131131,131133],{"class":107,"line":1192},[105,131128,131017],{"class":164},[105,131130,51422],{"class":115},[105,131132,72507],{"class":164},[105,131134,1282],{"class":115},[105,131136,131137],{"class":107,"line":1206},[105,131138,1556],{"class":115},[14,131140,131141],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131143,131144],{},"优点： 通俗易懂，书写方便",[14,131146,131147],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131149,131150],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131152,131153],{},"法二",[14,131155,131156],{},"父级添加overflow属性",[96,131158,131159],{"className":126537,"code":131003,"language":126539,"meta":22,"style":22},[102,131160,131161,131167,131177,131181,131187,131197],{"__ignoreMap":22},[105,131162,131163,131165],{"class":107,"line":108},[105,131164,131010],{"class":1954},[105,131166,15564],{"class":115},[105,131168,131169,131171,131173,131175],{"class":107,"line":28},[105,131170,131017],{"class":164},[105,131172,51422],{"class":115},[105,131174,23729],{"class":164},[105,131176,1282],{"class":115},[105,131178,131179],{"class":107,"line":1171},[105,131180,1556],{"class":115},[105,131182,131183,131185],{"class":107,"line":1186},[105,131184,131032],{"class":1954},[105,131186,15564],{"class":115},[105,131188,131189,131191,131193,131195],{"class":107,"line":1192},[105,131190,131017],{"class":164},[105,131192,51422],{"class":115},[105,131194,72507],{"class":164},[105,131196,1282],{"class":115},[105,131198,131199],{"class":107,"line":1206},[105,131200,1556],{"class":115},[14,131202,131203],{},"overflow: hidden;",[14,131205,131206],{},"优点：代码简洁",[14,131208,131209],{},"缺点：无法显示溢出的部分",[14,131211,131212],{},"注意：是给父元素添加代码",[14,131214,131215],{},"法三",[14,131217,131218],{},"父级添加after伪元素",[14,131220,131221,131224],{},[131222,131223],"after",{}," 方式是额外标签法的升级版",[14,131226,131227],{},"使用的时候复制就可以",[96,131229,131230],{"className":126537,"code":131003,"language":126539,"meta":22,"style":22},[102,131231,131232,131238,131248,131252,131258,131268],{"__ignoreMap":22},[105,131233,131234,131236],{"class":107,"line":108},[105,131235,131010],{"class":1954},[105,131237,15564],{"class":115},[105,131239,131240,131242,131244,131246],{"class":107,"line":28},[105,131241,131017],{"class":164},[105,131243,51422],{"class":115},[105,131245,23729],{"class":164},[105,131247,1282],{"class":115},[105,131249,131250],{"class":107,"line":1171},[105,131251,1556],{"class":115},[105,131253,131254,131256],{"class":107,"line":1186},[105,131255,131032],{"class":1954},[105,131257,15564],{"class":115},[105,131259,131260,131262,131264,131266],{"class":107,"line":1192},[105,131261,131017],{"class":164},[105,131263,51422],{"class":115},[105,131265,72507],{"class":164},[105,131267,1282],{"class":115},[105,131269,131270],{"class":107,"line":1206},[105,131271,1556],{"class":115},[14,131273,131274],{},"优点：没有增加标签，结构更简单",[14,131276,131277],{},"缺点：照顾低版本浏览器",[14,131279,131280],{},"代表网站： 百度、淘宝网、网易等",[14,131282,131283],{},"法四",[14,131285,131286],{},"父级添加双伪元素",[96,131288,131289],{"className":126537,"code":131003,"language":126539,"meta":22,"style":22},[102,131290,131291,131297,131307,131311,131317,131327],{"__ignoreMap":22},[105,131292,131293,131295],{"class":107,"line":108},[105,131294,131010],{"class":1954},[105,131296,15564],{"class":115},[105,131298,131299,131301,131303,131305],{"class":107,"line":28},[105,131300,131017],{"class":164},[105,131302,51422],{"class":115},[105,131304,23729],{"class":164},[105,131306,1282],{"class":115},[105,131308,131309],{"class":107,"line":1171},[105,131310,1556],{"class":115},[105,131312,131313,131315],{"class":107,"line":1186},[105,131314,131032],{"class":1954},[105,131316,15564],{"class":115},[105,131318,131319,131321,131323,131325],{"class":107,"line":1192},[105,131320,131017],{"class":164},[105,131322,51422],{"class":115},[105,131324,72507],{"class":164},[105,131326,1282],{"class":115},[105,131328,131329],{"class":107,"line":1206},[105,131330,1556],{"class":115},[14,131332,131333],{},"优点：代码更简洁",[14,131335,131277],{},[14,131337,131338],{},"代表网站：小米、腾讯等",[47,131340,131342],{"id":131341},"_93-ps切图","9.3 PS切图",[76,131344,131346],{"id":131345},"_931-常见图片格式","9.3.1 常见图片格式",[253,131348,131349,131359],{},[256,131350,131351],{},[259,131352,131353,131356],{},[262,131354,131355],{"align":23729},"jpg图像格式",[262,131357,131358],{"align":23729},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[300,131360,131361,131369,131377],{},[259,131362,131363,131366],{},[305,131364,131365],{"align":23729},"gif图像格式",[305,131367,131368],{"align":23729},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[259,131370,131371,131374],{},[305,131372,131373],{"align":23729},"png图像格式",[305,131375,131376],{"align":23729},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[259,131378,131379,131382],{},[305,131380,131381],{"align":23729},"PSD图像格式",[305,131383,131384],{"align":23729},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[76,131386,131388],{"id":131387},"_932-图层切图","9.3.2 图层切图",[14,131390,131391],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131393,131394],{},"按住shift选中两个图层->图层菜单->合并图层",[76,131396,131398],{"id":131397},"_933-切片切图","9.3.3 切片切图",[1123,131400,131401,131404],{},[62,131402,131403],{},"利用切片工具手动划出",[62,131405,131406],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[76,131408,131410],{"id":131409},"_934-切图步骤","9.3.4 切图步骤",[14,131412,131413],{},"用切片工具选中：",[20,131415],{"style":126393,"src":131416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131418,131419],{},"文件 -> 导出",[20,131421],{"style":126393,"src":131422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5118,131424,131425],{},"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":28,"depth":28,"links":131427},[131428,131437,131441],{"id":129864,"depth":28,"text":129865,"children":131429},[131430,131431,131432,131433,131434,131435,131436],{"id":129889,"depth":1171,"text":129890},{"id":130180,"depth":1171,"text":130181},{"id":130309,"depth":1171,"text":130310},{"id":130509,"depth":1171,"text":130510},{"id":130551,"depth":1171,"text":130552},{"id":130589,"depth":1171,"text":130590},{"id":130679,"depth":1171,"text":130680},{"id":130959,"depth":28,"text":130960,"children":131438},[131439,131440],{"id":130963,"depth":1171,"text":130964},{"id":130970,"depth":1171,"text":130971},{"id":131341,"depth":28,"text":131342,"children":131442},[131443,131444,131445,131446],{"id":131345,"depth":1171,"text":131346},{"id":131387,"depth":1171,"text":131388},{"id":131397,"depth":1171,"text":131398},{"id":131409,"depth":1171,"text":131410},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129856,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131453,"title":131454,"body":131455,"description":23369,"extension":30,"meta":132096,"navigation":32,"path":132097,"seo":132098,"stem":132099,"__hash__":132100},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131456,"toc":132084},[131457,131460,131464,131490,131524,131528,131532,131535,131577,131584,131594,131602,131604,131607,131610,131613,131620,131634,131638,131641,131670,131674,131677,131691,131695,131698,131726,131730,131733,131759,131763,131768,131801,131806,131834,131838,131855,131901,131906,131950,131967,132074,132082],[10,131458,131454],{"id":131459},"_10-css规范与学成在线案例",[47,131461,131463],{"id":131462},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[59,131465,131466,131472,131478,131484],{},[62,131467,131468,131471],{},[265,131469,131470],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[62,131473,131474,131477],{},[265,131475,131476],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[62,131479,131480,131483],{},[265,131481,131482],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[62,131485,131486,131489],{},[265,131487,131488],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[96,131491,131492],{"className":126537,"code":129901,"language":126539,"meta":22,"style":22},[102,131493,131494,131498,131504,131520],{"__ignoreMap":22},[105,131495,131496],{"class":107,"line":108},[105,131497,129908],{"class":174},[105,131499,131500,131502],{"class":107,"line":28},[105,131501,51596],{"class":51285},[105,131503,15564],{"class":115},[105,131505,131506,131508,131510,131512,131514,131516,131518],{"class":107,"line":1171},[105,131507,70881],{"class":164},[105,131509,51422],{"class":115},[105,131511,333],{"class":164},[105,131513,51477],{"class":111},[105,131515,51506],{"class":164},[105,131517,129929],{"class":164},[105,131519,1282],{"class":115},[105,131521,131522],{"class":107,"line":1186},[105,131523,1556],{"class":115},[47,131525,131527],{"id":131526},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[76,131529,131531],{"id":131530},"_1021-header头部制作","10.2.1 header头部制作",[20,131533],{"style":126393,"src":131534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1123,131536,131537,131544,131551,131557,131564,131571],{},[62,131538,131539,131540,131543],{},"1号是版心盒子 ",[265,131541,131542],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[62,131545,131546,131547,131550],{},"版心盒子 里面包含 2号盒子 ",[265,131548,131549],{},"logo"," 图标",[62,131552,131553,131554,131556],{},"版心盒子 里面包含 3号盒子 ",[265,131555,53698],{}," 导航栏",[62,131558,131559,131560,131563],{},"版心盒子 里面包含 4号盒子 ",[265,131561,131562],{},"search"," 搜索框",[62,131565,131566,131567,131570],{},"版心盒子 里面包含 5号盒子 ",[265,131568,131569],{},"user"," 个人信息",[62,131572,131573,131574],{},"注意，要求里面的 ",[265,131575,131576],{},"4个子盒子 必须都浮动",[59,131578,131579],{},[62,131580,131581],{},[265,131582,131583],{},"导航栏注意点:",[14,131585,131586,131587,131590,131591],{},"实际开发中， ",[265,131588,131589],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[265,131592,131593],{},"用 li 包含链接(li+a)的做法",[1123,131595,131596,131599],{},[62,131597,131598],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[62,131600,131601],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131603,9017],{},[14,131605,131606],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131608,131609],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131611,131612],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[59,131614,131615],{"start":28},[62,131616,131617],{},[265,131618,131619],{},"4号盒子search的细节：",[1123,131621,131622,131625,131628],{},[62,131623,131624],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[62,131626,131627],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[62,131629,131630,131633],{},[102,131631,131632],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[76,131635,131637],{"id":131636},"_1022-banner制作","10.2.2 banner制作",[20,131639],{"style":126393,"src":131640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1123,131642,131643,131650,131656,131663],{},[62,131644,131645,131646,131649],{},"1号盒子是通栏的大盒子 ",[265,131647,131648],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[62,131651,131652,131653,131655],{},"2号盒子是版心 ",[265,131654,911],{}," ， 要水平居中对齐",[62,131657,131658,131659,131662],{},"3号盒子版心内，左对齐 ",[265,131660,131661],{},"subnav"," 侧导航栏",[62,131664,131665,131666,131669],{},"4号盒子版心内，右对齐 ",[265,131667,131668],{},"course"," 课程",[76,131671,131673],{"id":131672},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[20,131675],{"style":126393,"src":131676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1123,131678,131679,131682,131685,131688],{},[62,131680,131681],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[62,131683,131684],{},"1号盒子是标题 H3 左侧浮动",[62,131686,131687],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[62,131689,131690],{},"3号盒子 右浮动 mod 修改",[76,131692,131694],{"id":131693},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[20,131696],{"style":126393,"src":131697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1123,131699,131700,131706,131713,131720,131723],{},[62,131701,131702,131703,131705],{},"1号盒子为最大的盒子 ",[265,131704,53699],{}," 版心水平居中对齐",[62,131707,131708,131709,131712],{},"2号盒子为上面部分 ",[265,131710,131711],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[62,131714,131715,131716,131719],{},"3号盒子为底下部分 ",[265,131717,131718],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[62,131721,131722],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[62,131724,131725],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[76,131727,131729],{"id":131728},"_1025-底部模块制作","10.2.5 底部模块制作",[20,131731],{"style":126393,"src":131732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1123,131734,131735,131742,131745,131752],{},[62,131736,131737,131738,131741],{},"1号盒子通栏大盒子 底部 ",[265,131739,131740],{},"footer"," 给高度 底色是白色",[62,131743,131744],{},"2号盒子版心水平居中",[62,131746,131747,131748,131751],{},"3号盒子版权 ",[265,131749,131750],{},"copyright"," 左对齐",[62,131753,131754,131755,131758],{},"4号盒子 链接组 ",[265,131756,131757],{},"links"," 右对齐",[76,131760,131762],{"id":131761},"_1026-代码模块","10.2.6 代码模块",[59,131764,131765],{},[62,131766,131767],{},"html部分",[96,131769,131771],{"className":127284,"code":131770,"language":127286,"meta":22,"style":22},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[102,131772,131773],{"__ignoreMap":22},[105,131774,131775,131777,131779,131781,131783,131786,131789,131791,131794,131797,131799],{"class":107,"line":108},[105,131776,1026],{"class":115},[105,131778,354],{"class":51285},[105,131780,61042],{"class":1954},[105,131782,161],{"class":115},[105,131784,131785],{"class":220},"\"https:\u002F\u002Fexample.com\"",[105,131787,131788],{"class":1954}," target",[105,131790,161],{"class":115},[105,131792,131793],{"class":220},"\"_blank\"",[105,131795,131796],{"class":115},">链接文字\u003C\u002F",[105,131798,354],{"class":51285},[105,131800,51292],{"class":115},[59,131802,131803],{"start":28},[62,131804,131805],{},"css部分",[96,131807,131808],{"className":127284,"code":131770,"language":127286,"meta":22,"style":22},[102,131809,131810],{"__ignoreMap":22},[105,131811,131812,131814,131816,131818,131820,131822,131824,131826,131828,131830,131832],{"class":107,"line":108},[105,131813,1026],{"class":115},[105,131815,354],{"class":51285},[105,131817,61042],{"class":1954},[105,131819,161],{"class":115},[105,131821,131785],{"class":220},[105,131823,131788],{"class":1954},[105,131825,161],{"class":115},[105,131827,131793],{"class":220},[105,131829,131796],{"class":115},[105,131831,354],{"class":51285},[105,131833,51292],{"class":115},[76,131835,131837],{"id":131836},"_1027-收获","10.2.7 收获",[59,131839,131840,131843,131846,131849,131852],{},[62,131841,131842],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[62,131844,131845],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[62,131847,131848],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[62,131850,131851],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[62,131853,131854],{},"遗忘代码",[96,131856,131858],{"className":126537,"code":131857,"language":126539,"meta":22,"style":22},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[102,131859,131860,131882,131887,131897],{"__ignoreMap":22},[105,131861,131862,131864,131866,131868,131870,131872,131874,131876,131878,131880],{"class":107,"line":108},[105,131863,51596],{"class":51285},[105,131865,12427],{"class":115},[105,131867,14],{"class":51285},[105,131869,12427],{"class":115},[105,131871,10],{"class":51285},[105,131873,12427],{"class":115},[105,131875,1123],{"class":51285},[105,131877,12427],{"class":115},[105,131879,62],{"class":51285},[105,131881,15564],{"class":115},[105,131883,131884],{"class":107,"line":28},[105,131885,131886],{"class":174},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[105,131888,131889,131891,131893,131895],{"class":107,"line":1171},[105,131890,128153],{"class":164},[105,131892,51422],{"class":115},[105,131894,60854],{"class":164},[105,131896,1282],{"class":115},[105,131898,131899],{"class":107,"line":1186},[105,131900,1556],{"class":115},[59,131902,131903],{"start":1206},[62,131904,131905],{},"html引css的程序",[96,131907,131908],{"className":126537,"code":131857,"language":126539,"meta":22,"style":22},[102,131909,131910,131932,131936,131946],{"__ignoreMap":22},[105,131911,131912,131914,131916,131918,131920,131922,131924,131926,131928,131930],{"class":107,"line":108},[105,131913,51596],{"class":51285},[105,131915,12427],{"class":115},[105,131917,14],{"class":51285},[105,131919,12427],{"class":115},[105,131921,10],{"class":51285},[105,131923,12427],{"class":115},[105,131925,1123],{"class":51285},[105,131927,12427],{"class":115},[105,131929,62],{"class":51285},[105,131931,15564],{"class":115},[105,131933,131934],{"class":107,"line":28},[105,131935,131886],{"class":174},[105,131937,131938,131940,131942,131944],{"class":107,"line":1171},[105,131939,128153],{"class":164},[105,131941,51422],{"class":115},[105,131943,60854],{"class":164},[105,131945,1282],{"class":115},[105,131947,131948],{"class":107,"line":1186},[105,131949,1556],{"class":115},[59,131951,131952,131955,131958,131961,131964],{"start":1212},[62,131953,131954],{},"浮动的盒子不会有外边距合并问题",[62,131956,131957],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[62,131959,131960],{},"ctrl+g快速定位行；shift+alt多个光标",[62,131962,131963],{},"学习上方各个模块的选择器起名方法，以后就这样用",[62,131965,131966],{},"在写选择器时尽量写全一些，例如",[96,131968,131970],{"className":126537,"code":131969,"language":126539,"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",[102,131971,131972,131977,131993,131998,132013,132018,132033,132038,132053,132058],{"__ignoreMap":22},[105,131973,131974],{"class":107,"line":108},[105,131975,131976],{"class":174},"\u002F* 静态定位（默认） *\u002F\n",[105,131978,131979,131982,131984,131986,131988,131991],{"class":107,"line":28},[105,131980,131981],{"class":1954},".static",[105,131983,79792],{"class":115},[105,131985,128897],{"class":164},[105,131987,51422],{"class":115},[105,131989,131990],{"class":164},"static",[105,131992,129467],{"class":115},[105,131994,131995],{"class":107,"line":1171},[105,131996,131997],{"class":174},"\u002F* 相对定位 *\u002F\n",[105,131999,132000,132003,132005,132007,132009,132011],{"class":107,"line":1186},[105,132001,132002],{"class":1954},".relative",[105,132004,79792],{"class":115},[105,132006,128897],{"class":164},[105,132008,51422],{"class":115},[105,132010,54749],{"class":164},[105,132012,129467],{"class":115},[105,132014,132015],{"class":107,"line":1192},[105,132016,132017],{"class":174},"\u002F* 绝对定位 *\u002F\n",[105,132019,132020,132023,132025,132027,132029,132031],{"class":107,"line":1206},[105,132021,132022],{"class":1954},".absolute",[105,132024,79792],{"class":115},[105,132026,128897],{"class":164},[105,132028,51422],{"class":115},[105,132030,54816],{"class":164},[105,132032,129467],{"class":115},[105,132034,132035],{"class":107,"line":1212},[105,132036,132037],{"class":174},"\u002F* 固定定位 *\u002F\n",[105,132039,132040,132043,132045,132047,132049,132051],{"class":107,"line":1303},[105,132041,132042],{"class":1954},".fixed",[105,132044,79792],{"class":115},[105,132046,128897],{"class":164},[105,132048,51422],{"class":115},[105,132050,86218],{"class":164},[105,132052,129467],{"class":115},[105,132054,132055],{"class":107,"line":1309},[105,132056,132057],{"class":174},"\u002F* 粘性定位 *\u002F\n",[105,132059,132060,132063,132065,132067,132069,132072],{"class":107,"line":1321},[105,132061,132062],{"class":1954},".sticky",[105,132064,79792],{"class":115},[105,132066,128897],{"class":164},[105,132068,51422],{"class":115},[105,132070,132071],{"class":164},"sticky",[105,132073,129467],{"class":115},[59,132075,132076,132079],{"start":1608},[62,132077,132078],{},"一定要用好注释",[62,132080,132081],{},"浮动的盒子不会有外边距合并的问题",[5118,132083,131425],{},{"title":22,"searchDepth":28,"depth":28,"links":132085},[132086,132087],{"id":131462,"depth":28,"text":131463},{"id":131526,"depth":28,"text":131527,"children":132088},[132089,132090,132091,132092,132093,132094,132095],{"id":131530,"depth":1171,"text":131531},{"id":131636,"depth":1171,"text":131637},{"id":131672,"depth":1171,"text":131673},{"id":131693,"depth":1171,"text":131694},{"id":131728,"depth":1171,"text":131729},{"id":131761,"depth":1171,"text":131762},{"id":131836,"depth":1171,"text":131837},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131454,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132102,"title":132103,"body":132104,"description":23369,"extension":30,"meta":133590,"navigation":32,"path":133591,"seo":133592,"stem":133593,"__hash__":133594},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132105,"toc":133582},[132106,132109,132113,132117,132128,132132,132149,132193,132226,132229,132246,132249,132252,132296,132300,132304,132307,132310,132314,132317,132328,132391,132432,132435,132450,132504,132512,132515,132526,132580,132606,132609,132622,132676,132708,132762,132785,132839,132842,132845,132852,132906,132927,132981,132984,132987,133072,133080,133137,133160,133164,133167,133185,133189,133208,133262,133300,133304,133307,133310,133332,133336,133344,133347,133352,133363,133366,133370,133384,133428,133431,133435,133438,133443,133469,133474,133551,133554,133558,133561,133564,133567,133570,133573,133576,133579],[10,132107,132103],{"id":132108},"_11-传统布局与定位体系",[47,132110,132112],{"id":132111},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[76,132114,132116],{"id":132115},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1123,132118,132119,132122,132125],{},[62,132120,132121],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[62,132123,132124],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[62,132126,132127],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[76,132129,132131],{"id":132130},"_1112-浮动","11.1.2 浮动",[1123,132133,132134,132137,132140,132143,132146],{},[62,132135,132136],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[62,132138,132139],{},"浮动可以改变元素标签默认的排列方式",[62,132141,132142],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[62,132144,132145],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[62,132147,132148],{},"在使用行内块转换时盒子之间是有空隙的",[96,132150,132151],{"className":126537,"code":131003,"language":126539,"meta":22,"style":22},[102,132152,132153,132159,132169,132173,132179,132189],{"__ignoreMap":22},[105,132154,132155,132157],{"class":107,"line":108},[105,132156,131010],{"class":1954},[105,132158,15564],{"class":115},[105,132160,132161,132163,132165,132167],{"class":107,"line":28},[105,132162,131017],{"class":164},[105,132164,51422],{"class":115},[105,132166,23729],{"class":164},[105,132168,1282],{"class":115},[105,132170,132171],{"class":107,"line":1171},[105,132172,1556],{"class":115},[105,132174,132175,132177],{"class":107,"line":1186},[105,132176,131032],{"class":1954},[105,132178,15564],{"class":115},[105,132180,132181,132183,132185,132187],{"class":107,"line":1192},[105,132182,131017],{"class":164},[105,132184,51422],{"class":115},[105,132186,72507],{"class":164},[105,132188,1282],{"class":115},[105,132190,132191],{"class":107,"line":1206},[105,132192,1556],{"class":115},[253,132194,132195,132203],{},[256,132196,132197],{},[259,132198,132199,132201],{},[262,132200,127001],{"align":23729},[262,132202,27474],{"align":23729},[300,132204,132205,132212,132219],{},[259,132206,132207,132209],{},[305,132208,54722],{"align":23729},[305,132210,132211],{"align":23729},"元素不浮动（默认值）",[259,132213,132214,132216],{},[305,132215,23729],{"align":23729},[305,132217,132218],{"align":23729},"元素向左浮动",[259,132220,132221,132223],{},[305,132222,72507],{"align":23729},[305,132224,132225],{"align":23729},"元素向右浮动",[14,132227,132228],{},"浮动重点：",[1123,132230,132231,132234,132237,132240,132243],{},[62,132232,132233],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[62,132235,132236],{},"浮动的元素会一行内显示并且元素顶部对齐",[62,132238,132239],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[62,132241,132242],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[62,132244,132245],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132247,132248],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132250,132251],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[96,132253,132254],{"className":126537,"code":131003,"language":126539,"meta":22,"style":22},[102,132255,132256,132262,132272,132276,132282,132292],{"__ignoreMap":22},[105,132257,132258,132260],{"class":107,"line":108},[105,132259,131010],{"class":1954},[105,132261,15564],{"class":115},[105,132263,132264,132266,132268,132270],{"class":107,"line":28},[105,132265,131017],{"class":164},[105,132267,51422],{"class":115},[105,132269,23729],{"class":164},[105,132271,1282],{"class":115},[105,132273,132274],{"class":107,"line":1171},[105,132275,1556],{"class":115},[105,132277,132278,132280],{"class":107,"line":1186},[105,132279,131032],{"class":1954},[105,132281,15564],{"class":115},[105,132283,132284,132286,132288,132290],{"class":107,"line":1192},[105,132285,131017],{"class":164},[105,132287,51422],{"class":115},[105,132289,72507],{"class":164},[105,132291,1282],{"class":115},[105,132293,132294],{"class":107,"line":1206},[105,132295,1556],{"class":115},[76,132297,132299],{"id":132298},"_1113-定位","11.1.3 定位",[21990,132301,132303],{"id":132302},"_11131-使用场景","11.1.3.1 使用场景",[14,132305,132306],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132308,132309],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21990,132311,132313],{"id":132312},"_11132-定位组成","11.1.3.2 定位组成",[14,132315,132316],{},"定位 = 定位模式 + 边偏移",[59,132318,132319],{},[62,132320,132321,132324,132325],{},[265,132322,132323],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[265,132326,132327],{},"定位模式",[96,132329,132331],{"className":126537,"code":132330,"language":126539,"meta":22,"style":22},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[102,132332,132333,132339,132353,132370,132387],{"__ignoreMap":22},[105,132334,132335,132337],{"class":107,"line":108},[105,132336,130385],{"class":1954},[105,132338,15564],{"class":115},[105,132340,132341,132344,132346,132348,132350],{"class":107,"line":28},[105,132342,132343],{"class":164},"  position",[105,132345,51422],{"class":115},[105,132347,54749],{"class":164},[105,132349,130400],{"class":115},[105,132351,132352],{"class":174},"\u002F* 定位模式 *\u002F\n",[105,132354,132355,132358,132360,132362,132364,132367],{"class":107,"line":1171},[105,132356,132357],{"class":164},"  top",[105,132359,51422],{"class":115},[105,132361,562],{"class":164},[105,132363,51477],{"class":111},[105,132365,132366],{"class":115},";           ",[105,132368,132369],{"class":174},"\u002F* 边偏移：上 *\u002F\n",[105,132371,132372,132375,132377,132379,132381,132384],{"class":107,"line":1186},[105,132373,132374],{"class":164},"  left",[105,132376,51422],{"class":115},[105,132378,816],{"class":164},[105,132380,51477],{"class":111},[105,132382,132383],{"class":115},";          ",[105,132385,132386],{"class":174},"\u002F* 边偏移：左 *\u002F\n",[105,132388,132389],{"class":107,"line":1192},[105,132390,1556],{"class":115},[253,132392,132393,132402],{},[256,132394,132395],{},[259,132396,132397,132399],{},[262,132398,268],{"align":23729},[262,132400,132401],{"align":23729},"语义",[300,132403,132404,132411,132418,132425],{},[259,132405,132406,132408],{},[305,132407,131990],{"align":23729},[305,132409,132410],{"align":23729},"静态定位",[259,132412,132413,132415],{},[305,132414,54749],{"align":23729},[305,132416,132417],{"align":23729},"相对定位",[259,132419,132420,132422],{},[305,132421,54816],{"align":23729},[305,132423,132424],{"align":23729},"绝对定位",[259,132426,132427,132429],{},[305,132428,86218],{"align":23729},[305,132430,132431],{"align":23729},"固定定位",[14,132433,132434],{},"（1）静态定位：",[1123,132436,132437,132448],{},[62,132438,132439,132440,132443,132444,132447],{},"静态定位是元素的 ",[265,132441,132442],{},"默认定位方式"," ， ",[265,132445,132446],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[62,132449,5173],{},[96,132451,132452],{"className":126537,"code":132330,"language":126539,"meta":22,"style":22},[102,132453,132454,132460,132472,132486,132500],{"__ignoreMap":22},[105,132455,132456,132458],{"class":107,"line":108},[105,132457,130385],{"class":1954},[105,132459,15564],{"class":115},[105,132461,132462,132464,132466,132468,132470],{"class":107,"line":28},[105,132463,132343],{"class":164},[105,132465,51422],{"class":115},[105,132467,54749],{"class":164},[105,132469,130400],{"class":115},[105,132471,132352],{"class":174},[105,132473,132474,132476,132478,132480,132482,132484],{"class":107,"line":1171},[105,132475,132357],{"class":164},[105,132477,51422],{"class":115},[105,132479,562],{"class":164},[105,132481,51477],{"class":111},[105,132483,132366],{"class":115},[105,132485,132369],{"class":174},[105,132487,132488,132490,132492,132494,132496,132498],{"class":107,"line":1186},[105,132489,132374],{"class":164},[105,132491,51422],{"class":115},[105,132493,816],{"class":164},[105,132495,51477],{"class":111},[105,132497,132383],{"class":115},[105,132499,132386],{"class":174},[105,132501,132502],{"class":107,"line":1192},[105,132503,1556],{"class":115},[1123,132505,132506,132509],{},[62,132507,132508],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[62,132510,132511],{},"静态定位在布局时我们几乎不用的",[14,132513,132514],{},"（2）相对定位",[1123,132516,132517,132524],{},[62,132518,132519,132520,132523],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[265,132521,132522],{},"原来的位置"," 来说的（自恋型）",[62,132525,5173],{},[96,132527,132528],{"className":126537,"code":132330,"language":126539,"meta":22,"style":22},[102,132529,132530,132536,132548,132562,132576],{"__ignoreMap":22},[105,132531,132532,132534],{"class":107,"line":108},[105,132533,130385],{"class":1954},[105,132535,15564],{"class":115},[105,132537,132538,132540,132542,132544,132546],{"class":107,"line":28},[105,132539,132343],{"class":164},[105,132541,51422],{"class":115},[105,132543,54749],{"class":164},[105,132545,130400],{"class":115},[105,132547,132352],{"class":174},[105,132549,132550,132552,132554,132556,132558,132560],{"class":107,"line":1171},[105,132551,132357],{"class":164},[105,132553,51422],{"class":115},[105,132555,562],{"class":164},[105,132557,51477],{"class":111},[105,132559,132366],{"class":115},[105,132561,132369],{"class":174},[105,132563,132564,132566,132568,132570,132572,132574],{"class":107,"line":1186},[105,132565,132374],{"class":164},[105,132567,51422],{"class":115},[105,132569,816],{"class":164},[105,132571,51477],{"class":111},[105,132573,132383],{"class":115},[105,132575,132386],{"class":174},[105,132577,132578],{"class":107,"line":1192},[105,132579,1556],{"class":115},[1123,132581,132582],{},[62,132583,132584,132585,132587,132588,132590,132591,132594,132595,132598,132599,132601,132602,132605],{},"相对定位的特点：",[53701,132586],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53701,132589],{},"  ② ",[265,132592,132593],{},"原来"," 在标准流的 ",[265,132596,132597],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53701,132600],{},"  ③因此， ",[265,132603,132604],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132607,132608],{},"（3）绝对定位",[1123,132610,132611,132620],{},[62,132612,132613,132615,132616,132619],{},[265,132614,132424],{}," 是元素在移动位置的时候，是相对于它 ",[265,132617,132618],{},"祖先元素"," 来说的（拼爹型）",[62,132621,5173],{},[96,132623,132624],{"className":126537,"code":132330,"language":126539,"meta":22,"style":22},[102,132625,132626,132632,132644,132658,132672],{"__ignoreMap":22},[105,132627,132628,132630],{"class":107,"line":108},[105,132629,130385],{"class":1954},[105,132631,15564],{"class":115},[105,132633,132634,132636,132638,132640,132642],{"class":107,"line":28},[105,132635,132343],{"class":164},[105,132637,51422],{"class":115},[105,132639,54749],{"class":164},[105,132641,130400],{"class":115},[105,132643,132352],{"class":174},[105,132645,132646,132648,132650,132652,132654,132656],{"class":107,"line":1171},[105,132647,132357],{"class":164},[105,132649,51422],{"class":115},[105,132651,562],{"class":164},[105,132653,51477],{"class":111},[105,132655,132366],{"class":115},[105,132657,132369],{"class":174},[105,132659,132660,132662,132664,132666,132668,132670],{"class":107,"line":1186},[105,132661,132374],{"class":164},[105,132663,51422],{"class":115},[105,132665,816],{"class":164},[105,132667,51477],{"class":111},[105,132669,132383],{"class":115},[105,132671,132386],{"class":174},[105,132673,132674],{"class":107,"line":1192},[105,132675,1556],{"class":115},[1123,132677,132678,132693,132702,132705],{},[62,132679,132680,132681,132683,132684,132686,132687,132689,132690,132692],{},"绝对定位的特点：",[53701,132682],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53701,132685],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53701,132688],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53701,132691],{},"  (4)固定定位",[62,132694,132695,132697,132698,132701],{},[265,132696,132431],{}," 是元素 ",[265,132699,132700],{},"固定于浏览器可视区的位置"," 。（认死理型）",[62,132703,132704],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[62,132706,132707],{},"语法:",[96,132709,132710],{"className":126537,"code":132330,"language":126539,"meta":22,"style":22},[102,132711,132712,132718,132730,132744,132758],{"__ignoreMap":22},[105,132713,132714,132716],{"class":107,"line":108},[105,132715,130385],{"class":1954},[105,132717,15564],{"class":115},[105,132719,132720,132722,132724,132726,132728],{"class":107,"line":28},[105,132721,132343],{"class":164},[105,132723,51422],{"class":115},[105,132725,54749],{"class":164},[105,132727,130400],{"class":115},[105,132729,132352],{"class":174},[105,132731,132732,132734,132736,132738,132740,132742],{"class":107,"line":1171},[105,132733,132357],{"class":164},[105,132735,51422],{"class":115},[105,132737,562],{"class":164},[105,132739,51477],{"class":111},[105,132741,132366],{"class":115},[105,132743,132369],{"class":174},[105,132745,132746,132748,132750,132752,132754,132756],{"class":107,"line":1186},[105,132747,132374],{"class":164},[105,132749,51422],{"class":115},[105,132751,816],{"class":164},[105,132753,51477],{"class":111},[105,132755,132383],{"class":115},[105,132757,132386],{"class":174},[105,132759,132760],{"class":107,"line":1192},[105,132761,1556],{"class":115},[1123,132763,132764,132773],{},[62,132765,132766,132767,132769,132770,132772],{},"特点:",[53701,132768],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53701,132771],{},"  ②固定定位不再占有原先的位置,完全脱标",[62,132774,132775,132776,132778,132779,132781,132782,132784],{},"固定在版心位置的方法:",[53701,132777],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53701,132780],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53701,132783],{},"  实例：",[96,132786,132787],{"className":126537,"code":132330,"language":126539,"meta":22,"style":22},[102,132788,132789,132795,132807,132821,132835],{"__ignoreMap":22},[105,132790,132791,132793],{"class":107,"line":108},[105,132792,130385],{"class":1954},[105,132794,15564],{"class":115},[105,132796,132797,132799,132801,132803,132805],{"class":107,"line":28},[105,132798,132343],{"class":164},[105,132800,51422],{"class":115},[105,132802,54749],{"class":164},[105,132804,130400],{"class":115},[105,132806,132352],{"class":174},[105,132808,132809,132811,132813,132815,132817,132819],{"class":107,"line":1171},[105,132810,132357],{"class":164},[105,132812,51422],{"class":115},[105,132814,562],{"class":164},[105,132816,51477],{"class":111},[105,132818,132366],{"class":115},[105,132820,132369],{"class":174},[105,132822,132823,132825,132827,132829,132831,132833],{"class":107,"line":1186},[105,132824,132374],{"class":164},[105,132826,51422],{"class":115},[105,132828,816],{"class":164},[105,132830,51477],{"class":111},[105,132832,132383],{"class":115},[105,132834,132386],{"class":174},[105,132836,132837],{"class":107,"line":1192},[105,132838,1556],{"class":115},[20,132840],{"style":126393,"src":132841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132843,132844],{},"(5)粘性定位",[1123,132846,132847,132850],{},[62,132848,132849],{},"粘性定位可以被认为是相对定位和固定定位的混合",[62,132851,5173],{},[96,132853,132854],{"className":126537,"code":132330,"language":126539,"meta":22,"style":22},[102,132855,132856,132862,132874,132888,132902],{"__ignoreMap":22},[105,132857,132858,132860],{"class":107,"line":108},[105,132859,130385],{"class":1954},[105,132861,15564],{"class":115},[105,132863,132864,132866,132868,132870,132872],{"class":107,"line":28},[105,132865,132343],{"class":164},[105,132867,51422],{"class":115},[105,132869,54749],{"class":164},[105,132871,130400],{"class":115},[105,132873,132352],{"class":174},[105,132875,132876,132878,132880,132882,132884,132886],{"class":107,"line":1171},[105,132877,132357],{"class":164},[105,132879,51422],{"class":115},[105,132881,562],{"class":164},[105,132883,51477],{"class":111},[105,132885,132366],{"class":115},[105,132887,132369],{"class":174},[105,132889,132890,132892,132894,132896,132898,132900],{"class":107,"line":1186},[105,132891,132374],{"class":164},[105,132893,51422],{"class":115},[105,132895,816],{"class":164},[105,132897,51477],{"class":111},[105,132899,132383],{"class":115},[105,132901,132386],{"class":174},[105,132903,132904],{"class":107,"line":1192},[105,132905,1556],{"class":115},[1123,132907,132908],{},[62,132909,132910,132911,132913,132914,132916,132917,132919,132920,132923,132924,132926],{},"粘性定位的特点：",[53701,132912],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53701,132915],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53701,132918],{},"  ③必须添加 top 、left、right、bottom ",[265,132921,132922],{},"其中一个"," 才有效",[53701,132925],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[96,132928,132929],{"className":126537,"code":132330,"language":126539,"meta":22,"style":22},[102,132930,132931,132937,132949,132963,132977],{"__ignoreMap":22},[105,132932,132933,132935],{"class":107,"line":108},[105,132934,130385],{"class":1954},[105,132936,15564],{"class":115},[105,132938,132939,132941,132943,132945,132947],{"class":107,"line":28},[105,132940,132343],{"class":164},[105,132942,51422],{"class":115},[105,132944,54749],{"class":164},[105,132946,130400],{"class":115},[105,132948,132352],{"class":174},[105,132950,132951,132953,132955,132957,132959,132961],{"class":107,"line":1171},[105,132952,132357],{"class":164},[105,132954,51422],{"class":115},[105,132956,562],{"class":164},[105,132958,51477],{"class":111},[105,132960,132366],{"class":115},[105,132962,132369],{"class":174},[105,132964,132965,132967,132969,132971,132973,132975],{"class":107,"line":1186},[105,132966,132374],{"class":164},[105,132968,51422],{"class":115},[105,132970,816],{"class":164},[105,132972,51477],{"class":111},[105,132974,132383],{"class":115},[105,132976,132386],{"class":174},[105,132978,132979],{"class":107,"line":1192},[105,132980,1556],{"class":115},[20,132982],{"style":126393,"src":132983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,132985,132986],{},"(6)总结",[253,132988,132989,133004],{},[256,132990,132991],{},[259,132992,132993,132995,132998,133001],{},[262,132994,132327],{"align":23729},[262,132996,132997],{"align":23729},"是否脱标",[262,132999,133000],{"align":23729},"移动位置",[262,133002,133003],{"align":23729},"是否常用",[300,133005,133006,133019,133033,133047,133060],{},[259,133007,133008,133011,133013,133016],{},[305,133009,133010],{"align":23729},"Static 静态定位",[305,133012,104663],{"align":23729},[305,133014,133015],{"align":23729},"不能使用边偏移",[305,133017,133018],{"align":23729},"很少",[259,133020,133021,133024,133027,133030],{},[305,133022,133023],{"align":23729},"Relative 相对定位",[305,133025,133026],{"align":23729},"否(占有位置)",[305,133028,133029],{"align":23729},"相对于自身位置移动",[305,133031,133032],{"align":23729},"基本单独使用",[259,133034,133035,133038,133041,133044],{},[305,133036,133037],{"align":23729},"Absolute 绝对定位",[305,133039,133040],{"align":23729},"是(不占有位置)",[305,133042,133043],{"align":23729},"带有定位的父级",[305,133045,133046],{"align":23729},"要和定位父级元素搭配使用",[259,133048,133049,133052,133054,133057],{},[305,133050,133051],{"align":23729},"Fixed 固定定位",[305,133053,133040],{"align":23729},[305,133055,133056],{"align":23729},"浏览器可视区",[305,133058,133059],{"align":23729},"单独使用,不需要父级",[259,133061,133062,133065,133067,133069],{},[305,133063,133064],{"align":23729},"Sticky 粘性定位",[305,133066,133026],{"align":23729},[305,133068,133056],{"align":23729},[305,133070,133071],{"align":23729},"当前阶段少",[59,133073,133074],{"start":28},[62,133075,133076,133079],{},[265,133077,133078],{},"边偏移"," 则决定了该元素的最终位置",[253,133081,133082,133093],{},[256,133083,133084],{},[259,133085,133086,133089,133091],{},[262,133087,133088],{"align":23729},"边偏移属性",[262,133090,27477],{"align":23729},[262,133092,27474],{"align":23729},[300,133094,133095,133106,133117,133127],{},[259,133096,133097,133100,133103],{},[305,133098,133099],{"align":23729},"top",[305,133101,133102],{"align":23729},"top: 80px;",[305,133104,133105],{"align":23729},"顶端偏移量，定义元素相对于父元素上边线的距离",[259,133107,133108,133111,133114],{},[305,133109,133110],{"align":23729},"bottom",[305,133112,133113],{"align":23729},"bottom: 80px ;",[305,133115,133116],{"align":23729},"底部偏移量，定义元素相对于其父元素下边线的距离",[259,133118,133119,133121,133124],{},[305,133120,23729],{"align":23729},[305,133122,133123],{"align":23729},"left: 80px ;",[305,133125,133126],{"align":23729},"左侧偏移量，定义元素相对于其父元素左边线的距离",[259,133128,133129,133131,133134],{},[305,133130,72507],{"align":23729},[305,133132,133133],{"align":23729},"right: 80px ;",[305,133135,133136],{"align":23729},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1123,133138,133139],{},[62,133140,9017,133141,133143,133144,133146,133147,133149,133150,133153,133154,133156,133157,133159],{},[53701,133142],{},"  ① ",[265,133145,133078],{}," 需要和 ",[265,133148,132327],{}," 联合使用， ",[265,133151,133152],{},"单独使用无效"," ；",[53701,133155],{},"  ②top和bottom不要同时使用",[53701,133158],{},"  ③left和right不要同时使用",[21990,133161,133163],{"id":133162},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133165,133166],{},"子级是绝对定位的话，父级要用相对定位",[1123,133168,133169,133172,133175,133178],{},[62,133170,133171],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[62,133173,133174],{},"父盒子需要加定位限制子盒子在父盒子内显示",[62,133176,133177],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[62,133179,133180,133181,133184],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[265,133182,133183],{},"子绝父绝"," 也会遇到",[21990,133186,133188],{"id":133187},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1123,133190,133191,133206],{},[62,133192,133193,133194,133197,133198,133201,133202,133205],{},"在使用 ",[265,133195,133196],{},"定位"," 布局时，可能会 ",[265,133199,133200],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[265,133203,133204],{},"z-index"," 来控制盒子的前后次序 (z轴)",[62,133207,5173],{},[96,133209,133210],{"className":126537,"code":132330,"language":126539,"meta":22,"style":22},[102,133211,133212,133218,133230,133244,133258],{"__ignoreMap":22},[105,133213,133214,133216],{"class":107,"line":108},[105,133215,130385],{"class":1954},[105,133217,15564],{"class":115},[105,133219,133220,133222,133224,133226,133228],{"class":107,"line":28},[105,133221,132343],{"class":164},[105,133223,51422],{"class":115},[105,133225,54749],{"class":164},[105,133227,130400],{"class":115},[105,133229,132352],{"class":174},[105,133231,133232,133234,133236,133238,133240,133242],{"class":107,"line":1171},[105,133233,132357],{"class":164},[105,133235,51422],{"class":115},[105,133237,562],{"class":164},[105,133239,51477],{"class":111},[105,133241,132366],{"class":115},[105,133243,132369],{"class":174},[105,133245,133246,133248,133250,133252,133254,133256],{"class":107,"line":1186},[105,133247,132374],{"class":164},[105,133249,51422],{"class":115},[105,133251,816],{"class":164},[105,133253,51477],{"class":111},[105,133255,132383],{"class":115},[105,133257,132386],{"class":174},[105,133259,133260],{"class":107,"line":1192},[105,133261,1556],{"class":115},[1123,133263,133264],{},[62,133265,133266,133267,133143,133269,133271,133272,127700,133275,82524,133278,133280,133281,133283,133284,133287,133288,133153,133291,133293,133294,133297,133299],{},"z-index的特性",[53701,133268],{},[265,133270,127001],{}," ： ",[265,133273,133274],{},"正整数",[265,133276,133277],{},"负整数",[265,133279,307],{}," ，默认值是 0，数值越大，盒子越靠上；",[53701,133282],{},"  ②如果 ",[265,133285,133286],{},"属性值相同"," ，则按照书写顺序， ",[265,133289,133290],{},"后来居上",[53701,133292],{},"  ③数字后面 ",[265,133295,133296],{},"不能加单位",[53701,133298],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21990,133301,133303],{"id":133302},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133305,133306],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133308,133309],{},"方法:",[1123,133311,133312,133322],{},[62,133313,133314,133315,133318,133319],{},"left: 50%; 让 ",[265,133316,133317],{},"盒子的左侧"," 移动到 ",[265,133320,133321],{},"父级元素的水平中心位置",[62,133323,133324,133325,133328,133329],{},"margin-left: -100px; 让盒子 ",[265,133326,133327],{},"向左"," 移动 ",[265,133330,133331],{},"自身宽度的一半",[21990,133333,133335],{"id":133334},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[59,133337,133338,133341],{},[62,133339,133340],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[62,133342,133343],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133345,133346],{},"也就是说绝对定位和固定定位和浮动类似",[59,133348,133349],{"start":1171},[62,133350,133351],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1123,133353,133354,133357,133360],{},[62,133355,133356],{},"可以用inline-block 转换为行内块",[62,133358,133359],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[62,133361,133362],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133364,133365],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21990,133367,133369],{"id":133368},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[59,133371,133372,133375,133378,133381],{},[62,133373,133374],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[62,133376,133377],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[62,133379,133380],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[62,133382,133383],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[96,133385,133386],{"className":126537,"code":131003,"language":126539,"meta":22,"style":22},[102,133387,133388,133394,133404,133408,133414,133424],{"__ignoreMap":22},[105,133389,133390,133392],{"class":107,"line":108},[105,133391,131010],{"class":1954},[105,133393,15564],{"class":115},[105,133395,133396,133398,133400,133402],{"class":107,"line":28},[105,133397,131017],{"class":164},[105,133399,51422],{"class":115},[105,133401,23729],{"class":164},[105,133403,1282],{"class":115},[105,133405,133406],{"class":107,"line":1171},[105,133407,1556],{"class":115},[105,133409,133410,133412],{"class":107,"line":1186},[105,133411,131032],{"class":1954},[105,133413,15564],{"class":115},[105,133415,133416,133418,133420,133422],{"class":107,"line":1192},[105,133417,131017],{"class":164},[105,133419,51422],{"class":115},[105,133421,72507],{"class":164},[105,133423,1282],{"class":115},[105,133425,133426],{"class":107,"line":1206},[105,133427,1556],{"class":115},[20,133429],{"style":126393,"src":133430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21990,133432,133434],{"id":133433},"_11138-轮播图","11.1.3.8 轮播图",[20,133436],{"style":126393,"src":133437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[59,133439,133440],{},[62,133441,133442],{},"制作顺序:",[1123,133444,133445,133448,133451,133460],{},[62,133446,133447],{},"大盒子我们类名为： tb-promo 淘宝广告",[62,133449,133450],{},"里面先放一张图片",[62,133452,133453,133454,133456,133457,133459],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53701,133455],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53701,133458],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[62,133461,133462,133463,133465,133466,133468],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53701,133464],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53701,133467],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[59,133470,133471],{"start":28},[62,133472,133473],{},"代码模块",[96,133475,133477],{"className":126537,"code":133476,"language":126539,"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",[102,133478,133479,133484,133491,133501,133511,133521,133525,133530,133537,133547],{"__ignoreMap":22},[105,133480,133481],{"class":107,"line":108},[105,133482,133483],{"class":174},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[105,133485,133486,133489],{"class":107,"line":28},[105,133487,133488],{"class":1954},".son",[105,133490,15564],{"class":115},[105,133492,133493,133495,133497,133499],{"class":107,"line":1171},[105,133494,132343],{"class":164},[105,133496,51422],{"class":115},[105,133498,54816],{"class":164},[105,133500,1282],{"class":115},[105,133502,133503,133505,133507,133509],{"class":107,"line":1186},[105,133504,132357],{"class":164},[105,133506,51422],{"class":115},[105,133508,307],{"class":164},[105,133510,1282],{"class":115},[105,133512,133513,133515,133517,133519],{"class":107,"line":1192},[105,133514,132374],{"class":164},[105,133516,51422],{"class":115},[105,133518,307],{"class":164},[105,133520,1282],{"class":115},[105,133522,133523],{"class":107,"line":1206},[105,133524,1556],{"class":115},[105,133526,133527],{"class":107,"line":1212},[105,133528,133529],{"class":174},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[105,133531,133532,133535],{"class":107,"line":1303},[105,133533,133534],{"class":1954},".father",[105,133536,15564],{"class":115},[105,133538,133539,133541,133543,133545],{"class":107,"line":1309},[105,133540,132343],{"class":164},[105,133542,51422],{"class":115},[105,133544,54749],{"class":164},[105,133546,1282],{"class":115},[105,133548,133549],{"class":107,"line":1321},[105,133550,1556],{"class":115},[14,133552,133553],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[76,133555,133557],{"id":133556},"_1114-定位数值的移动","11.1.4 定位数值的移动",[20,133559],{"style":126393,"src":133560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133562,133563],{},"✨ 黄金口诀：",[14,133565,133566],{},"\"TOP正下负上，LEFT正右负左\"",[14,133568,133569],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133571,133572],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133574,133575],{},"✨ 简单记：",[14,133577,133578],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5118,133580,133581],{},"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":28,"depth":28,"links":133583},[133584],{"id":132111,"depth":28,"text":132112,"children":133585},[133586,133587,133588,133589],{"id":132115,"depth":1171,"text":132116},{"id":132130,"depth":1171,"text":132131},{"id":132298,"depth":1171,"text":132299},{"id":133556,"depth":1171,"text":133557},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132103,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133596,"title":133597,"body":133598,"description":23369,"extension":30,"meta":135021,"navigation":32,"path":135022,"seo":135023,"stem":135024,"__hash__":135025},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133599,"toc":135000},[133600,133603,133607,133615,133619,133624,133632,133644,133648,133653,133661,133672,133676,133681,133722,133730,133734,133737,133740,133743,133837,133840,133934,133937,134031,134034,134037,134072,134075,134078,134108,134111,134114,134117,134120,134123,134126,134129,134199,134202,134206,134210,134251,134255,134261,134264,134267,134271,134274,134277,134280,134361,134364,134367,134371,134375,134378,134381,134384,134387,134390,134396,134405,134409,134428,134432,134442,134445,134448,134451,134454,134457,134460,134463,134466,134475,134479,134488,134491,134496,134549,134554,134720,134723,134726,134731,134734,134737,134740,134743,134748,134896,134899,134902,134907,134910,134915,134949,134952,134955,134959,134962,134969,134972,134975,134978,134981,134984,134987,134990,134994,134997],[10,133601,133597],{"id":133602},"_12-显示隐藏与图形资源",[47,133604,133606],{"id":133605},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1123,133608,133609,133612],{},[62,133610,133611],{},"目的:让一个元素在页面中消失或者显示出来",[62,133613,133614],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[76,133616,133618],{"id":133617},"_1211-display-显示","12.1.1 display 显示",[59,133620,133621],{},[62,133622,133623],{},"display 设置或检索对象是否及如何显示",[1123,133625,133626,133629],{},[62,133627,133628],{},"display: none;隐藏对象",[62,133630,133631],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[59,133633,133634,133641],{"start":28},[62,133635,133636,133637,133640],{},"特点： display 隐藏元素后， ",[265,133638,133639],{},"不再占"," 有原来的位置",[62,133642,133643],{},"在js中使用非常的广泛",[76,133645,133647],{"id":133646},"_1212-visibility可见性","12.1.2 visibility可见性",[59,133649,133650],{},[62,133651,133652],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1123,133654,133655,133658],{},[62,133656,133657],{},"visibility： visible；元素可见",[62,133659,133660],{},"visibility：hidden；元素隐藏",[59,133662,133663,133666,133669],{"start":28},[62,133664,133665],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[62,133667,133668],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[62,133670,133671],{},"隐藏后继续占有原有位置",[76,133673,133675],{"id":133674},"_1213-overflow溢出","12.1.3 overflow溢出",[1123,133677,133678],{},[62,133679,133680],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[253,133682,133683,133691],{},[256,133684,133685],{},[259,133686,133687,133689],{},[262,133688,127001],{"align":23729},[262,133690,27474],{"align":23729},[300,133692,133693,133701,133708,133715],{},[259,133694,133695,133698],{},[305,133696,133697],{"align":23729},"visible",[305,133699,133700],{"align":23729},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[259,133702,133703,133705],{},[305,133704,61699],{"align":23729},[305,133706,133707],{"align":23729},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[259,133709,133710,133712],{},[305,133711,128957],{"align":23729},[305,133713,133714],{"align":23729},"不管超出内容否，总是显示滚动条",[259,133716,133717,133719],{},[305,133718,72648],{"align":23729},[305,133720,133721],{"align":23729},"超出自动显示滚动条，不超出不显示滚动条",[1123,133723,133724,133727],{},[62,133725,133726],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[62,133728,133729],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[76,133731,133733],{"id":133732},"_1214-案例收获","12.1.4 案例收获",[20,133735],{"style":126393,"src":133736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133738,133739],{},"问题：没做出来动态效果，使用hover没实现",[14,133741,133742],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[96,133744,133745],{"className":126537,"code":131969,"language":126539,"meta":22,"style":22},[102,133746,133747,133751,133765,133769,133783,133787,133801,133805,133819,133823],{"__ignoreMap":22},[105,133748,133749],{"class":107,"line":108},[105,133750,131976],{"class":174},[105,133752,133753,133755,133757,133759,133761,133763],{"class":107,"line":28},[105,133754,131981],{"class":1954},[105,133756,79792],{"class":115},[105,133758,128897],{"class":164},[105,133760,51422],{"class":115},[105,133762,131990],{"class":164},[105,133764,129467],{"class":115},[105,133766,133767],{"class":107,"line":1171},[105,133768,131997],{"class":174},[105,133770,133771,133773,133775,133777,133779,133781],{"class":107,"line":1186},[105,133772,132002],{"class":1954},[105,133774,79792],{"class":115},[105,133776,128897],{"class":164},[105,133778,51422],{"class":115},[105,133780,54749],{"class":164},[105,133782,129467],{"class":115},[105,133784,133785],{"class":107,"line":1192},[105,133786,132017],{"class":174},[105,133788,133789,133791,133793,133795,133797,133799],{"class":107,"line":1206},[105,133790,132022],{"class":1954},[105,133792,79792],{"class":115},[105,133794,128897],{"class":164},[105,133796,51422],{"class":115},[105,133798,54816],{"class":164},[105,133800,129467],{"class":115},[105,133802,133803],{"class":107,"line":1212},[105,133804,132037],{"class":174},[105,133806,133807,133809,133811,133813,133815,133817],{"class":107,"line":1303},[105,133808,132042],{"class":1954},[105,133810,79792],{"class":115},[105,133812,128897],{"class":164},[105,133814,51422],{"class":115},[105,133816,86218],{"class":164},[105,133818,129467],{"class":115},[105,133820,133821],{"class":107,"line":1309},[105,133822,132057],{"class":174},[105,133824,133825,133827,133829,133831,133833,133835],{"class":107,"line":1321},[105,133826,132062],{"class":1954},[105,133828,79792],{"class":115},[105,133830,128897],{"class":164},[105,133832,51422],{"class":115},[105,133834,132071],{"class":164},[105,133836,129467],{"class":115},[14,133838,133839],{},"完整代码：",[96,133841,133842],{"className":126537,"code":131969,"language":126539,"meta":22,"style":22},[102,133843,133844,133848,133862,133866,133880,133884,133898,133902,133916,133920],{"__ignoreMap":22},[105,133845,133846],{"class":107,"line":108},[105,133847,131976],{"class":174},[105,133849,133850,133852,133854,133856,133858,133860],{"class":107,"line":28},[105,133851,131981],{"class":1954},[105,133853,79792],{"class":115},[105,133855,128897],{"class":164},[105,133857,51422],{"class":115},[105,133859,131990],{"class":164},[105,133861,129467],{"class":115},[105,133863,133864],{"class":107,"line":1171},[105,133865,131997],{"class":174},[105,133867,133868,133870,133872,133874,133876,133878],{"class":107,"line":1186},[105,133869,132002],{"class":1954},[105,133871,79792],{"class":115},[105,133873,128897],{"class":164},[105,133875,51422],{"class":115},[105,133877,54749],{"class":164},[105,133879,129467],{"class":115},[105,133881,133882],{"class":107,"line":1192},[105,133883,132017],{"class":174},[105,133885,133886,133888,133890,133892,133894,133896],{"class":107,"line":1206},[105,133887,132022],{"class":1954},[105,133889,79792],{"class":115},[105,133891,128897],{"class":164},[105,133893,51422],{"class":115},[105,133895,54816],{"class":164},[105,133897,129467],{"class":115},[105,133899,133900],{"class":107,"line":1212},[105,133901,132037],{"class":174},[105,133903,133904,133906,133908,133910,133912,133914],{"class":107,"line":1303},[105,133905,132042],{"class":1954},[105,133907,79792],{"class":115},[105,133909,128897],{"class":164},[105,133911,51422],{"class":115},[105,133913,86218],{"class":164},[105,133915,129467],{"class":115},[105,133917,133918],{"class":107,"line":1309},[105,133919,132057],{"class":174},[105,133921,133922,133924,133926,133928,133930,133932],{"class":107,"line":1321},[105,133923,132062],{"class":1954},[105,133925,79792],{"class":115},[105,133927,128897],{"class":164},[105,133929,51422],{"class":115},[105,133931,132071],{"class":164},[105,133933,129467],{"class":115},[14,133935,133936],{},"分布思路重点详解：",[96,133938,133939],{"className":126537,"code":131969,"language":126539,"meta":22,"style":22},[102,133940,133941,133945,133959,133963,133977,133981,133995,133999,134013,134017],{"__ignoreMap":22},[105,133942,133943],{"class":107,"line":108},[105,133944,131976],{"class":174},[105,133946,133947,133949,133951,133953,133955,133957],{"class":107,"line":28},[105,133948,131981],{"class":1954},[105,133950,79792],{"class":115},[105,133952,128897],{"class":164},[105,133954,51422],{"class":115},[105,133956,131990],{"class":164},[105,133958,129467],{"class":115},[105,133960,133961],{"class":107,"line":1171},[105,133962,131997],{"class":174},[105,133964,133965,133967,133969,133971,133973,133975],{"class":107,"line":1186},[105,133966,132002],{"class":1954},[105,133968,79792],{"class":115},[105,133970,128897],{"class":164},[105,133972,51422],{"class":115},[105,133974,54749],{"class":164},[105,133976,129467],{"class":115},[105,133978,133979],{"class":107,"line":1192},[105,133980,132017],{"class":174},[105,133982,133983,133985,133987,133989,133991,133993],{"class":107,"line":1206},[105,133984,132022],{"class":1954},[105,133986,79792],{"class":115},[105,133988,128897],{"class":164},[105,133990,51422],{"class":115},[105,133992,54816],{"class":164},[105,133994,129467],{"class":115},[105,133996,133997],{"class":107,"line":1212},[105,133998,132037],{"class":174},[105,134000,134001,134003,134005,134007,134009,134011],{"class":107,"line":1303},[105,134002,132042],{"class":1954},[105,134004,79792],{"class":115},[105,134006,128897],{"class":164},[105,134008,51422],{"class":115},[105,134010,86218],{"class":164},[105,134012,129467],{"class":115},[105,134014,134015],{"class":107,"line":1309},[105,134016,132057],{"class":174},[105,134018,134019,134021,134023,134025,134027,134029],{"class":107,"line":1321},[105,134020,132062],{"class":1954},[105,134022,79792],{"class":115},[105,134024,128897],{"class":164},[105,134026,51422],{"class":115},[105,134028,132071],{"class":164},[105,134030,129467],{"class":115},[20,134032],{"style":126393,"src":134033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134035,134036],{},"图片太大，盒子太小，此时需要修改图片的大小",[96,134038,134040],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[102,134041,134042],{"__ignoreMap":22},[105,134043,134044,134046,134048,134050,134052,134055,134057,134059,134062,134065,134067,134070],{"class":107,"line":108},[105,134045,1026],{"class":115},[105,134047,20],{"class":51285},[105,134049,55224],{"class":1954},[105,134051,161],{"class":115},[105,134053,134054],{"class":220},"\"images\u002Fpic.jpg\"",[105,134056,55232],{"class":1954},[105,134058,161],{"class":115},[105,134060,134061],{"class":220},"\"描述文字\"",[105,134063,134064],{"class":1954}," title",[105,134066,161],{"class":115},[105,134068,134069],{"class":220},"\"悬停提示\"",[105,134071,51292],{"class":115},[20,134073],{"style":126393,"src":134074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134076,134077],{},"制造遮罩层",[96,134079,134080],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,134081,134082],{"__ignoreMap":22},[105,134083,134084,134086,134088,134090,134092,134094,134096,134098,134100,134102,134104,134106],{"class":107,"line":108},[105,134085,1026],{"class":115},[105,134087,20],{"class":51285},[105,134089,55224],{"class":1954},[105,134091,161],{"class":115},[105,134093,134054],{"class":220},[105,134095,55232],{"class":1954},[105,134097,161],{"class":115},[105,134099,134061],{"class":220},[105,134101,134064],{"class":1954},[105,134103,161],{"class":115},[105,134105,134069],{"class":220},[105,134107,51292],{"class":115},[14,134109,134110],{},"此时是这样的为标准流",[20,134112],{"style":126393,"src":134113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134115,134116],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134118,134119],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134121,134122],{},"让他在中间，用center(background-position)",[14,134124,134125],{},"将需要变的尽可能放到一个盒子中",[14,134127,134128],{},"放大盒子上内部盒子发生变化",[96,134130,134132],{"className":126537,"code":134131,"language":126539,"meta":22,"style":22},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[102,134133,134134,134140,134150,134154,134161,134171,134183,134195],{"__ignoreMap":22},[105,134135,134136,134138],{"class":107,"line":108},[105,134137,127604],{"class":1954},[105,134139,15564],{"class":115},[105,134141,134142,134144,134146,134148],{"class":107,"line":28},[105,134143,132343],{"class":164},[105,134145,51422],{"class":115},[105,134147,54749],{"class":164},[105,134149,1282],{"class":115},[105,134151,134152],{"class":107,"line":1171},[105,134153,1556],{"class":115},[105,134155,134156,134159],{"class":107,"line":1186},[105,134157,134158],{"class":1954},".child",[105,134160,15564],{"class":115},[105,134162,134163,134165,134167,134169],{"class":107,"line":1192},[105,134164,132343],{"class":164},[105,134166,51422],{"class":115},[105,134168,54816],{"class":164},[105,134170,1282],{"class":115},[105,134172,134173,134175,134177,134179,134181],{"class":107,"line":1206},[105,134174,132357],{"class":164},[105,134176,51422],{"class":115},[105,134178,772],{"class":164},[105,134180,444],{"class":111},[105,134182,1282],{"class":115},[105,134184,134185,134187,134189,134191,134193],{"class":107,"line":1212},[105,134186,132374],{"class":164},[105,134188,51422],{"class":115},[105,134190,772],{"class":164},[105,134192,444],{"class":111},[105,134194,1282],{"class":115},[105,134196,134197],{"class":107,"line":1303},[105,134198,1556],{"class":115},[14,134200,134201],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[47,134203,134205],{"id":134204},"_122-精灵图","12.2 精灵图",[76,134207,134209],{"id":134208},"_1221-理解","12.2.1 理解",[59,134211,134212,134230],{},[62,134213,134214,134215,132443,134218,134221,134222,134225,134226,134229],{},"目的： ",[265,134216,134217],{},"为了有效地减少服务器接收和发送请求的次数",[265,134219,134220],{},"提高"," 页面的 ",[265,134223,134224],{},"加载速度"," ，出现了 ",[265,134227,134228],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[62,134231,134232,134233,134235,134236,134238,134239,134241,134242,134244,134245,134247,134248,134250],{},"使用精灵图核心：",[53701,134234],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53701,134237],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53701,134240],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53701,134243],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53701,134246],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53701,134249],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[76,134252,134254],{"id":134253},"_1222-扒图","12.2.2 扒图",[96,134256,134259],{"className":134257,"code":134258,"language":5179},[5177],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[102,134260,134258],{"__ignoreMap":22},[20,134262],{"style":126393,"src":134263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[20,134265],{"style":126393,"src":134266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[76,134268,134270],{"id":134269},"_1223-精灵图的实现","12.2.3 精灵图的实现",[20,134272],{"style":126393,"src":134273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134275,134276],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[20,134278],{"style":126393,"src":134279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[96,134281,134283],{"className":126537,"code":134282,"language":126539,"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",[102,134284,134285,134290,134297,134309,134321,134340,134357],{"__ignoreMap":22},[105,134286,134287],{"class":107,"line":108},[105,134288,134289],{"class":174},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[105,134291,134292,134295],{"class":107,"line":28},[105,134293,134294],{"class":1954},".icon",[105,134296,15564],{"class":115},[105,134298,134299,134301,134303,134305,134307],{"class":107,"line":1171},[105,134300,70553],{"class":164},[105,134302,51422],{"class":115},[105,134304,816],{"class":164},[105,134306,51477],{"class":111},[105,134308,1282],{"class":115},[105,134310,134311,134313,134315,134317,134319],{"class":107,"line":1186},[105,134312,70773],{"class":164},[105,134314,51422],{"class":115},[105,134316,816],{"class":164},[105,134318,51477],{"class":111},[105,134320,1282],{"class":115},[105,134322,134323,134325,134327,134329,134331,134334,134336,134338],{"class":107,"line":1192},[105,134324,70596],{"class":164},[105,134326,51422],{"class":115},[105,134328,61711],{"class":164},[105,134330,116],{"class":115},[105,134332,134333],{"class":5208},"sprites.png",[105,134335,13706],{"class":115},[105,134337,61721],{"class":164},[105,134339,1282],{"class":115},[105,134341,134342,134344,134346,134348,134350,134353,134355],{"class":107,"line":1206},[105,134343,128797],{"class":164},[105,134345,51422],{"class":115},[105,134347,51748],{"class":164},[105,134349,51477],{"class":111},[105,134351,134352],{"class":164}," -20",[105,134354,51477],{"class":111},[105,134356,1282],{"class":115},[105,134358,134359],{"class":107,"line":1212},[105,134360,1556],{"class":115},[20,134362],{"style":126393,"src":134363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134365,134366],{},"在前端中坐标轴的正方向是右和下",[47,134368,134370],{"id":134369},"_123-字体图标","12.3 字体图标",[76,134372,134374],{"id":134373},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134376,134377],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134379,134380],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134382,134383],{},"1.图片文件还是比较大的。",[14,134385,134386],{},"2.图片本身放大和缩小会失真。",[14,134388,134389],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134391,134392,134393,25725],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[265,134394,134395],{},"字体图标 iconfont",[14,134397,134398,134401,134402,28370],{},[265,134399,134400],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[265,134403,134404],{},"展示的是图标，本质属于字体",[76,134406,134408],{"id":134407},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1123,134410,134411,134416,134419,134422,134425],{},[62,134412,134413,134415],{},[265,134414,25861],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[62,134417,134418],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[62,134420,134421],{},"兼容性：几乎支持所有的浏览器，请放心使用",[62,134423,134424],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[62,134426,134427],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[76,134429,134431],{"id":134430},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1123,134433,134434],{},[62,134435,134436,134437],{},"icomoon字体库：",[354,134438,134441],{"href":134439,"rel":134440},"http:\u002F\u002Ficomoon.io\u002F",[23858],"http:\u002F\u002Ficomoon.io",[14,134443,134444],{},"进去之后点icomoon app",[20,134446],{"style":126393,"src":134447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134449,134450],{},"可以对其编辑：",[20,134452],{"style":126393,"src":134453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134455,134456],{},"生成字体：",[20,134458],{"style":126393,"src":134459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134461,134462],{},"下载：",[20,134464],{"style":126393,"src":134465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1123,134467,134468],{},[62,134469,134470,134471],{},"阿里iconfont字体库： ",[354,134472,134473],{"href":134473,"rel":134474},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23858],[76,134476,134478],{"id":134477},"_1234-字体图标的引入","12.3.4 字体图标的引入",[59,134480,134481],{},[62,134482,134483,134484,134487],{},"把下载包里面的 ",[265,134485,134486],{},"fonts"," 文件夹放入页面根目录下",[20,134489],{"style":126393,"src":134490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[59,134492,134493],{"start":28},[62,134494,134495],{},"字体文件格式",[253,134497,134498,134507],{},[256,134499,134500],{},[259,134501,134502,134505],{},[262,134503,134504],{"align":23729},"格式",[262,134506,23733],{"align":23729},[300,134508,134509,134519,134529,134539],{},[259,134510,134511,134516],{},[305,134512,134513],{"align":23729},[265,134514,134515],{},".ttf",[305,134517,134518],{"align":23729},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[259,134520,134521,134526],{},[305,134522,134523],{"align":23729},[265,134524,134525],{},".woff",[305,134527,134528],{"align":23729},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[259,134530,134531,134536],{},[305,134532,134533],{"align":23729},[265,134534,134535],{},".eot",[305,134537,134538],{"align":23729},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[259,134540,134541,134546],{},[305,134542,134543],{"align":23729},[265,134544,134545],{},"svg",[305,134547,134548],{"align":23729},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[59,134550,134551],{"start":1171},[62,134552,134553],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[96,134555,134557],{"className":126537,"code":134556,"language":126539,"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",[102,134558,134559,134564,134571,134583,134599,134624,134645,134665,134685,134689,134695,134705,134716],{"__ignoreMap":22},[105,134560,134561],{"class":107,"line":108},[105,134562,134563],{"class":174},"\u002F* 引入字体图标 *\u002F\n",[105,134565,134566,134569],{"class":107,"line":28},[105,134567,134568],{"class":111},"@font-face",[105,134570,15564],{"class":115},[105,134572,134573,134576,134578,134581],{"class":107,"line":1171},[105,134574,134575],{"class":164},"  font-family",[105,134577,51422],{"class":115},[105,134579,134580],{"class":220},"'icomoon'",[105,134582,1282],{"class":115},[105,134584,134585,134588,134590,134592,134594,134597],{"class":107,"line":1186},[105,134586,134587],{"class":164},"  src",[105,134589,51422],{"class":115},[105,134591,61711],{"class":164},[105,134593,116],{"class":115},[105,134595,134596],{"class":220},"'fonts\u002Ficomoon.eot'",[105,134598,2710],{"class":115},[105,134600,134601,134603,134605,134607,134609,134612,134614,134617,134619,134622],{"class":107,"line":1192},[105,134602,134587],{"class":164},[105,134604,51422],{"class":115},[105,134606,61711],{"class":164},[105,134608,116],{"class":115},[105,134610,134611],{"class":220},"'fonts\u002Ficomoon.eot?#iefix'",[105,134613,13706],{"class":115},[105,134615,134616],{"class":164},"format",[105,134618,116],{"class":115},[105,134620,134621],{"class":220},"'embedded-opentype'",[105,134623,38032],{"class":115},[105,134625,134626,134629,134631,134634,134636,134638,134640,134643],{"class":107,"line":1206},[105,134627,134628],{"class":164},"       url",[105,134630,116],{"class":115},[105,134632,134633],{"class":220},"'fonts\u002Ficomoon.woff'",[105,134635,13706],{"class":115},[105,134637,134616],{"class":164},[105,134639,116],{"class":115},[105,134641,134642],{"class":220},"'woff'",[105,134644,38032],{"class":115},[105,134646,134647,134649,134651,134654,134656,134658,134660,134663],{"class":107,"line":1212},[105,134648,134628],{"class":164},[105,134650,116],{"class":115},[105,134652,134653],{"class":220},"'fonts\u002Ficomoon.ttf'",[105,134655,13706],{"class":115},[105,134657,134616],{"class":164},[105,134659,116],{"class":115},[105,134661,134662],{"class":220},"'truetype'",[105,134664,38032],{"class":115},[105,134666,134667,134669,134671,134674,134676,134678,134680,134683],{"class":107,"line":1303},[105,134668,134628],{"class":164},[105,134670,116],{"class":115},[105,134672,134673],{"class":220},"'fonts\u002Ficomoon.svg#icomoon'",[105,134675,13706],{"class":115},[105,134677,134616],{"class":164},[105,134679,116],{"class":115},[105,134681,134682],{"class":220},"'svg'",[105,134684,2710],{"class":115},[105,134686,134687],{"class":107,"line":1309},[105,134688,1556],{"class":115},[105,134690,134691,134693],{"class":107,"line":1321},[105,134692,134294],{"class":1954},[105,134694,15564],{"class":115},[105,134696,134697,134699,134701,134703],{"class":107,"line":1603},[105,134698,134575],{"class":164},[105,134700,51422],{"class":115},[105,134702,134580],{"class":220},[105,134704,1282],{"class":115},[105,134706,134707,134710,134712,134714],{"class":107,"line":1608},[105,134708,134709],{"class":164},"  font-style",[105,134711,51422],{"class":115},[105,134713,63826],{"class":164},[105,134715,1282],{"class":115},[105,134717,134718],{"class":107,"line":1614},[105,134719,1556],{"class":115},[14,134721,134722],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[20,134724],{"style":126393,"src":134725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[59,134727,134728],{"start":1186},[62,134729,134730],{},"添加字体",[20,134732],{"style":126393,"src":134733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134735,134736],{},"复制：",[20,134738],{"style":126393,"src":134739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134741,134742],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[59,134744,134745],{"start":1192},[62,134746,134747],{},"代码展示：",[96,134749,134750],{"className":126537,"code":134556,"language":126539,"meta":22,"style":22},[102,134751,134752,134756,134762,134772,134786,134808,134826,134844,134862,134866,134872,134882,134892],{"__ignoreMap":22},[105,134753,134754],{"class":107,"line":108},[105,134755,134563],{"class":174},[105,134757,134758,134760],{"class":107,"line":28},[105,134759,134568],{"class":111},[105,134761,15564],{"class":115},[105,134763,134764,134766,134768,134770],{"class":107,"line":1171},[105,134765,134575],{"class":164},[105,134767,51422],{"class":115},[105,134769,134580],{"class":220},[105,134771,1282],{"class":115},[105,134773,134774,134776,134778,134780,134782,134784],{"class":107,"line":1186},[105,134775,134587],{"class":164},[105,134777,51422],{"class":115},[105,134779,61711],{"class":164},[105,134781,116],{"class":115},[105,134783,134596],{"class":220},[105,134785,2710],{"class":115},[105,134787,134788,134790,134792,134794,134796,134798,134800,134802,134804,134806],{"class":107,"line":1192},[105,134789,134587],{"class":164},[105,134791,51422],{"class":115},[105,134793,61711],{"class":164},[105,134795,116],{"class":115},[105,134797,134611],{"class":220},[105,134799,13706],{"class":115},[105,134801,134616],{"class":164},[105,134803,116],{"class":115},[105,134805,134621],{"class":220},[105,134807,38032],{"class":115},[105,134809,134810,134812,134814,134816,134818,134820,134822,134824],{"class":107,"line":1206},[105,134811,134628],{"class":164},[105,134813,116],{"class":115},[105,134815,134633],{"class":220},[105,134817,13706],{"class":115},[105,134819,134616],{"class":164},[105,134821,116],{"class":115},[105,134823,134642],{"class":220},[105,134825,38032],{"class":115},[105,134827,134828,134830,134832,134834,134836,134838,134840,134842],{"class":107,"line":1212},[105,134829,134628],{"class":164},[105,134831,116],{"class":115},[105,134833,134653],{"class":220},[105,134835,13706],{"class":115},[105,134837,134616],{"class":164},[105,134839,116],{"class":115},[105,134841,134662],{"class":220},[105,134843,38032],{"class":115},[105,134845,134846,134848,134850,134852,134854,134856,134858,134860],{"class":107,"line":1303},[105,134847,134628],{"class":164},[105,134849,116],{"class":115},[105,134851,134673],{"class":220},[105,134853,13706],{"class":115},[105,134855,134616],{"class":164},[105,134857,116],{"class":115},[105,134859,134682],{"class":220},[105,134861,2710],{"class":115},[105,134863,134864],{"class":107,"line":1309},[105,134865,1556],{"class":115},[105,134867,134868,134870],{"class":107,"line":1321},[105,134869,134294],{"class":1954},[105,134871,15564],{"class":115},[105,134873,134874,134876,134878,134880],{"class":107,"line":1603},[105,134875,134575],{"class":164},[105,134877,51422],{"class":115},[105,134879,134580],{"class":220},[105,134881,1282],{"class":115},[105,134883,134884,134886,134888,134890],{"class":107,"line":1608},[105,134885,134709],{"class":164},[105,134887,51422],{"class":115},[105,134889,63826],{"class":164},[105,134891,1282],{"class":115},[105,134893,134894],{"class":107,"line":1614},[105,134895,1556],{"class":115},[20,134897],{"style":126393,"src":134898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134900,134901],{},"更加细节展示：",[59,134903,134904],{},[62,134905,134906],{},"html 标签内添加小图标",[20,134908],{"style":126393,"src":134909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[59,134911,134912],{"start":28},[62,134913,134914],{},"给标签定义字体",[96,134916,134917],{"className":127284,"code":130641,"language":127286,"meta":22,"style":22},[102,134918,134919,134923,134937,134941],{"__ignoreMap":22},[105,134920,134921],{"class":107,"line":108},[105,134922,130648],{"class":174},[105,134924,134925,134927,134929,134931,134933,134935],{"class":107,"line":28},[105,134926,1026],{"class":115},[105,134928,51596],{"class":51285},[105,134930,53471],{"class":1954},[105,134932,161],{"class":115},[105,134934,130661],{"class":220},[105,134936,51292],{"class":115},[105,134938,134939],{"class":107,"line":1171},[105,134940,130668],{"class":115},[105,134942,134943,134945,134947],{"class":107,"line":1186},[105,134944,51770],{"class":115},[105,134946,51596],{"class":51285},[105,134948,51292],{"class":115},[14,134950,134951],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[20,134953],{"style":126393,"src":134954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[76,134956,134958],{"id":134957},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,134960,134961],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,134963,134964,134965,134968],{},"把压缩包里面的 ",[265,134966,134967],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,134970,134971],{},"打开网站，点下方：",[20,134973],{"style":126393,"src":134974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[20,134976],{"style":126393,"src":134977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[20,134979],{"style":126393,"src":134980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,134982,134983],{},"点yes重新加载",[14,134985,134986],{},"然后重复之前的操作就可以实现了",[14,134988,134989],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[76,134991,134993],{"id":134992},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[20,134995],{"style":126393,"src":134996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5118,134998,134999],{},"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":28,"depth":28,"links":135001},[135002,135008,135013],{"id":133605,"depth":28,"text":133606,"children":135003},[135004,135005,135006,135007],{"id":133617,"depth":1171,"text":133618},{"id":133646,"depth":1171,"text":133647},{"id":133674,"depth":1171,"text":133675},{"id":133732,"depth":1171,"text":133733},{"id":134204,"depth":28,"text":134205,"children":135009},[135010,135011,135012],{"id":134208,"depth":1171,"text":134209},{"id":134253,"depth":1171,"text":134254},{"id":134269,"depth":1171,"text":134270},{"id":134369,"depth":28,"text":134370,"children":135014},[135015,135016,135017,135018,135019,135020],{"id":134373,"depth":1171,"text":134374},{"id":134407,"depth":1171,"text":134408},{"id":134430,"depth":1171,"text":134431},{"id":134477,"depth":1171,"text":134478},{"id":134957,"depth":1171,"text":134958},{"id":134992,"depth":1171,"text":134993},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133597,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135027,"title":135028,"body":135029,"description":23369,"extension":30,"meta":136256,"navigation":32,"path":136257,"seo":136258,"stem":136259,"__hash__":136260},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135030,"toc":136237},[135031,135034,135038,135041,135055,135123,135153,135156,135160,135164,135266,135313,135317,135320,135323,135357,135360,135363,135366,135369,135372,135375,135378,135380,135383,135386,135389,135392,135395,135398,135401,135429,135432,135436,135439,135446,135449,135452,135478,135481,135485,135488,135491,135498,135502,135505,135507,135539,135542,135545,135557,135563,135566,135569,135572,135574,135578,135581,135584,135587,135632,135636,135638,135641,135648,135690,135693,135697,135702,135716,135720,135723,135726,135729,135732,135735,135769,135772,135775,135829,135832,135835,135838,135841,135893,135896,135899,135948,135952,135954,135957,135960,135963,135966,135969,136027,136030,136036,136039,136042,136074,136077,136081,136085,136088,136120,136124,136127,136171,136175,136178,136181,136184,136187,136190,136193,136196,136198,136201,136203,136206,136209,136212,136215,136220,136223,136225,136228,136231,136234],[10,135032,135028],{"id":135033},"_13-界面样式与布局技巧",[47,135035,135037],{"id":135036},"_131-css三角","13.1 css三角",[14,135039,135040],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1123,135042,135043,135046,135049,135052],{},[62,135044,135045],{},"用css 边框可以模拟三角效果",[62,135047,135048],{},"宽度高度为0",[62,135050,135051],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[62,135053,135054],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[96,135056,135058],{"className":126537,"code":135057,"language":126539,"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",[102,135059,135060,135065,135072,135082,135092,135108,135119],{"__ignoreMap":22},[105,135061,135062],{"class":107,"line":108},[105,135063,135064],{"class":174},"\u002F* CSS 实现三角形 *\u002F\n",[105,135066,135067,135070],{"class":107,"line":28},[105,135068,135069],{"class":1954},".triangle",[105,135071,15564],{"class":115},[105,135073,135074,135076,135078,135080],{"class":107,"line":1171},[105,135075,70553],{"class":164},[105,135077,51422],{"class":115},[105,135079,307],{"class":164},[105,135081,1282],{"class":115},[105,135083,135084,135086,135088,135090],{"class":107,"line":1186},[105,135085,70773],{"class":164},[105,135087,51422],{"class":115},[105,135089,307],{"class":164},[105,135091,1282],{"class":115},[105,135093,135094,135096,135098,135100,135102,135104,135106],{"class":107,"line":1192},[105,135095,70881],{"class":164},[105,135097,51422],{"class":115},[105,135099,562],{"class":164},[105,135101,51477],{"class":111},[105,135103,51506],{"class":164},[105,135105,63976],{"class":164},[105,135107,1282],{"class":115},[105,135109,135110,135113,135115,135117],{"class":107,"line":1206},[105,135111,135112],{"class":164},"  border-bottom-color",[105,135114,51422],{"class":115},[105,135116,62354],{"class":164},[105,135118,1282],{"class":115},[105,135120,135121],{"class":107,"line":1212},[105,135122,1556],{"class":115},[96,135124,135125],{"className":126537,"code":130694,"language":126539,"meta":22,"style":22},[102,135126,135127,135133,135149],{"__ignoreMap":22},[105,135128,135129,135131],{"class":107,"line":108},[105,135130,51596],{"class":51285},[105,135132,15564],{"class":115},[105,135134,135135,135137,135139,135141,135143,135145,135147],{"class":107,"line":28},[105,135136,70881],{"class":164},[105,135138,51422],{"class":115},[105,135140,333],{"class":164},[105,135142,51477],{"class":111},[105,135144,51506],{"class":164},[105,135146,129929],{"class":164},[105,135148,1282],{"class":115},[105,135150,135151],{"class":107,"line":1171},[105,135152,1556],{"class":115},[20,135154],{"style":126393,"src":135155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[47,135157,135159],{"id":135158},"_132-css用户界面样式","13.2 css用户界面样式",[76,135161,135163],{"id":135162},"_1321-鼠标样式","13.2.1 鼠标样式",[96,135165,135167],{"className":126537,"code":135166,"language":126539,"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",[102,135168,135169,135174,135193,135211,135230,135247],{"__ignoreMap":22},[105,135170,135171],{"class":107,"line":108},[105,135172,135173],{"class":174},"\u002F* 鼠标样式 *\u002F\n",[105,135175,135176,135178,135180,135183,135185,135187,135190],{"class":107,"line":28},[105,135177,51596],{"class":51285},[105,135179,79792],{"class":115},[105,135181,135182],{"class":164},"cursor",[105,135184,51422],{"class":115},[105,135186,62015],{"class":164},[105,135188,135189],{"class":115},"; }   ",[105,135191,135192],{"class":174},"\u002F* 手型 *\u002F\n",[105,135194,135195,135197,135199,135201,135203,135206,135208],{"class":107,"line":1171},[105,135196,51596],{"class":51285},[105,135198,79792],{"class":115},[105,135200,135182],{"class":164},[105,135202,51422],{"class":115},[105,135204,135205],{"class":164},"default",[105,135207,135189],{"class":115},[105,135209,135210],{"class":174},"\u002F* 默认 *\u002F\n",[105,135212,135213,135215,135217,135219,135221,135224,135227],{"class":107,"line":1186},[105,135214,51596],{"class":51285},[105,135216,79792],{"class":115},[105,135218,135182],{"class":164},[105,135220,51422],{"class":115},[105,135222,135223],{"class":164},"move",[105,135225,135226],{"class":115},"; }      ",[105,135228,135229],{"class":174},"\u002F* 移动 *\u002F\n",[105,135231,135232,135234,135236,135238,135240,135242,135244],{"class":107,"line":1192},[105,135233,51596],{"class":51285},[105,135235,79792],{"class":115},[105,135237,135182],{"class":164},[105,135239,51422],{"class":115},[105,135241,5179],{"class":164},[105,135243,135226],{"class":115},[105,135245,135246],{"class":174},"\u002F* 文本 *\u002F\n",[105,135248,135249,135251,135253,135255,135257,135260,135263],{"class":107,"line":1206},[105,135250,51596],{"class":51285},[105,135252,79792],{"class":115},[105,135254,135182],{"class":164},[105,135256,51422],{"class":115},[105,135258,135259],{"class":164},"not-allowed",[105,135261,135262],{"class":115},"; } ",[105,135264,135265],{"class":174},"\u002F* 禁止 *\u002F\n",[253,135267,135268,135276],{},[256,135269,135270],{},[259,135271,135272,135274],{},[262,135273,127001],{"align":23729},[262,135275,27474],{"align":23729},[300,135277,135278,135285,135292,135299,135306],{},[259,135279,135280,135282],{},[305,135281,135205],{"align":23729},[305,135283,135284],{"align":23729},"小白 默认",[259,135286,135287,135289],{},[305,135288,62015],{"align":23729},[305,135290,135291],{"align":23729},"小手",[259,135293,135294,135296],{},[305,135295,135223],{"align":23729},[305,135297,135298],{"align":23729},"移动",[259,135300,135301,135303],{},[305,135302,5179],{"align":23729},[305,135304,135305],{"align":23729},"文本",[259,135307,135308,135310],{},[305,135309,135259],{"align":23729},[305,135311,135312],{"align":23729},"禁止",[76,135314,135316],{"id":135315},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135318,135319],{},"去除表单轮廓线",[14,135321,135322],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[96,135324,135325],{"className":126537,"code":129901,"language":126539,"meta":22,"style":22},[102,135326,135327,135331,135337,135353],{"__ignoreMap":22},[105,135328,135329],{"class":107,"line":108},[105,135330,129908],{"class":174},[105,135332,135333,135335],{"class":107,"line":28},[105,135334,51596],{"class":51285},[105,135336,15564],{"class":115},[105,135338,135339,135341,135343,135345,135347,135349,135351],{"class":107,"line":1171},[105,135340,70881],{"class":164},[105,135342,51422],{"class":115},[105,135344,333],{"class":164},[105,135346,51477],{"class":111},[105,135348,51506],{"class":164},[105,135350,129929],{"class":164},[105,135352,1282],{"class":115},[105,135354,135355],{"class":107,"line":1186},[105,135356,1556],{"class":115},[14,135358,135359],{},"文本域：",[20,135361],{"style":126393,"src":135362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135364,135365],{},"此时会有一个空白区域",[20,135367],{"style":126393,"src":135368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135370,135371],{},"写在同一行就不会出现这个问题",[20,135373],{"style":126393,"src":135374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135376,135377],{},"文本域是行内块元素，一定记住！！！",[14,135379,98218],{},[20,135381],{"style":126393,"src":135382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135384,135385],{},"文本域尽量放在一行",[14,135387,135388],{},"知识回顾：cols是列，rols是行",[20,135390],{"style":126393,"src":135391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135393,135394],{},"它可以进行拖动，显然这是我们不愿意看到的",[20,135396],{"style":126393,"src":135397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135399,135400],{},"使用resize进行解决",[96,135402,135404],{"className":126537,"code":135403,"language":126539,"meta":22,"style":22},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[102,135405,135406,135412,135425],{"__ignoreMap":22},[105,135407,135408,135410],{"class":107,"line":108},[105,135409,53806],{"class":51285},[105,135411,15564],{"class":115},[105,135413,135414,135416,135418,135420,135422],{"class":107,"line":28},[105,135415,70783],{"class":164},[105,135417,51422],{"class":115},[105,135419,54722],{"class":164},[105,135421,130400],{"class":115},[105,135423,135424],{"class":174},"\u002F* 取消表单轮廓线 *\u002F\n",[105,135426,135427],{"class":107,"line":1171},[105,135428,1556],{"class":115},[14,135430,135431],{},"此时就无法通过右下方实现拖动了",[76,135433,135435],{"id":135434},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135437,135438],{},"实现一个盒子中的文字和图片对齐",[14,135440,135441,135442,135445],{},"用于设置一个元素的 ",[265,135443,135444],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135447,135448],{},"图片和文字默认是基线对齐",[20,135450],{"style":126393,"src":135451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[96,135453,135454],{"className":126537,"code":135403,"language":126539,"meta":22,"style":22},[102,135455,135456,135462,135474],{"__ignoreMap":22},[105,135457,135458,135460],{"class":107,"line":108},[105,135459,53806],{"class":51285},[105,135461,15564],{"class":115},[105,135463,135464,135466,135468,135470,135472],{"class":107,"line":28},[105,135465,70783],{"class":164},[105,135467,51422],{"class":115},[105,135469,54722],{"class":164},[105,135471,130400],{"class":115},[105,135473,135424],{"class":174},[105,135475,135476],{"class":107,"line":1171},[105,135477,1556],{"class":115},[20,135479],{"style":126393,"src":135480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21990,135482,135484],{"id":135483},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135486,135487],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[20,135489],{"style":126393,"src":135490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135492,135493,135494,135497],{},"此时可以给图片、表单这些行内块元素的 ",[265,135495,135496],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21990,135499,135501],{"id":135500},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135503,135504],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135506,14625],{},[96,135508,135510],{"className":126537,"code":135509,"language":126539,"meta":22,"style":22},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[102,135511,135512,135517,135523,135535],{"__ignoreMap":22},[105,135513,135514],{"class":107,"line":108},[105,135515,135516],{"class":174},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[105,135518,135519,135521],{"class":107,"line":28},[105,135520,20],{"class":51285},[105,135522,15564],{"class":115},[105,135524,135525,135528,135530,135533],{"class":107,"line":1171},[105,135526,135527],{"class":164},"  vertical-align",[105,135529,51422],{"class":115},[105,135531,135532],{"class":164},"middle",[105,135534,1282],{"class":115},[105,135536,135537],{"class":107,"line":1186},[105,135538,1556],{"class":115},[20,135540],{"style":126393,"src":135541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135543,135544],{},"主要解决方法有两种：",[59,135546,135547],{},[62,135548,135549,135552,135553,135556],{},[265,135550,135551],{},"给图片"," 添加 ",[265,135554,135555],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135558,135559,135560],{},"2.把图片转换为块级元素 ",[265,135561,135562],{},"display: block",[14,135564,135565],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135567,135568],{},"img {",[14,135570,135571],{},"vertical-align:middle;",[14,135573,1062],{},[76,135575,135577],{"id":135576},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135579,135580],{},"效果：",[20,135582],{"style":126393,"src":135583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135585,135586],{},"单行文本溢出显示省略号--必须满足三个条件：",[96,135588,135590],{"className":126537,"code":135589,"language":126539,"meta":22,"style":22},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[102,135591,135592,135597,135603,135613,135618,135628],{"__ignoreMap":22},[105,135593,135594],{"class":107,"line":108},[105,135595,135596],{"class":174},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[105,135598,135599,135601],{"class":107,"line":28},[105,135600,20],{"class":51285},[105,135602,15564],{"class":115},[105,135604,135605,135607,135609,135611],{"class":107,"line":1171},[105,135606,135527],{"class":164},[105,135608,51422],{"class":115},[105,135610,135532],{"class":164},[105,135612,1282],{"class":115},[105,135614,135615],{"class":107,"line":1186},[105,135616,135617],{"class":174},"  \u002F* 或 *\u002F\n",[105,135619,135620,135622,135624,135626],{"class":107,"line":1192},[105,135621,128153],{"class":164},[105,135623,51422],{"class":115},[105,135625,60854],{"class":164},[105,135627,1282],{"class":115},[105,135629,135630],{"class":107,"line":1206},[105,135631,1556],{"class":115},[76,135633,135635],{"id":135634},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135637,135580],{},[20,135639],{"style":126393,"src":135640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135642,135643,135644,135647],{},"多行文本溢出显示省略号， ",[265,135645,135646],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[96,135649,135650],{"className":126537,"code":135589,"language":126539,"meta":22,"style":22},[102,135651,135652,135656,135662,135672,135676,135686],{"__ignoreMap":22},[105,135653,135654],{"class":107,"line":108},[105,135655,135596],{"class":174},[105,135657,135658,135660],{"class":107,"line":28},[105,135659,20],{"class":51285},[105,135661,15564],{"class":115},[105,135663,135664,135666,135668,135670],{"class":107,"line":1171},[105,135665,135527],{"class":164},[105,135667,51422],{"class":115},[105,135669,135532],{"class":164},[105,135671,1282],{"class":115},[105,135673,135674],{"class":107,"line":1186},[105,135675,135617],{"class":174},[105,135677,135678,135680,135682,135684],{"class":107,"line":1192},[105,135679,128153],{"class":164},[105,135681,51422],{"class":115},[105,135683,60854],{"class":164},[105,135685,1282],{"class":115},[105,135687,135688],{"class":107,"line":1206},[105,135689,1556],{"class":115},[14,135691,135692],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[47,135694,135696],{"id":135695},"_133-常见布局技巧","13.3 常见布局技巧",[14,135698,135699],{},[265,135700,135701],{},"巧妙利用一个技术更快更好的布局：",[59,135703,135704,135707,135710,135713],{},[62,135705,135706],{},"margin负值的运用",[62,135708,135709],{},"文字围绕浮动元素",[62,135711,135712],{},"行内块的巧妙运用",[62,135714,135715],{},"CSS三角强化",[76,135717,135719],{"id":135718},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135721,135722],{},"应用场景：",[20,135724],{"style":126393,"src":135725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[20,135727],{"style":126393,"src":135728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135730,135731],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135733,135734],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[96,135736,135737],{"className":126537,"code":129901,"language":126539,"meta":22,"style":22},[102,135738,135739,135743,135749,135765],{"__ignoreMap":22},[105,135740,135741],{"class":107,"line":108},[105,135742,129908],{"class":174},[105,135744,135745,135747],{"class":107,"line":28},[105,135746,51596],{"class":51285},[105,135748,15564],{"class":115},[105,135750,135751,135753,135755,135757,135759,135761,135763],{"class":107,"line":1171},[105,135752,70881],{"class":164},[105,135754,51422],{"class":115},[105,135756,333],{"class":164},[105,135758,51477],{"class":111},[105,135760,51506],{"class":164},[105,135762,129929],{"class":164},[105,135764,1282],{"class":115},[105,135766,135767],{"class":107,"line":1186},[105,135768,1556],{"class":115},[20,135770],{"style":126393,"src":135771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135773,135774],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[96,135776,135778],{"className":126537,"code":135777,"language":126539,"meta":22,"style":22},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[102,135779,135780,135785,135791,135801,135813,135825],{"__ignoreMap":22},[105,135781,135782],{"class":107,"line":108},[105,135783,135784],{"class":174},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[105,135786,135787,135789],{"class":107,"line":28},[105,135788,130385],{"class":1954},[105,135790,15564],{"class":115},[105,135792,135793,135795,135797,135799],{"class":107,"line":1171},[105,135794,132343],{"class":164},[105,135796,51422],{"class":115},[105,135798,54749],{"class":164},[105,135800,1282],{"class":115},[105,135802,135803,135805,135807,135809,135811],{"class":107,"line":1186},[105,135804,132357],{"class":164},[105,135806,51422],{"class":115},[105,135808,562],{"class":164},[105,135810,51477],{"class":111},[105,135812,1282],{"class":115},[105,135814,135815,135817,135819,135821,135823],{"class":107,"line":1192},[105,135816,132374],{"class":164},[105,135818,51422],{"class":115},[105,135820,816],{"class":164},[105,135822,51477],{"class":111},[105,135824,1282],{"class":115},[105,135826,135827],{"class":107,"line":1206},[105,135828,1556],{"class":115},[14,135830,135831],{},"加上上述代码会发现：",[20,135833],{"style":126393,"src":135834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135836,135837],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135839,135840],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[96,135842,135843],{"className":126537,"code":135777,"language":126539,"meta":22,"style":22},[102,135844,135845,135849,135855,135865,135877,135889],{"__ignoreMap":22},[105,135846,135847],{"class":107,"line":108},[105,135848,135784],{"class":174},[105,135850,135851,135853],{"class":107,"line":28},[105,135852,130385],{"class":1954},[105,135854,15564],{"class":115},[105,135856,135857,135859,135861,135863],{"class":107,"line":1171},[105,135858,132343],{"class":164},[105,135860,51422],{"class":115},[105,135862,54749],{"class":164},[105,135864,1282],{"class":115},[105,135866,135867,135869,135871,135873,135875],{"class":107,"line":1186},[105,135868,132357],{"class":164},[105,135870,51422],{"class":115},[105,135872,562],{"class":164},[105,135874,51477],{"class":111},[105,135876,1282],{"class":115},[105,135878,135879,135881,135883,135885,135887],{"class":107,"line":1192},[105,135880,132374],{"class":164},[105,135882,51422],{"class":115},[105,135884,816],{"class":164},[105,135886,51477],{"class":111},[105,135888,1282],{"class":115},[105,135890,135891],{"class":107,"line":1206},[105,135892,1556],{"class":115},[14,135894,135895],{},"解决方式2：",[14,135897,135898],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[96,135900,135902],{"className":126537,"code":135901,"language":126539,"meta":22,"style":22},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[102,135903,135904,135910,135920,135932,135944],{"__ignoreMap":22},[105,135905,135906,135908],{"class":107,"line":108},[105,135907,51596],{"class":51285},[105,135909,15564],{"class":115},[105,135911,135912,135914,135916,135918],{"class":107,"line":28},[105,135913,132343],{"class":164},[105,135915,51422],{"class":115},[105,135917,54749],{"class":164},[105,135919,1282],{"class":115},[105,135921,135922,135924,135926,135928,135930],{"class":107,"line":1171},[105,135923,132357],{"class":164},[105,135925,51422],{"class":115},[105,135927,562],{"class":164},[105,135929,51477],{"class":111},[105,135931,1282],{"class":115},[105,135933,135934,135936,135938,135940,135942],{"class":107,"line":1186},[105,135935,132374],{"class":164},[105,135937,51422],{"class":115},[105,135939,816],{"class":164},[105,135941,51477],{"class":111},[105,135943,1282],{"class":115},[105,135945,135946],{"class":107,"line":1192},[105,135947,1556],{"class":115},[76,135949,135951],{"id":135950},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,135953,135722],{},[20,135955],{"style":126393,"src":135956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,135958,135959],{},"实现结构图：",[20,135961],{"style":126393,"src":135962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,135964,135965],{},"巧妙运用浮动元素不会压住文字的特性",[14,135967,135968],{},"代码显示：",[96,135970,135972],{"className":126537,"code":135971,"language":126539,"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",[102,135973,135974,135980,135990,135994,135999,136003,136009,136023],{"__ignoreMap":22},[105,135975,135976,135978],{"class":107,"line":108},[105,135977,130385],{"class":1954},[105,135979,15564],{"class":115},[105,135981,135982,135984,135986,135988],{"class":107,"line":28},[105,135983,131017],{"class":164},[105,135985,51422],{"class":115},[105,135987,23729],{"class":164},[105,135989,1282],{"class":115},[105,135991,135992],{"class":107,"line":1171},[105,135993,1556],{"class":115},[105,135995,135996],{"class":107,"line":1186},[105,135997,135998],{"class":115},"```Css\n",[105,136000,136001],{"class":107,"line":1192},[105,136002,130380],{"class":174},[105,136004,136005,136007],{"class":107,"line":1206},[105,136006,130385],{"class":1954},[105,136008,15564],{"class":115},[105,136010,136011,136013,136015,136017,136019,136021],{"class":107,"line":1212},[105,136012,70455],{"class":164},[105,136014,51422],{"class":115},[105,136016,307],{"class":164},[105,136018,51541],{"class":164},[105,136020,130400],{"class":115},[105,136022,130403],{"class":174},[105,136024,136025],{"class":107,"line":1303},[105,136026,1556],{"class":115},[14,136028,136029],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[96,136031,136034],{"className":136032,"code":136033,"language":5179},[5177],"\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",[102,136035,136033],{"__ignoreMap":22},[20,136037],{"style":126393,"src":136038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136040,136041],{},"最终展示结果：",[96,136043,136044],{"className":126537,"code":130373,"language":126539,"meta":22,"style":22},[102,136045,136046,136050,136056,136070],{"__ignoreMap":22},[105,136047,136048],{"class":107,"line":108},[105,136049,130380],{"class":174},[105,136051,136052,136054],{"class":107,"line":28},[105,136053,130385],{"class":1954},[105,136055,15564],{"class":115},[105,136057,136058,136060,136062,136064,136066,136068],{"class":107,"line":1171},[105,136059,70455],{"class":164},[105,136061,51422],{"class":115},[105,136063,307],{"class":164},[105,136065,51541],{"class":164},[105,136067,130400],{"class":115},[105,136069,130403],{"class":174},[105,136071,136072],{"class":107,"line":1186},[105,136073,1556],{"class":115},[20,136075],{"style":126393,"src":136076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[47,136078,136080],{"id":136079},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[76,136082,136084],{"id":136083},"_1341-原理","13.4.1 原理",[20,136086],{"style":126393,"src":136087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[96,136089,136090],{"className":126537,"code":130373,"language":126539,"meta":22,"style":22},[102,136091,136092,136096,136102,136116],{"__ignoreMap":22},[105,136093,136094],{"class":107,"line":108},[105,136095,130380],{"class":174},[105,136097,136098,136100],{"class":107,"line":28},[105,136099,130385],{"class":1954},[105,136101,15564],{"class":115},[105,136103,136104,136106,136108,136110,136112,136114],{"class":107,"line":1171},[105,136105,70455],{"class":164},[105,136107,51422],{"class":115},[105,136109,307],{"class":164},[105,136111,51541],{"class":164},[105,136113,130400],{"class":115},[105,136115,130403],{"class":174},[105,136117,136118],{"class":107,"line":1186},[105,136119,1556],{"class":115},[76,136121,136123],{"id":136122},"_1342-实例","13.4.2 实例",[20,136125],{"style":126393,"src":136126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[96,136128,136129],{"className":126537,"code":131003,"language":126539,"meta":22,"style":22},[102,136130,136131,136137,136147,136151,136157,136167],{"__ignoreMap":22},[105,136132,136133,136135],{"class":107,"line":108},[105,136134,131010],{"class":1954},[105,136136,15564],{"class":115},[105,136138,136139,136141,136143,136145],{"class":107,"line":28},[105,136140,131017],{"class":164},[105,136142,51422],{"class":115},[105,136144,23729],{"class":164},[105,136146,1282],{"class":115},[105,136148,136149],{"class":107,"line":1171},[105,136150,1556],{"class":115},[105,136152,136153,136155],{"class":107,"line":1186},[105,136154,131032],{"class":1954},[105,136156,15564],{"class":115},[105,136158,136159,136161,136163,136165],{"class":107,"line":1192},[105,136160,131017],{"class":164},[105,136162,51422],{"class":115},[105,136164,72507],{"class":164},[105,136166,1282],{"class":115},[105,136168,136169],{"class":107,"line":1206},[105,136170,1556],{"class":115},[47,136172,136174],{"id":136173},"_135-css的初始化","13.5 css的初始化",[14,136176,136177],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136179,136180],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136182,136183],{},"每个网页都必须首先进行 CSS初始化。",[14,136185,136186],{},"这里我们以 京东CSS初始化代码为例。",[14,136188,136189],{},"在网页右键查看网页源代码",[14,136191,136192],{},"找到css的link引入语句",[14,136194,136195],{},"然后ctrl+f 输入body",[14,136197,77211],{},[20,136199],{"style":126393,"src":136200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136202,77234],{},[20,136204],{"style":126393,"src":136205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136207,136208],{},"③打开了网页上传压缩的代码",[20,136210],{"style":126393,"src":136211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136213,136214],{},"④从body前可以查看这个网页的初始化代码",[14,136216,136217],{},[265,136218,136219],{},"Unicode编码字体：",[14,136221,136222],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136224,83192],{},[14,136226,136227],{},"黑体 \\9ED1\\4F53",[14,136229,136230],{},"宋体 \\5B8B\\4F53",[14,136232,136233],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5118,136235,136236],{},"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":28,"depth":28,"links":136238},[136239,136240,136247,136251,136255],{"id":135036,"depth":28,"text":135037},{"id":135158,"depth":28,"text":135159,"children":136241},[136242,136243,136244,136245,136246],{"id":135162,"depth":1171,"text":135163},{"id":135315,"depth":1171,"text":135316},{"id":135434,"depth":1171,"text":135435},{"id":135576,"depth":1171,"text":135577},{"id":135634,"depth":1171,"text":135635},{"id":135695,"depth":28,"text":135696,"children":136248},[136249,136250],{"id":135718,"depth":1171,"text":135719},{"id":135950,"depth":1171,"text":135951},{"id":136079,"depth":28,"text":136080,"children":136252},[136253,136254],{"id":136083,"depth":1171,"text":136084},{"id":136122,"depth":1171,"text":136123},{"id":136173,"depth":28,"text":136174},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135028,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136262,"title":136263,"body":136264,"description":23369,"extension":30,"meta":137950,"navigation":32,"path":137951,"seo":137952,"stem":137953,"__hash__":137954},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136265,"toc":137939},[136266,136269,136273,136277,136280,136287,136290,136293,136331,136334,136336,136350,136354,136363,136367,136372,136375,136378,136381,136416,136421,136424,136454,136457,136462,136465,136468,136498,136501,136555,136558,136562,136567,136579,136582,136586,136616,136619,136624,136627,136657,136660,136664,136681,136685,136689,136692,136725,136728,136732,136735,136738,136741,136744,136747,136858,136861,136864,136867,136969,136972,136976,136980,136984,136987,137027,137030,137032,137048,137052,137055,137060,137141,137144,137147,137273,137278,137281,137289,137292,137297,137382,137385,137389,137392,137395,137399,137419,137424,137508,137511,137516,137519,137522,137600,137603,137606,137609,137612,137615,137620,137623,137626,137698,137701,137706,137709,137806,137809,137815,137818,137821,137824,137827,137830,137833,137836,137839,137843,137848,137851,137884,137889,137892,137933,137936],[10,136267,136263],{"id":136268},"_14-html5与css3新特性",[47,136270,136272],{"id":136271},"_141-html5的新特性","14.1 HTML5的新特性",[76,136274,136276],{"id":136275},"_1411-基本标签","14.1.1 基本标签",[14,136278,136279],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136281,136282,136283,136286],{},"这些新特性都有兼容性问题，基本是 ",[265,136284,136285],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136288,136289],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136291,136292],{},"现在使用的是新特性：",[1123,136294,136295,136301,136307,136313,136319,136325],{},[62,136296,136297,136300],{},[102,136298,136299],{},"\u003Cheader>"," 头部标签",[62,136302,136303,136306],{},[102,136304,136305],{},"\u003Cnav>"," 导航标签",[62,136308,136309,136312],{},[102,136310,136311],{},"\u003Carticle>"," 内容标签",[62,136314,136315,136318],{},[102,136316,136317],{},"\u003Csection>"," 定义文档某个区域",[62,136320,136321,136324],{},[102,136322,136323],{},"\u003Caside>"," 侧边栏标签",[62,136326,136327,136330],{},[102,136328,136329],{},"\u003Cfooter>"," 尾部标签",[20,136332],{"style":126393,"src":136333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136335,145],{},[1123,136337,136338,136341,136344,136347],{},[62,136339,136340],{},"这种语义化标准主要是针对搜索引擎的",[62,136342,136343],{},"这些标签页面中可以经常使用",[62,136345,136346],{},"在IE9中，需要把这些元素转换为块级元素",[62,136348,136349],{},"移动端更喜欢使用这些标签",[76,136351,136353],{"id":136352},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136355,136356,136357,136359,136360,136362],{},"音频 ",[265,136358,28159],{}," 和视频 ",[265,136361,28168],{}," 两个标签",[21990,136364,136366],{"id":136365},"_14121-视频标签-video","14.1.2.1 视频标签- video",[59,136368,136369],{},[62,136370,136371],{},"支持格式：",[20,136373],{"style":126393,"src":136374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136376,136377],{},"尽量使用MP4，兼容性好",[14,136379,136380],{},"用MP4就可以",[96,136382,136384],{"className":127284,"code":136383,"language":127286,"meta":22,"style":22},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[102,136385,136386],{"__ignoreMap":22},[105,136387,136388,136390,136392,136394,136396,136399,136401,136404,136407,136410,136412,136414],{"class":107,"line":108},[105,136389,1026],{"class":115},[105,136391,28168],{"class":51285},[105,136393,55224],{"class":1954},[105,136395,161],{"class":115},[105,136397,136398],{"class":220},"\"movie.mp4\"",[105,136400,92408],{"class":1954},[105,136402,136403],{"class":1954}," autoplay",[105,136405,136406],{"class":1954}," muted",[105,136408,136409],{"class":1954}," loop",[105,136411,55299],{"class":115},[105,136413,28168],{"class":51285},[105,136415,51292],{"class":115},[59,136417,136418],{"start":28},[62,136419,136420],{},"兼容写法",[14,136422,136423],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[96,136425,136426],{"className":127284,"code":136383,"language":127286,"meta":22,"style":22},[102,136427,136428],{"__ignoreMap":22},[105,136429,136430,136432,136434,136436,136438,136440,136442,136444,136446,136448,136450,136452],{"class":107,"line":108},[105,136431,1026],{"class":115},[105,136433,28168],{"class":51285},[105,136435,55224],{"class":1954},[105,136437,161],{"class":115},[105,136439,136398],{"class":220},[105,136441,92408],{"class":1954},[105,136443,136403],{"class":1954},[105,136445,136406],{"class":1954},[105,136447,136409],{"class":1954},[105,136449,55299],{"class":115},[105,136451,28168],{"class":51285},[105,136453,51292],{"class":115},[14,136455,136456],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[59,136458,136459],{"start":1171},[62,136460,136461],{},"video常用属性",[20,136463],{"style":126393,"src":136464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136466,136467],{},"poster属性后面是跟的等待加载图片的地址",[96,136469,136470],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,136471,136472],{"__ignoreMap":22},[105,136473,136474,136476,136478,136480,136482,136484,136486,136488,136490,136492,136494,136496],{"class":107,"line":108},[105,136475,1026],{"class":115},[105,136477,20],{"class":51285},[105,136479,55224],{"class":1954},[105,136481,161],{"class":115},[105,136483,134054],{"class":220},[105,136485,55232],{"class":1954},[105,136487,161],{"class":115},[105,136489,134061],{"class":220},[105,136491,134064],{"class":1954},[105,136493,161],{"class":115},[105,136495,134069],{"class":220},[105,136497,51292],{"class":115},[14,136499,136500],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[96,136502,136504],{"className":126537,"code":136503,"language":126539,"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",[102,136505,136506,136511,136517,136541,136546,136551],{"__ignoreMap":22},[105,136507,136508],{"class":107,"line":108},[105,136509,136510],{"class":174},"\u002F* 2D 位移 *\u002F\n",[105,136512,136513,136515],{"class":107,"line":28},[105,136514,51596],{"class":51285},[105,136516,15564],{"class":115},[105,136518,136519,136522,136524,136527,136529,136531,136533,136535,136537,136539],{"class":107,"line":1171},[105,136520,136521],{"class":164},"  transform",[105,136523,51422],{"class":115},[105,136525,136526],{"class":164},"translate",[105,136528,116],{"class":115},[105,136530,427],{"class":164},[105,136532,51477],{"class":111},[105,136534,12427],{"class":115},[105,136536,772],{"class":164},[105,136538,51477],{"class":111},[105,136540,2710],{"class":115},[105,136542,136543],{"class":107,"line":1186},[105,136544,136545],{"class":174},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[105,136547,136548],{"class":107,"line":1192},[105,136549,136550],{"class":174},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[105,136552,136553],{"class":107,"line":1206},[105,136554,1556],{"class":115},[14,136556,136557],{},"muted:自动静音属性",[21990,136559,136561],{"id":136560},"_14122-音频标签audio","14.1.2.2 音频标签audio",[59,136563,136564],{},[62,136565,136566],{},"基本使用",[14,136568,136569,136570,136575,136576],{},"当前 ",[265,136571,136572],{},[102,136573,136574],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[265,136577,136578],{},"mp3格式",[20,136580],{"style":126393,"src":136581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[59,136583,136584],{"start":28},[62,136585,136420],{},[96,136587,136588],{"className":127284,"code":136383,"language":127286,"meta":22,"style":22},[102,136589,136590],{"__ignoreMap":22},[105,136591,136592,136594,136596,136598,136600,136602,136604,136606,136608,136610,136612,136614],{"class":107,"line":108},[105,136593,1026],{"class":115},[105,136595,28168],{"class":51285},[105,136597,55224],{"class":1954},[105,136599,161],{"class":115},[105,136601,136398],{"class":220},[105,136603,92408],{"class":1954},[105,136605,136403],{"class":1954},[105,136607,136406],{"class":1954},[105,136609,136409],{"class":1954},[105,136611,55299],{"class":115},[105,136613,28168],{"class":51285},[105,136615,51292],{"class":115},[14,136617,136618],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[59,136620,136621],{"start":1171},[62,136622,136623],{},"常用属性",[20,136625],{"style":126393,"src":136626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[96,136628,136629],{"className":127284,"code":136383,"language":127286,"meta":22,"style":22},[102,136630,136631],{"__ignoreMap":22},[105,136632,136633,136635,136637,136639,136641,136643,136645,136647,136649,136651,136653,136655],{"class":107,"line":108},[105,136634,1026],{"class":115},[105,136636,28168],{"class":51285},[105,136638,55224],{"class":1954},[105,136640,161],{"class":115},[105,136642,136398],{"class":220},[105,136644,92408],{"class":1954},[105,136646,136403],{"class":1954},[105,136648,136406],{"class":1954},[105,136650,136409],{"class":1954},[105,136652,55299],{"class":115},[105,136654,28168],{"class":51285},[105,136656,51292],{"class":115},[14,136658,136659],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21990,136661,136663],{"id":136662},"_14123-总结","14.1.2.3 总结",[1123,136665,136666,136669,136672,136675,136678],{},[62,136667,136668],{},"音频标签和视频标签使用方式基本一致",[62,136670,136671],{},"浏览器支持情况不同",[62,136673,136674],{},"谷歌浏览器把音频和视频自动播放禁止了",[62,136676,136677],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[62,136679,136680],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[76,136682,136684],{"id":136683},"_1413-表单元素","14.1.3 表单元素",[21990,136686,136688],{"id":136687},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[20,136690],{"style":126393,"src":136691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[96,136693,136695],{"className":127284,"code":136694,"language":127286,"meta":22,"style":22},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[102,136696,136697],{"__ignoreMap":22},[105,136698,136699,136701,136703,136705,136707,136709,136711,136713,136716,136718,136720,136723],{"class":107,"line":108},[105,136700,1026],{"class":115},[105,136702,53806],{"class":51285},[105,136704,53809],{"class":1954},[105,136706,161],{"class":115},[105,136708,62684],{"class":220},[105,136710,14912],{"class":1954},[105,136712,161],{"class":115},[105,136714,136715],{"class":220},"\"username\"",[105,136717,61005],{"class":1954},[105,136719,161],{"class":115},[105,136721,136722],{"class":220},"\"请输入用户名\"",[105,136724,51292],{"class":115},[20,136726],{"style":126393,"src":136727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21990,136729,136731],{"id":136730},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[20,136733],{"style":126393,"src":136734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136736,136737],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136739,136740],{},"快捷操作：",[20,136742],{"style":126393,"src":136743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136745,136746],{},"例子1：",[96,136748,136750],{"className":127284,"code":136749,"language":127286,"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",[102,136751,136752,136775,136802,136831,136850],{"__ignoreMap":22},[105,136753,136754,136756,136758,136760,136762,136765,136768,136770,136773],{"class":107,"line":108},[105,136755,1026],{"class":115},[105,136757,66610],{"class":51285},[105,136759,66613],{"class":1954},[105,136761,161],{"class":115},[105,136763,136764],{"class":220},"\"\u002Fsubmit\"",[105,136766,136767],{"class":1954}," method",[105,136769,161],{"class":115},[105,136771,136772],{"class":220},"\"post\"",[105,136774,51292],{"class":115},[105,136776,136777,136779,136781,136783,136785,136787,136789,136791,136793,136795,136797,136800],{"class":107,"line":28},[105,136778,52129],{"class":115},[105,136780,53806],{"class":51285},[105,136782,53809],{"class":1954},[105,136784,161],{"class":115},[105,136786,62684],{"class":220},[105,136788,14912],{"class":1954},[105,136790,161],{"class":115},[105,136792,136715],{"class":220},[105,136794,61005],{"class":1954},[105,136796,161],{"class":115},[105,136798,136799],{"class":220},"\"用户名\"",[105,136801,51292],{"class":115},[105,136803,136804,136806,136808,136810,136812,136815,136817,136819,136822,136824,136826,136829],{"class":107,"line":1171},[105,136805,52129],{"class":115},[105,136807,53806],{"class":51285},[105,136809,53809],{"class":1954},[105,136811,161],{"class":115},[105,136813,136814],{"class":220},"\"password\"",[105,136816,14912],{"class":1954},[105,136818,161],{"class":115},[105,136820,136821],{"class":220},"\"pwd\"",[105,136823,61005],{"class":1954},[105,136825,161],{"class":115},[105,136827,136828],{"class":220},"\"密码\"",[105,136830,51292],{"class":115},[105,136832,136833,136835,136837,136839,136841,136843,136846,136848],{"class":107,"line":1186},[105,136834,52129],{"class":115},[105,136836,53872],{"class":51285},[105,136838,53809],{"class":1954},[105,136840,161],{"class":115},[105,136842,66633],{"class":220},[105,136844,136845],{"class":115},">提交\u003C\u002F",[105,136847,53872],{"class":51285},[105,136849,51292],{"class":115},[105,136851,136852,136854,136856],{"class":107,"line":1192},[105,136853,51770],{"class":115},[105,136855,66610],{"class":51285},[105,136857,51292],{"class":115},[20,136859],{"style":126393,"src":136860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136862,136863],{},"value是表单域的内容",[14,136865,136866],{},"例子2：",[96,136868,136869],{"className":127284,"code":136749,"language":127286,"meta":22,"style":22},[102,136870,136871,136891,136917,136943,136961],{"__ignoreMap":22},[105,136872,136873,136875,136877,136879,136881,136883,136885,136887,136889],{"class":107,"line":108},[105,136874,1026],{"class":115},[105,136876,66610],{"class":51285},[105,136878,66613],{"class":1954},[105,136880,161],{"class":115},[105,136882,136764],{"class":220},[105,136884,136767],{"class":1954},[105,136886,161],{"class":115},[105,136888,136772],{"class":220},[105,136890,51292],{"class":115},[105,136892,136893,136895,136897,136899,136901,136903,136905,136907,136909,136911,136913,136915],{"class":107,"line":28},[105,136894,52129],{"class":115},[105,136896,53806],{"class":51285},[105,136898,53809],{"class":1954},[105,136900,161],{"class":115},[105,136902,62684],{"class":220},[105,136904,14912],{"class":1954},[105,136906,161],{"class":115},[105,136908,136715],{"class":220},[105,136910,61005],{"class":1954},[105,136912,161],{"class":115},[105,136914,136799],{"class":220},[105,136916,51292],{"class":115},[105,136918,136919,136921,136923,136925,136927,136929,136931,136933,136935,136937,136939,136941],{"class":107,"line":1171},[105,136920,52129],{"class":115},[105,136922,53806],{"class":51285},[105,136924,53809],{"class":1954},[105,136926,161],{"class":115},[105,136928,136814],{"class":220},[105,136930,14912],{"class":1954},[105,136932,161],{"class":115},[105,136934,136821],{"class":220},[105,136936,61005],{"class":1954},[105,136938,161],{"class":115},[105,136940,136828],{"class":220},[105,136942,51292],{"class":115},[105,136944,136945,136947,136949,136951,136953,136955,136957,136959],{"class":107,"line":1186},[105,136946,52129],{"class":115},[105,136948,53872],{"class":51285},[105,136950,53809],{"class":1954},[105,136952,161],{"class":115},[105,136954,66633],{"class":220},[105,136956,136845],{"class":115},[105,136958,53872],{"class":51285},[105,136960,51292],{"class":115},[105,136962,136963,136965,136967],{"class":107,"line":1192},[105,136964,51770],{"class":115},[105,136966,66610],{"class":51285},[105,136968,51292],{"class":115},[20,136970],{"style":126393,"src":136971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[47,136973,136975],{"id":136974},"_142-css新特性","14.2 CSS新特性",[76,136977,136979],{"id":136978},"_1421-新增选择器","14.2.1 新增选择器",[21990,136981,136983],{"id":136982},"_14211-属性选择器","14.2.1.1 属性选择器",[20,136985],{"style":126393,"src":136986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[96,136988,136990],{"className":126537,"code":136989,"language":126539,"meta":22,"style":22},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[102,136991,136992,137007,137023],{"__ignoreMap":22},[105,136993,136994,136996,136998,137000,137002,137004],{"class":107,"line":108},[105,136995,53806],{"class":51285},[105,136997,1006],{"class":115},[105,136999,103092],{"class":1954},[105,137001,161],{"class":111},[105,137003,62684],{"class":220},[105,137005,137006],{"class":115},"] {\n",[105,137008,137009,137011,137013,137015,137017,137019,137021],{"class":107,"line":28},[105,137010,70881],{"class":164},[105,137012,51422],{"class":115},[105,137014,333],{"class":164},[105,137016,51477],{"class":111},[105,137018,51506],{"class":164},[105,137020,130117],{"class":164},[105,137022,1282],{"class":115},[105,137024,137025],{"class":107,"line":1171},[105,137026,1556],{"class":115},[20,137028],{"style":126393,"src":137029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137031,145],{},[1123,137033,137034,137037,137040,137043],{},[62,137035,137036],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[62,137038,137039],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[62,137041,137042],{},"属性选择器也可以选择出来自定义的属性",[62,137044,137045,137047],{},[265,137046,9017],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21990,137049,137051],{"id":137050},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[20,137053],{"style":126393,"src":137054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[59,137056,137057],{},[62,137058,137059],{},"fist-child",[96,137061,137063],{"className":126537,"code":137062,"language":126539,"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",[102,137064,137065,137070,137085,137105,137123],{"__ignoreMap":22},[105,137066,137067],{"class":107,"line":108},[105,137068,137069],{"class":174},"\u002F* 属性选择器 *\u002F\n",[105,137071,137072,137074,137076,137078,137080,137082],{"class":107,"line":28},[105,137073,53806],{"class":51285},[105,137075,1006],{"class":115},[105,137077,103092],{"class":1954},[105,137079,161],{"class":111},[105,137081,62684],{"class":220},[105,137083,137084],{"class":115},"] { }\n",[105,137086,137087,137089,137091,137093,137096,137099,137102],{"class":107,"line":1171},[105,137088,53806],{"class":51285},[105,137090,1006],{"class":115},[105,137092,14686],{"class":1954},[105,137094,137095],{"class":111},"^=",[105,137097,137098],{"class":220},"\"icon\"",[105,137100,137101],{"class":115},"] { }  ",[105,137103,137104],{"class":174},"\u002F* 以 icon 开头 *\u002F\n",[105,137106,137107,137109,137111,137113,137116,137118,137120],{"class":107,"line":1186},[105,137108,53806],{"class":51285},[105,137110,1006],{"class":115},[105,137112,14686],{"class":1954},[105,137114,137115],{"class":111},"$=",[105,137117,137098],{"class":220},[105,137119,137101],{"class":115},[105,137121,137122],{"class":174},"\u002F* 以 icon 结尾 *\u002F\n",[105,137124,137125,137127,137129,137131,137134,137136,137138],{"class":107,"line":1192},[105,137126,53806],{"class":51285},[105,137128,1006],{"class":115},[105,137130,14686],{"class":1954},[105,137132,137133],{"class":111},"*=",[105,137135,137098],{"class":220},[105,137137,137101],{"class":115},[105,137139,137140],{"class":174},"\u002F* 包含 icon *\u002F\n",[14,137142,137143],{},"ul的第一个儿子文本为红色",[14,137145,137146],{},"一定要在冒号前加空格，不然就是选中所有的了",[96,137148,137150],{"className":126537,"code":137149,"language":126539,"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",[102,137151,137152,137158,137168,137172,137176,137181,137194,137207,137223,137240,137257],{"__ignoreMap":22},[105,137153,137154,137156],{"class":107,"line":108},[105,137155,126828],{"class":1954},[105,137157,15564],{"class":115},[105,137159,137160,137162,137164,137166],{"class":107,"line":28},[105,137161,70890],{"class":164},[105,137163,51422],{"class":115},[105,137165,57406],{"class":164},[105,137167,1282],{"class":115},[105,137169,137170],{"class":107,"line":1171},[105,137171,1556],{"class":115},[105,137173,137174],{"class":107,"line":1186},[105,137175,135998],{"class":115},[105,137177,137178],{"class":107,"line":1192},[105,137179,137180],{"class":174},"\u002F* 结构伪类选择器 *\u002F\n",[105,137182,137183,137185,137188,137191],{"class":107,"line":1206},[105,137184,62],{"class":51285},[105,137186,137187],{"class":1954},":first-child",[105,137189,137190],{"class":115}," { }           ",[105,137192,137193],{"class":174},"\u002F* 第一个 *\u002F\n",[105,137195,137196,137198,137201,137204],{"class":107,"line":1212},[105,137197,62],{"class":51285},[105,137199,137200],{"class":1954},":last-child",[105,137202,137203],{"class":115}," { }            ",[105,137205,137206],{"class":174},"\u002F* 最后一个 *\u002F\n",[105,137208,137209,137211,137213,137215,137217,137220],{"class":107,"line":1303},[105,137210,62],{"class":51285},[105,137212,129451],{"class":1954},[105,137214,116],{"class":115},[105,137216,193],{"class":164},[105,137218,137219],{"class":115},") { }          ",[105,137221,137222],{"class":174},"\u002F* 第2个 *\u002F\n",[105,137224,137225,137227,137229,137231,137234,137237],{"class":107,"line":1309},[105,137226,62],{"class":51285},[105,137228,129451],{"class":1954},[105,137230,116],{"class":115},[105,137232,137233],{"class":164},"2n",[105,137235,137236],{"class":115},") { }         ",[105,137238,137239],{"class":174},"\u002F* 偶数 *\u002F\n",[105,137241,137242,137244,137246,137248,137251,137254],{"class":107,"line":1321},[105,137243,62],{"class":51285},[105,137245,129451],{"class":1954},[105,137247,116],{"class":115},[105,137249,137250],{"class":164},"2n+1",[105,137252,137253],{"class":115},") { }       ",[105,137255,137256],{"class":174},"\u002F* 奇数 *\u002F\n",[105,137258,137259,137261,137263,137265,137268,137270],{"class":107,"line":1603},[105,137260,62],{"class":51285},[105,137262,129451],{"class":1954},[105,137264,116],{"class":115},[105,137266,137267],{"class":164},"-n+3",[105,137269,137253],{"class":115},[105,137271,137272],{"class":174},"\u002F* 前3个 *\u002F\n",[51596,137274,137277],{"className":137275},[137276],"example","\n  示例内容\n",[14,137279,137280],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1123,137282,137283],{},[62,137284,137285,137288],{},[102,137286,137287],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137290,137291],{},"也就是说它选择的是熊大",[59,137293,137294],{"start":1206},[62,137295,137296],{},"权重",[96,137298,137300],{"className":126537,"code":137299,"language":126539,"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",[102,137301,137302,137306,137316,137326,137340,137354,137368],{"__ignoreMap":22},[105,137303,137304],{"class":107,"line":108},[105,137305,137180],{"class":174},[105,137307,137308,137310,137312,137314],{"class":107,"line":28},[105,137309,62],{"class":51285},[105,137311,137187],{"class":1954},[105,137313,137190],{"class":115},[105,137315,137193],{"class":174},[105,137317,137318,137320,137322,137324],{"class":107,"line":1171},[105,137319,62],{"class":51285},[105,137321,137200],{"class":1954},[105,137323,137203],{"class":115},[105,137325,137206],{"class":174},[105,137327,137328,137330,137332,137334,137336,137338],{"class":107,"line":1186},[105,137329,62],{"class":51285},[105,137331,129451],{"class":1954},[105,137333,116],{"class":115},[105,137335,193],{"class":164},[105,137337,137219],{"class":115},[105,137339,137222],{"class":174},[105,137341,137342,137344,137346,137348,137350,137352],{"class":107,"line":1192},[105,137343,62],{"class":51285},[105,137345,129451],{"class":1954},[105,137347,116],{"class":115},[105,137349,137233],{"class":164},[105,137351,137236],{"class":115},[105,137353,137239],{"class":174},[105,137355,137356,137358,137360,137362,137364,137366],{"class":107,"line":1206},[105,137357,62],{"class":51285},[105,137359,129451],{"class":1954},[105,137361,116],{"class":115},[105,137363,137250],{"class":164},[105,137365,137253],{"class":115},[105,137367,137256],{"class":174},[105,137369,137370,137372,137374,137376,137378,137380],{"class":107,"line":1212},[105,137371,62],{"class":51285},[105,137373,129451],{"class":1954},[105,137375,116],{"class":115},[105,137377,137267],{"class":164},[105,137379,137253],{"class":115},[105,137381,137272],{"class":174},[14,137383,137384],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21990,137386,137388],{"id":137387},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137390,137391],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[20,137393],{"style":126393,"src":137394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[59,137396,137397],{},[62,137398,145],{},[1123,137400,137401,137404,137407,137410,137413,137416],{},[62,137402,137403],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[62,137405,137406],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[62,137408,137409],{},"语法： element::before {}",[62,137411,137412],{},"before 和 after 必须有 content 属性",[62,137414,137415],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[62,137417,137418],{},"伪元素选择器和标签选择器一样，权重为 1",[59,137420,137421],{"start":28},[62,137422,137423],{},"实例",[96,137425,137426],{"className":126537,"code":137299,"language":126539,"meta":22,"style":22},[102,137427,137428,137432,137442,137452,137466,137480,137494],{"__ignoreMap":22},[105,137429,137430],{"class":107,"line":108},[105,137431,137180],{"class":174},[105,137433,137434,137436,137438,137440],{"class":107,"line":28},[105,137435,62],{"class":51285},[105,137437,137187],{"class":1954},[105,137439,137190],{"class":115},[105,137441,137193],{"class":174},[105,137443,137444,137446,137448,137450],{"class":107,"line":1171},[105,137445,62],{"class":51285},[105,137447,137200],{"class":1954},[105,137449,137203],{"class":115},[105,137451,137206],{"class":174},[105,137453,137454,137456,137458,137460,137462,137464],{"class":107,"line":1186},[105,137455,62],{"class":51285},[105,137457,129451],{"class":1954},[105,137459,116],{"class":115},[105,137461,193],{"class":164},[105,137463,137219],{"class":115},[105,137465,137222],{"class":174},[105,137467,137468,137470,137472,137474,137476,137478],{"class":107,"line":1192},[105,137469,62],{"class":51285},[105,137471,129451],{"class":1954},[105,137473,116],{"class":115},[105,137475,137233],{"class":164},[105,137477,137236],{"class":115},[105,137479,137239],{"class":174},[105,137481,137482,137484,137486,137488,137490,137492],{"class":107,"line":1206},[105,137483,62],{"class":51285},[105,137485,129451],{"class":1954},[105,137487,116],{"class":115},[105,137489,137250],{"class":164},[105,137491,137253],{"class":115},[105,137493,137256],{"class":174},[105,137495,137496,137498,137500,137502,137504,137506],{"class":107,"line":1212},[105,137497,62],{"class":51285},[105,137499,129451],{"class":1954},[105,137501,116],{"class":115},[105,137503,137267],{"class":164},[105,137505,137253],{"class":115},[105,137507,137272],{"class":174},[20,137509],{"style":126393,"src":137510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[59,137512,137513],{"start":1171},[62,137514,137515],{},"使用场景1",[20,137517],{"style":126393,"src":137518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137520,137521],{},"不需要再加盒子来整红色那部分了",[96,137523,137525],{"className":126537,"code":137524,"language":126539,"meta":22,"style":22},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[102,137526,137527,137532,137541,137552,137562,137566,137575,137586,137596],{"__ignoreMap":22},[105,137528,137529],{"class":107,"line":108},[105,137530,137531],{"class":174},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[105,137533,137534,137536,137539],{"class":107,"line":28},[105,137535,51596],{"class":51285},[105,137537,137538],{"class":1954},"::before",[105,137540,15564],{"class":115},[105,137542,137543,137546,137548,137550],{"class":107,"line":1171},[105,137544,137545],{"class":164},"  content",[105,137547,51422],{"class":115},[105,137549,7644],{"class":220},[105,137551,1282],{"class":115},[105,137553,137554,137556,137558,137560],{"class":107,"line":1186},[105,137555,128153],{"class":164},[105,137557,51422],{"class":115},[105,137559,60854],{"class":164},[105,137561,1282],{"class":115},[105,137563,137564],{"class":107,"line":1192},[105,137565,1556],{"class":115},[105,137567,137568,137570,137573],{"class":107,"line":1206},[105,137569,51596],{"class":51285},[105,137571,137572],{"class":1954},"::after",[105,137574,15564],{"class":115},[105,137576,137577,137579,137581,137584],{"class":107,"line":1212},[105,137578,137545],{"class":164},[105,137580,51422],{"class":115},[105,137582,137583],{"class":220},"\"→\"",[105,137585,1282],{"class":115},[105,137587,137588,137590,137592,137594],{"class":107,"line":1303},[105,137589,70890],{"class":164},[105,137591,51422],{"class":115},[105,137593,62055],{"class":164},[105,137595,1282],{"class":115},[105,137597,137598],{"class":107,"line":1309},[105,137599,1556],{"class":115},[20,137601],{"style":126393,"src":137602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137604,137605],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[20,137607],{"style":126393,"src":137608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137610,137611],{},"但是在引用时需要先转义一下",[14,137613,137614],{},"content='\\e930'",[59,137616,137617],{"start":1186},[62,137618,137619],{},"使用场景2",[14,137621,137622],{},"仿土豆效果",[14,137624,137625],{},"通过使用伪元素选择器可以减少body中盒子的数量",[96,137627,137628],{"className":126537,"code":137524,"language":126539,"meta":22,"style":22},[102,137629,137630,137634,137642,137652,137662,137666,137674,137684,137694],{"__ignoreMap":22},[105,137631,137632],{"class":107,"line":108},[105,137633,137531],{"class":174},[105,137635,137636,137638,137640],{"class":107,"line":28},[105,137637,51596],{"class":51285},[105,137639,137538],{"class":1954},[105,137641,15564],{"class":115},[105,137643,137644,137646,137648,137650],{"class":107,"line":1171},[105,137645,137545],{"class":164},[105,137647,51422],{"class":115},[105,137649,7644],{"class":220},[105,137651,1282],{"class":115},[105,137653,137654,137656,137658,137660],{"class":107,"line":1186},[105,137655,128153],{"class":164},[105,137657,51422],{"class":115},[105,137659,60854],{"class":164},[105,137661,1282],{"class":115},[105,137663,137664],{"class":107,"line":1192},[105,137665,1556],{"class":115},[105,137667,137668,137670,137672],{"class":107,"line":1206},[105,137669,51596],{"class":51285},[105,137671,137572],{"class":1954},[105,137673,15564],{"class":115},[105,137675,137676,137678,137680,137682],{"class":107,"line":1212},[105,137677,137545],{"class":164},[105,137679,51422],{"class":115},[105,137681,137583],{"class":220},[105,137683,1282],{"class":115},[105,137685,137686,137688,137690,137692],{"class":107,"line":1303},[105,137687,70890],{"class":164},[105,137689,51422],{"class":115},[105,137691,62055],{"class":164},[105,137693,1282],{"class":115},[105,137695,137696],{"class":107,"line":1309},[105,137697,1556],{"class":115},[20,137699],{"style":126393,"src":137700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[59,137702,137703],{"start":1192},[62,137704,137705],{},"使用场景3",[14,137707,137708],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[96,137710,137712],{"className":126537,"code":137711,"language":126539,"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",[102,137713,137714,137720,137730,137734,137738,137742,137750,137760,137770,137774,137782,137792,137802],{"__ignoreMap":22},[105,137715,137716,137718],{"class":107,"line":108},[105,137717,130385],{"class":1954},[105,137719,15564],{"class":115},[105,137721,137722,137724,137726,137728],{"class":107,"line":28},[105,137723,131017],{"class":164},[105,137725,51422],{"class":115},[105,137727,23729],{"class":164},[105,137729,1282],{"class":115},[105,137731,137732],{"class":107,"line":1171},[105,137733,1556],{"class":115},[105,137735,137736],{"class":107,"line":1186},[105,137737,135998],{"class":115},[105,137739,137740],{"class":107,"line":1192},[105,137741,137531],{"class":174},[105,137743,137744,137746,137748],{"class":107,"line":1206},[105,137745,51596],{"class":51285},[105,137747,137538],{"class":1954},[105,137749,15564],{"class":115},[105,137751,137752,137754,137756,137758],{"class":107,"line":1212},[105,137753,137545],{"class":164},[105,137755,51422],{"class":115},[105,137757,7644],{"class":220},[105,137759,1282],{"class":115},[105,137761,137762,137764,137766,137768],{"class":107,"line":1303},[105,137763,128153],{"class":164},[105,137765,51422],{"class":115},[105,137767,60854],{"class":164},[105,137769,1282],{"class":115},[105,137771,137772],{"class":107,"line":1309},[105,137773,1556],{"class":115},[105,137775,137776,137778,137780],{"class":107,"line":1321},[105,137777,51596],{"class":51285},[105,137779,137572],{"class":1954},[105,137781,15564],{"class":115},[105,137783,137784,137786,137788,137790],{"class":107,"line":1603},[105,137785,137545],{"class":164},[105,137787,51422],{"class":115},[105,137789,137583],{"class":220},[105,137791,1282],{"class":115},[105,137793,137794,137796,137798,137800],{"class":107,"line":1608},[105,137795,70890],{"class":164},[105,137797,51422],{"class":115},[105,137799,62055],{"class":164},[105,137801,1282],{"class":115},[105,137803,137804],{"class":107,"line":1614},[105,137805,1556],{"class":115},[14,137807,137808],{},"div {\nmargin: 0 auto;\n}",[96,137810,137813],{"className":137811,"code":137812,"language":5179},[5177],"\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",[102,137814,137812],{"__ignoreMap":22},[14,137816,137817],{},"如果想让多个元素都发生变化",[14,137819,137820],{},"不能如下操作：",[14,137822,137823],{},"transition: width 2s ease 0.5s;",[14,137825,137826],{},"transition: height 2s ease 0.5s;不对！！！",[14,137828,137829],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137831,137832],{},"使用如下：加逗号隔开",[14,137834,137835],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137837,137838],{},"transition all 2s ease;",[76,137840,137842],{"id":137841},"_1426-过渡练习","14.2.6 过渡练习",[59,137844,137845],{},[62,137846,137847],{},"进度条",[20,137849],{"style":126393,"src":137850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[96,137852,137854],{"className":126537,"code":137853,"language":126539,"meta":22,"style":22},"div {\n  transition: all 0.3s ease;\n}\n",[102,137855,137856,137862,137880],{"__ignoreMap":22},[105,137857,137858,137860],{"class":107,"line":108},[105,137859,51596],{"class":51285},[105,137861,15564],{"class":115},[105,137863,137864,137867,137869,137871,137874,137876,137878],{"class":107,"line":28},[105,137865,137866],{"class":164},"  transition",[105,137868,51422],{"class":115},[105,137870,28106],{"class":164},[105,137872,137873],{"class":164}," 0.3",[105,137875,811],{"class":111},[105,137877,78665],{"class":164},[105,137879,1282],{"class":115},[105,137881,137882],{"class":107,"line":1171},[105,137883,1556],{"class":115},[59,137885,137886],{"start":28},[62,137887,137888],{},"小米logo",[14,137890,137891],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[96,137893,137895],{"className":126537,"code":137894,"language":126539,"meta":22,"style":22},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[102,137896,137897,137902,137908,137924,137929],{"__ignoreMap":22},[105,137898,137899],{"class":107,"line":108},[105,137900,137901],{"class":174},"\u002F* CSS3 过渡 *\u002F\n",[105,137903,137904,137906],{"class":107,"line":28},[105,137905,51596],{"class":51285},[105,137907,15564],{"class":115},[105,137909,137910,137912,137914,137916,137918,137920,137922],{"class":107,"line":1171},[105,137911,137866],{"class":164},[105,137913,51422],{"class":115},[105,137915,28106],{"class":164},[105,137917,137873],{"class":164},[105,137919,811],{"class":111},[105,137921,78665],{"class":164},[105,137923,1282],{"class":115},[105,137925,137926],{"class":107,"line":1186},[105,137927,137928],{"class":174},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[105,137930,137931],{"class":107,"line":1192},[105,137932,1556],{"class":115},[14,137934,137935],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5118,137937,137938],{},"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":28,"depth":28,"links":137940},[137941,137946],{"id":136271,"depth":28,"text":136272,"children":137942},[137943,137944,137945],{"id":136275,"depth":1171,"text":136276},{"id":136352,"depth":1171,"text":136353},{"id":136683,"depth":1171,"text":136684},{"id":136974,"depth":28,"text":136975,"children":137947},[137948,137949],{"id":136978,"depth":1171,"text":136979},{"id":137841,"depth":1171,"text":137842},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136263,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137956,"title":137957,"body":137958,"description":23369,"extension":30,"meta":139702,"navigation":32,"path":139703,"seo":139704,"stem":139705,"__hash__":139706},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137959,"toc":139683},[137960,137963,137967,137970,137976,137982,137986,137988,137991,137994,137997,138000,138003,138006,138009,138013,138017,138020,138023,138026,138030,138033,138036,138041,138044,138047,138050,138054,138057,138066,138069,138072,138076,138079,138082,138087,138094,138108,138116,138123,138128,138131,138134,138137,138144,138148,138154,138160,138163,138166,138171,138177,138179,138187,138192,138195,138201,138203,138208,138213,138216,138218,138223,138226,138231,138236,138270,138274,138278,138281,138285,138288,138374,138377,138414,138417,138453,138457,138462,138475,138529,138531,138559,138561,138589,138595,138609,138611,138655,138657,138701,138704,138711,138722,138724,138751,138753,138779,138786,138802,138804,138898,138900,138994,139001,139004,139009,139015,139089,139092,139094,139130,139132,139168,139171,139178,139197,139200,139203,139205,139230,139232,139256,139259,139262,139292,139296,139299,139362,139364,139430,139432,139496,139499,139531,139533,139559,139561,139587,139590,139621,139623,139649,139651,139677,139680],[10,137961,137957],{"id":137962},"_15-品优购项目上篇-搭建与公共模块",[47,137964,137966],{"id":137965},"_151-项目规划","15.1 项目规划",[20,137968],{"style":126393,"src":137969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,137971,137972,137975],{},[265,137973,137974],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,137977,137978,137981],{},[265,137979,137980],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[47,137983,137985],{"id":137984},"_152-项目介绍","15.2 项目介绍",[14,137987,137974],{},[20,137989],{"style":126393,"src":137990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,137992,137993],{},"主页：",[20,137995],{"style":126393,"src":137996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,137998,137999],{},"列表页：",[20,138001],{"style":126393,"src":138002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138004,138005],{},"注册页：",[20,138007],{"style":126393,"src":138008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[47,138010,138012],{"id":138011},"_153-项目搭建工作","15.3 项目搭建工作",[76,138014,138016],{"id":138015},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[20,138018],{"style":126393,"src":138019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138021,138022],{},"经常更换的图片要放到upload文件夹中",[14,138024,138025],{},"不经常换的放到images文件夹中",[76,138027,138029],{"id":138028},"_1532-创建文件如下","15.3.2 创建文件如下",[20,138031],{"style":126393,"src":138032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[20,138034],{"style":126393,"src":138035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138037,138038],{},[265,138039,138040],{},"初始化样式：",[14,138042,138043],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138045,138046],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138048,138049],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[76,138051,138053],{"id":138052},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138055,138056],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138058,138059,138060,138065],{},"这里最典型的应用就是 ",[265,138061,138062],{},[102,138063,138064],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[20,138067],{"style":126393,"src":138068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138070,138071],{},"通过link方法来引入",[76,138073,138075],{"id":138074},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[20,138077],{"style":126393,"src":138078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138080,138081],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[59,138083,138084],{},[62,138085,138086],{},"制作favicon图标",[14,138088,138089,138090,138093],{},"①把品优购图标切成 ",[102,138091,138092],{},"png"," 图片",[14,138095,138096,138097,138099,138100,138103,138104],{},"②把 ",[102,138098,138092],{}," 图片转换为 ",[102,138101,138102],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[354,138105,138106],{"href":138106,"rel":138107},"http:\u002F\u002Fwww.bitbug.net\u002F",[23858],[59,138109,138110,138113],{"start":28},[62,138111,138112],{},"favicon图标放到网站根目录下",[62,138114,138115],{},"HTML页面引入favicon",[14,138117,138118,138119,138122],{},"在html 页面里面的 ",[102,138120,138121],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138124,138125],{},[102,138126,138127],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138129,138130],{},"复制这行代码或者在生成这个的网站进行复制",[20,138132],{"style":126393,"src":138133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138135,138136],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138138,138139,138140],{},"例如:",[354,138141,138142],{"href":138142,"rel":138143},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23858],[76,138145,138147],{"id":138146},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138149,138150,138153],{},[265,138151,138152],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138155,138156,138159],{},[265,138157,138158],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138161,138162],{},"页面必须有三个标签用来符合 SEO 优化",[20,138164],{"style":126393,"src":138165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[59,138167,138168],{},[62,138169,138170],{},"title网站标题",[14,138172,138173,138176],{},[265,138174,138175],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138178,68775],{},[1123,138180,138181,138184],{},[62,138182,138183],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[62,138185,138186],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[59,138188,138189],{"start":28},[62,138190,138191],{},"description网站描述",[14,138193,138194],{},"简要说明我们网站主要是做什么的",[14,138196,138197,138200],{},[265,138198,138199],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138202,68775],{},[14,138204,138205],{},[102,138206,138207],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[59,138209,138210],{"start":1171},[62,138211,138212],{},"keywords关键词",[14,138214,138215],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138217,68775],{},[14,138219,138220],{},[102,138221,138222],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138224,138225],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138227,138228],{},[265,138229,138230],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[59,138232,138233],{"start":1186},[62,138234,138235],{},"代码总结",[96,138237,138238],{"className":127284,"code":130641,"language":127286,"meta":22,"style":22},[102,138239,138240,138244,138258,138262],{"__ignoreMap":22},[105,138241,138242],{"class":107,"line":108},[105,138243,130648],{"class":174},[105,138245,138246,138248,138250,138252,138254,138256],{"class":107,"line":28},[105,138247,1026],{"class":115},[105,138249,51596],{"class":51285},[105,138251,53471],{"class":1954},[105,138253,161],{"class":115},[105,138255,130661],{"class":220},[105,138257,51292],{"class":115},[105,138259,138260],{"class":107,"line":1171},[105,138261,130668],{"class":115},[105,138263,138264,138266,138268],{"class":107,"line":1186},[105,138265,51770],{"class":115},[105,138267,51596],{"class":51285},[105,138269,51292],{"class":115},[47,138271,138273],{"id":138272},"_154-项目公共部分制作","15.4 项目公共部分制作",[76,138275,138277],{"id":138276},"_1541-常用模块类命名","15.4.1 常用模块类命名",[20,138279],{"style":126393,"src":138280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[76,138282,138284],{"id":138283},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138286,138287],{},"布局思路：",[1123,138289,138290,138293,138296,138318,138351],{},[62,138291,138292],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[62,138294,138295],{},"里面包含版心的盒子",[62,138297,138298,138299],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1123,138300,138301,138309,138315],{},[62,138302,138303,138304,21492,138306,138308],{},"1 号盒子 里面包含一个",[102,138305,1123],{},[102,138307,1123],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[62,138310,138311,138312,138314],{},"里面的内容是水平排列，所以需要给",[102,138313,62],{},"设置浮动",[62,138316,138317],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[62,138319,138320,138321],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1123,138322,138323,138337,138342],{},[62,138324,138325,138326,21492,138328,138330,138331,138333,138334,138336],{},"2 号盒子 里面包含一个",[102,138327,1123],{},[102,138329,1123],{},"包裹",[102,138332,62],{},"，中间的",[102,138335,1037],{},"可以用样式去设置，也可以用字符 |",[62,138338,138339,138340,138314],{},"里面内容水平排列，给",[102,138341,62],{},[62,138343,138344,138345,138347,138348,138350],{},"找到里面所有偶数的 ",[102,138346,62],{}," 设置样式（偶数的 ",[102,138349,62],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[62,138352,138353,138354],{},"需要用到字体图标",[1123,138355,138356,138362,138365,138368,138371],{},[62,138357,138358,138359],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[102,138360,138361],{},"arrow-icon",[62,138363,138364],{},"先要引入字体图片的资源",[62,138366,138367],{},"在样式里面利用 font-face 来进行声明",[62,138369,138370],{},"在伪元素的 content属性设置 图标的编码",[62,138372,138373],{},"给伪元素设置font-family属性",[14,138375,138376],{},"结构实例代码：",[96,138378,138380],{"className":126537,"code":138379,"language":126539,"meta":22,"style":22},"div::before {\n  content: \"\";\n  display: block;\n}\n",[102,138381,138382,138390,138400,138410],{"__ignoreMap":22},[105,138383,138384,138386,138388],{"class":107,"line":108},[105,138385,51596],{"class":51285},[105,138387,137538],{"class":1954},[105,138389,15564],{"class":115},[105,138391,138392,138394,138396,138398],{"class":107,"line":28},[105,138393,137545],{"class":164},[105,138395,51422],{"class":115},[105,138397,7644],{"class":220},[105,138399,1282],{"class":115},[105,138401,138402,138404,138406,138408],{"class":107,"line":1171},[105,138403,128153],{"class":164},[105,138405,51422],{"class":115},[105,138407,60854],{"class":164},[105,138409,1282],{"class":115},[105,138411,138412],{"class":107,"line":1186},[105,138413,1556],{"class":115},[14,138415,138416],{},"样式实例代码：",[96,138418,138419],{"className":126537,"code":138379,"language":126539,"meta":22,"style":22},[102,138420,138421,138429,138439,138449],{"__ignoreMap":22},[105,138422,138423,138425,138427],{"class":107,"line":108},[105,138424,51596],{"class":51285},[105,138426,137538],{"class":1954},[105,138428,15564],{"class":115},[105,138430,138431,138433,138435,138437],{"class":107,"line":28},[105,138432,137545],{"class":164},[105,138434,51422],{"class":115},[105,138436,7644],{"class":220},[105,138438,1282],{"class":115},[105,138440,138441,138443,138445,138447],{"class":107,"line":1171},[105,138442,128153],{"class":164},[105,138444,51422],{"class":115},[105,138446,60854],{"class":164},[105,138448,1282],{"class":115},[105,138450,138451],{"class":107,"line":1186},[105,138452,1556],{"class":115},[76,138454,138456],{"id":138455},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1123,138458,138459],{},[62,138460,138461],{},"header 盒子必须要有高度",[14,138463,138464,138465,138467,138468],{},"1 号盒子是 ",[102,138466,131549],{}," 标志定位，在正常开发过程中， ",[265,138469,138470,138471,138474],{},"logo的布局其实是有讲究的，需要进行 ",[102,138472,138473],{},"logoSEO","的优化 （★★★）",[1123,138476,138477,138485,138493,138520],{},[62,138478,138479,138481,138482,138484],{},[102,138480,131549],{}," 里面首先放一个 ",[102,138483,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[62,138486,138487,138489,138490,138492],{},[102,138488,10],{}," 里面再放一个链接，可以返回首页的，把 ",[102,138491,131549],{}," 的背景图片给链接即可",[62,138494,138495,138496],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1123,138497,138498,138513],{},[62,138499,138500,138501,138504,138505,138508,138509,138512],{},"方法1：",[102,138502,138503],{},"text-indent"," 移到盒子外面（",[102,138506,138507],{},"text-indent: -9999px",") ，然后 ",[102,138510,138511],{},"overflow:hidden"," ，淘宝的做法",[62,138514,138515,138516,138519],{},"方法2：直接给 ",[102,138517,138518],{},"font-size: 0;"," 就看不到文字了，京东的做法",[62,138521,138522,138523,138525,138526,138528],{},"最后给链接一个 ",[102,138524,51392],{}," 属性，这样鼠标放到 ",[102,138527,131549],{}," 上就可以看到提示文字了",[14,138530,138376],{},[96,138532,138533],{"className":127284,"code":131770,"language":127286,"meta":22,"style":22},[102,138534,138535],{"__ignoreMap":22},[105,138536,138537,138539,138541,138543,138545,138547,138549,138551,138553,138555,138557],{"class":107,"line":108},[105,138538,1026],{"class":115},[105,138540,354],{"class":51285},[105,138542,61042],{"class":1954},[105,138544,161],{"class":115},[105,138546,131785],{"class":220},[105,138548,131788],{"class":1954},[105,138550,161],{"class":115},[105,138552,131793],{"class":220},[105,138554,131796],{"class":115},[105,138556,354],{"class":51285},[105,138558,51292],{"class":115},[14,138560,138416],{},[96,138562,138563],{"className":127284,"code":131770,"language":127286,"meta":22,"style":22},[102,138564,138565],{"__ignoreMap":22},[105,138566,138567,138569,138571,138573,138575,138577,138579,138581,138583,138585,138587],{"class":107,"line":108},[105,138568,1026],{"class":115},[105,138570,354],{"class":51285},[105,138572,61042],{"class":1954},[105,138574,161],{"class":115},[105,138576,131785],{"class":220},[105,138578,131788],{"class":1954},[105,138580,161],{"class":115},[105,138582,131793],{"class":220},[105,138584,131796],{"class":115},[105,138586,354],{"class":51285},[105,138588,51292],{"class":115},[14,138590,138591,138592,138594],{},"2 号盒子是 ",[102,138593,131562],{}," 搜索模块定位",[1123,138596,138597,138600,138603,138606],{},[62,138598,138599],{},"search盒子利用定位的方式放在对应的位置",[62,138601,138602],{},"search盒子设置绝对定位，header盒子设置相对定位",[62,138604,138605],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[62,138607,138608],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138610,138376],{},[96,138612,138613],{"className":126537,"code":131857,"language":126539,"meta":22,"style":22},[102,138614,138615,138637,138641,138651],{"__ignoreMap":22},[105,138616,138617,138619,138621,138623,138625,138627,138629,138631,138633,138635],{"class":107,"line":108},[105,138618,51596],{"class":51285},[105,138620,12427],{"class":115},[105,138622,14],{"class":51285},[105,138624,12427],{"class":115},[105,138626,10],{"class":51285},[105,138628,12427],{"class":115},[105,138630,1123],{"class":51285},[105,138632,12427],{"class":115},[105,138634,62],{"class":51285},[105,138636,15564],{"class":115},[105,138638,138639],{"class":107,"line":28},[105,138640,131886],{"class":174},[105,138642,138643,138645,138647,138649],{"class":107,"line":1171},[105,138644,128153],{"class":164},[105,138646,51422],{"class":115},[105,138648,60854],{"class":164},[105,138650,1282],{"class":115},[105,138652,138653],{"class":107,"line":1186},[105,138654,1556],{"class":115},[14,138656,138416],{},[96,138658,138659],{"className":126537,"code":131857,"language":126539,"meta":22,"style":22},[102,138660,138661,138683,138687,138697],{"__ignoreMap":22},[105,138662,138663,138665,138667,138669,138671,138673,138675,138677,138679,138681],{"class":107,"line":108},[105,138664,51596],{"class":51285},[105,138666,12427],{"class":115},[105,138668,14],{"class":51285},[105,138670,12427],{"class":115},[105,138672,10],{"class":51285},[105,138674,12427],{"class":115},[105,138676,1123],{"class":51285},[105,138678,12427],{"class":115},[105,138680,62],{"class":51285},[105,138682,15564],{"class":115},[105,138684,138685],{"class":107,"line":28},[105,138686,131886],{"class":174},[105,138688,138689,138691,138693,138695],{"class":107,"line":1171},[105,138690,128153],{"class":164},[105,138692,51422],{"class":115},[105,138694,60854],{"class":164},[105,138696,1282],{"class":115},[105,138698,138699],{"class":107,"line":1186},[105,138700,1556],{"class":115},[14,138702,138703],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138705,138706,138707,138710],{},"3 号盒子是 ",[102,138708,138709],{},"hotwords"," 热词模块定位",[1123,138712,138713,138716,138719],{},[62,138714,138715],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[62,138717,138718],{},"给里面所有的a标签设置 左右10px的外边距",[62,138720,138721],{},"给第一个a标签设置文字变红色（#c81623）",[14,138723,138376],{},[96,138725,138727],{"className":126537,"code":138726,"language":126539,"meta":22,"style":22},"div {\n  margin: 0 auto;\n}\n",[102,138728,138729,138735,138747],{"__ignoreMap":22},[105,138730,138731,138733],{"class":107,"line":108},[105,138732,51596],{"class":51285},[105,138734,15564],{"class":115},[105,138736,138737,138739,138741,138743,138745],{"class":107,"line":28},[105,138738,70455],{"class":164},[105,138740,51422],{"class":115},[105,138742,307],{"class":164},[105,138744,51541],{"class":164},[105,138746,1282],{"class":115},[105,138748,138749],{"class":107,"line":1171},[105,138750,1556],{"class":115},[14,138752,138416],{},[96,138754,138755],{"className":126537,"code":138726,"language":126539,"meta":22,"style":22},[102,138756,138757,138763,138775],{"__ignoreMap":22},[105,138758,138759,138761],{"class":107,"line":108},[105,138760,51596],{"class":51285},[105,138762,15564],{"class":115},[105,138764,138765,138767,138769,138771,138773],{"class":107,"line":28},[105,138766,70455],{"class":164},[105,138768,51422],{"class":115},[105,138770,307],{"class":164},[105,138772,51541],{"class":164},[105,138774,1282],{"class":115},[105,138776,138777],{"class":107,"line":1171},[105,138778,1556],{"class":115},[14,138780,138781,138782,138785],{},"4 号盒子是 ",[102,138783,138784],{},"shopcar"," 购物车模块",[1123,138787,138788,138793,138796,138799],{},[62,138789,123320,138790,138792],{},[102,138791,138784],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[62,138794,138795],{},"count 统计部分用绝对定位做",[62,138797,138798],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[62,138800,138801],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138803,138376],{},[96,138805,138806],{"className":126537,"code":131969,"language":126539,"meta":22,"style":22},[102,138807,138808,138812,138826,138830,138844,138848,138862,138866,138880,138884],{"__ignoreMap":22},[105,138809,138810],{"class":107,"line":108},[105,138811,131976],{"class":174},[105,138813,138814,138816,138818,138820,138822,138824],{"class":107,"line":28},[105,138815,131981],{"class":1954},[105,138817,79792],{"class":115},[105,138819,128897],{"class":164},[105,138821,51422],{"class":115},[105,138823,131990],{"class":164},[105,138825,129467],{"class":115},[105,138827,138828],{"class":107,"line":1171},[105,138829,131997],{"class":174},[105,138831,138832,138834,138836,138838,138840,138842],{"class":107,"line":1186},[105,138833,132002],{"class":1954},[105,138835,79792],{"class":115},[105,138837,128897],{"class":164},[105,138839,51422],{"class":115},[105,138841,54749],{"class":164},[105,138843,129467],{"class":115},[105,138845,138846],{"class":107,"line":1192},[105,138847,132017],{"class":174},[105,138849,138850,138852,138854,138856,138858,138860],{"class":107,"line":1206},[105,138851,132022],{"class":1954},[105,138853,79792],{"class":115},[105,138855,128897],{"class":164},[105,138857,51422],{"class":115},[105,138859,54816],{"class":164},[105,138861,129467],{"class":115},[105,138863,138864],{"class":107,"line":1212},[105,138865,132037],{"class":174},[105,138867,138868,138870,138872,138874,138876,138878],{"class":107,"line":1303},[105,138869,132042],{"class":1954},[105,138871,79792],{"class":115},[105,138873,128897],{"class":164},[105,138875,51422],{"class":115},[105,138877,86218],{"class":164},[105,138879,129467],{"class":115},[105,138881,138882],{"class":107,"line":1309},[105,138883,132057],{"class":174},[105,138885,138886,138888,138890,138892,138894,138896],{"class":107,"line":1321},[105,138887,132062],{"class":1954},[105,138889,79792],{"class":115},[105,138891,128897],{"class":164},[105,138893,51422],{"class":115},[105,138895,132071],{"class":164},[105,138897,129467],{"class":115},[14,138899,138416],{},[96,138901,138902],{"className":126537,"code":131969,"language":126539,"meta":22,"style":22},[102,138903,138904,138908,138922,138926,138940,138944,138958,138962,138976,138980],{"__ignoreMap":22},[105,138905,138906],{"class":107,"line":108},[105,138907,131976],{"class":174},[105,138909,138910,138912,138914,138916,138918,138920],{"class":107,"line":28},[105,138911,131981],{"class":1954},[105,138913,79792],{"class":115},[105,138915,128897],{"class":164},[105,138917,51422],{"class":115},[105,138919,131990],{"class":164},[105,138921,129467],{"class":115},[105,138923,138924],{"class":107,"line":1171},[105,138925,131997],{"class":174},[105,138927,138928,138930,138932,138934,138936,138938],{"class":107,"line":1186},[105,138929,132002],{"class":1954},[105,138931,79792],{"class":115},[105,138933,128897],{"class":164},[105,138935,51422],{"class":115},[105,138937,54749],{"class":164},[105,138939,129467],{"class":115},[105,138941,138942],{"class":107,"line":1192},[105,138943,132017],{"class":174},[105,138945,138946,138948,138950,138952,138954,138956],{"class":107,"line":1206},[105,138947,132022],{"class":1954},[105,138949,79792],{"class":115},[105,138951,128897],{"class":164},[105,138953,51422],{"class":115},[105,138955,54816],{"class":164},[105,138957,129467],{"class":115},[105,138959,138960],{"class":107,"line":1212},[105,138961,132037],{"class":174},[105,138963,138964,138966,138968,138970,138972,138974],{"class":107,"line":1303},[105,138965,132042],{"class":1954},[105,138967,79792],{"class":115},[105,138969,128897],{"class":164},[105,138971,51422],{"class":115},[105,138973,86218],{"class":164},[105,138975,129467],{"class":115},[105,138977,138978],{"class":107,"line":1309},[105,138979,132057],{"class":174},[105,138981,138982,138984,138986,138988,138990,138992],{"class":107,"line":1321},[105,138983,132062],{"class":1954},[105,138985,79792],{"class":115},[105,138987,128897],{"class":164},[105,138989,51422],{"class":115},[105,138991,132071],{"class":164},[105,138993,129467],{"class":115},[76,138995,138997,138998,139000],{"id":138996},"_1544-nav导航模块制作","15.4.4 ",[102,138999,53698],{},"导航模块制作",[20,139002],{"style":126393,"src":139003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139005,139006,139008],{},[102,139007,53698],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139010,139011,139012],{},"1 号盒子左侧浮动，",[102,139013,139014],{},"dropdown",[1123,139016,139017,139027,139035,139041,139049,139059,139067,139078],{},[62,139018,139019,139020,101003,139023,139026],{},"1号盒子有讲究，根据相关性 里面包含 ",[102,139021,139022],{},".dt",[102,139024,139025],{},".dd"," 两个盒子",[62,139028,139029,139031,139032,139034],{},[102,139030,139022],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[102,139033,139025],{}," 挤到下面去了",[62,139036,139037,139038,139040],{},"给 ",[102,139039,139025],{}," 盒子设置宽度 和 高度，以及背景颜色",[62,139042,139037,139043,139045,139046,120222],{},[102,139044,139025],{}," 盒子里面定义 无序列表 （",[102,139047,139048],{},"ul > li > a",[62,139050,139051,139052,139054,139055,139058],{},"每个 ",[102,139053,62],{}," 都有一个高度（",[102,139056,139057],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[62,139060,139037,139061,139063,139064,120222],{},[102,139062,62],{}," 里面的a设置文字大小（",[102,139065,139066],{},"14px",[62,139068,139037,139069,139071,139072,139074,139075,139077],{},[102,139070,62],{}," 设置 ",[102,139073,127698],{},"，当鼠标移入的时候，让",[102,139076,62],{},"的背景变成白色，让里面的文字变成红色",[62,139079,139080,139082,139083,139085,139086,139088],{},[102,139081,62],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[102,139084,62],{},"的右侧，那么给",[102,139087,62],{},"设置相对定位",[14,139090,139091],{},"一定要注意相关性",[14,139093,138376],{},[96,139095,139096],{"className":126537,"code":138379,"language":126539,"meta":22,"style":22},[102,139097,139098,139106,139116,139126],{"__ignoreMap":22},[105,139099,139100,139102,139104],{"class":107,"line":108},[105,139101,51596],{"class":51285},[105,139103,137538],{"class":1954},[105,139105,15564],{"class":115},[105,139107,139108,139110,139112,139114],{"class":107,"line":28},[105,139109,137545],{"class":164},[105,139111,51422],{"class":115},[105,139113,7644],{"class":220},[105,139115,1282],{"class":115},[105,139117,139118,139120,139122,139124],{"class":107,"line":1171},[105,139119,128153],{"class":164},[105,139121,51422],{"class":115},[105,139123,60854],{"class":164},[105,139125,1282],{"class":115},[105,139127,139128],{"class":107,"line":1186},[105,139129,1556],{"class":115},[14,139131,138416],{},[96,139133,139134],{"className":126537,"code":138379,"language":126539,"meta":22,"style":22},[102,139135,139136,139144,139154,139164],{"__ignoreMap":22},[105,139137,139138,139140,139142],{"class":107,"line":108},[105,139139,51596],{"class":51285},[105,139141,137538],{"class":1954},[105,139143,15564],{"class":115},[105,139145,139146,139148,139150,139152],{"class":107,"line":28},[105,139147,137545],{"class":164},[105,139149,51422],{"class":115},[105,139151,7644],{"class":220},[105,139153,1282],{"class":115},[105,139155,139156,139158,139160,139162],{"class":107,"line":1171},[105,139157,128153],{"class":164},[105,139159,51422],{"class":115},[105,139161,60854],{"class":164},[105,139163,1282],{"class":115},[105,139165,139166],{"class":107,"line":1186},[105,139167,1556],{"class":115},[14,139169,139170],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139172,139173,139174,139177],{},"2 号盒子左侧浮动，",[102,139175,139176],{},"navitems"," 导航栏组",[1123,139179,139180,139185,139194],{},[62,139181,139182,139183],{},"里面结构是 ",[102,139184,139048],{},[62,139186,139187,139188,139190,139191,139193],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[102,139189,354],{},"左右的",[102,139192,30868],{},"把两侧撑开",[62,139195,139196],{},"让文字垂直居中（行高等于高度）",[20,139198],{"style":126393,"src":139199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139201,139202],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139204,138376],{},[96,139206,139208],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},".box {\n  float: left;\n}\n",[102,139209,139210,139216,139226],{"__ignoreMap":22},[105,139211,139212,139214],{"class":107,"line":108},[105,139213,130385],{"class":1954},[105,139215,15564],{"class":115},[105,139217,139218,139220,139222,139224],{"class":107,"line":28},[105,139219,131017],{"class":164},[105,139221,51422],{"class":115},[105,139223,23729],{"class":164},[105,139225,1282],{"class":115},[105,139227,139228],{"class":107,"line":1171},[105,139229,1556],{"class":115},[14,139231,138416],{},[96,139233,139234],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,139235,139236,139242,139252],{"__ignoreMap":22},[105,139237,139238,139240],{"class":107,"line":108},[105,139239,130385],{"class":1954},[105,139241,15564],{"class":115},[105,139243,139244,139246,139248,139250],{"class":107,"line":28},[105,139245,131017],{"class":164},[105,139247,51422],{"class":115},[105,139249,23729],{"class":164},[105,139251,1282],{"class":115},[105,139253,139254],{"class":107,"line":1171},[105,139255,1556],{"class":115},[14,139257,139258],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[20,139260],{"style":126393,"src":139261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[96,139263,139264],{"className":126537,"code":130694,"language":126539,"meta":22,"style":22},[102,139265,139266,139272,139288],{"__ignoreMap":22},[105,139267,139268,139270],{"class":107,"line":108},[105,139269,51596],{"class":51285},[105,139271,15564],{"class":115},[105,139273,139274,139276,139278,139280,139282,139284,139286],{"class":107,"line":28},[105,139275,70881],{"class":164},[105,139277,51422],{"class":115},[105,139279,333],{"class":164},[105,139281,51477],{"class":111},[105,139283,51506],{"class":164},[105,139285,129929],{"class":164},[105,139287,1282],{"class":115},[105,139289,139290],{"class":107,"line":1171},[105,139291,1556],{"class":115},[76,139293,139295],{"id":139294},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[20,139297],{"style":126393,"src":139298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1123,139300,139301,139306,139311],{},[62,139302,139303,139305],{},[102,139304,131740],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[62,139307,139308,139310],{},[102,139309,131740],{}," 里面有一个大的版心",[62,139312,139313,139314,139317,139318],{},"版心里面包含 1 号盒子，",[102,139315,139316],{},"mod_service"," 是服务模块，mod 是模块的意思",[1123,139319,139320,139325,139338,139354,139359],{},[62,139321,139037,139322,139324],{},[102,139323,139316],{}," 设置高度（80px）和下边框",[62,139326,139327,139328,139331,139332,139334,139335,139337],{},"在里面定义 ",[102,139329,139330],{},"ul > li"," ,每个",[102,139333,62],{}," 宽度是300px 高度是 50px，给每个",[102,139336,62],{},"设置35px的左内边距",[62,139339,139340,139341,139343,139344,139346,139347,139349,139350,18402,139352,120222],{},"在每个",[102,139342,62],{},"里面，放一个 ",[102,139345,22902],{},"（里面放图标），一个",[102,139348,51596],{},"（里面放",[102,139351,51596],{},[102,139353,14],{},[62,139355,139037,139356,139358],{},[102,139357,22902],{},"设置浮动，让h5与这个div左右排列",[62,139360,139361],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139363,138376],{},[96,139365,139367],{"className":126537,"code":139366,"language":126539,"meta":22,"style":22},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[102,139368,139369,139375,139387,139399,139426],{"__ignoreMap":22},[105,139370,139371,139373],{"class":107,"line":108},[105,139372,134294],{"class":1954},[105,139374,15564],{"class":115},[105,139376,139377,139379,139381,139383,139385],{"class":107,"line":28},[105,139378,70553],{"class":164},[105,139380,51422],{"class":115},[105,139382,816],{"class":164},[105,139384,51477],{"class":111},[105,139386,1282],{"class":115},[105,139388,139389,139391,139393,139395,139397],{"class":107,"line":1171},[105,139390,70773],{"class":164},[105,139392,51422],{"class":115},[105,139394,816],{"class":164},[105,139396,51477],{"class":111},[105,139398,1282],{"class":115},[105,139400,139401,139403,139405,139407,139409,139411,139413,139415,139418,139420,139422,139424],{"class":107,"line":1186},[105,139402,70596],{"class":164},[105,139404,51422],{"class":115},[105,139406,61711],{"class":164},[105,139408,116],{"class":115},[105,139410,134333],{"class":5208},[105,139412,13706],{"class":115},[105,139414,61721],{"class":164},[105,139416,139417],{"class":164}," -10",[105,139419,51477],{"class":111},[105,139421,134352],{"class":164},[105,139423,51477],{"class":111},[105,139425,1282],{"class":115},[105,139427,139428],{"class":107,"line":1192},[105,139429,1556],{"class":115},[14,139431,138416],{},[96,139433,139434],{"className":126537,"code":139366,"language":126539,"meta":22,"style":22},[102,139435,139436,139442,139454,139466,139492],{"__ignoreMap":22},[105,139437,139438,139440],{"class":107,"line":108},[105,139439,134294],{"class":1954},[105,139441,15564],{"class":115},[105,139443,139444,139446,139448,139450,139452],{"class":107,"line":28},[105,139445,70553],{"class":164},[105,139447,51422],{"class":115},[105,139449,816],{"class":164},[105,139451,51477],{"class":111},[105,139453,1282],{"class":115},[105,139455,139456,139458,139460,139462,139464],{"class":107,"line":1171},[105,139457,70773],{"class":164},[105,139459,51422],{"class":115},[105,139461,816],{"class":164},[105,139463,51477],{"class":111},[105,139465,1282],{"class":115},[105,139467,139468,139470,139472,139474,139476,139478,139480,139482,139484,139486,139488,139490],{"class":107,"line":1186},[105,139469,70596],{"class":164},[105,139471,51422],{"class":115},[105,139473,61711],{"class":164},[105,139475,116],{"class":115},[105,139477,134333],{"class":5208},[105,139479,13706],{"class":115},[105,139481,61721],{"class":164},[105,139483,139417],{"class":164},[105,139485,51477],{"class":111},[105,139487,134352],{"class":164},[105,139489,51477],{"class":111},[105,139491,1282],{"class":115},[105,139493,139494],{"class":107,"line":1192},[105,139495,1556],{"class":115},[14,139497,139498],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1123,139500,139501,139504,139510,139516,139528],{},[62,139502,139503],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[62,139505,139506,139507,120222],{},"里面的布局利用 自定义列表来实现（",[102,139508,139509],{},"dl > dt + dd",[62,139511,139037,139512,139515],{},[102,139513,139514],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[62,139517,139037,139518,139521,139522,18402,139524,139527],{},[102,139519,139520],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[102,139523,139520],{},[102,139525,139526],{},"dd","之间有些距离",[62,139529,139530],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139532,138376],{},[96,139534,139535],{"className":126537,"code":138726,"language":126539,"meta":22,"style":22},[102,139536,139537,139543,139555],{"__ignoreMap":22},[105,139538,139539,139541],{"class":107,"line":108},[105,139540,51596],{"class":51285},[105,139542,15564],{"class":115},[105,139544,139545,139547,139549,139551,139553],{"class":107,"line":28},[105,139546,70455],{"class":164},[105,139548,51422],{"class":115},[105,139550,307],{"class":164},[105,139552,51541],{"class":164},[105,139554,1282],{"class":115},[105,139556,139557],{"class":107,"line":1171},[105,139558,1556],{"class":115},[14,139560,138416],{},[96,139562,139563],{"className":126537,"code":138726,"language":126539,"meta":22,"style":22},[102,139564,139565,139571,139583],{"__ignoreMap":22},[105,139566,139567,139569],{"class":107,"line":108},[105,139568,51596],{"class":51285},[105,139570,15564],{"class":115},[105,139572,139573,139575,139577,139579,139581],{"class":107,"line":28},[105,139574,70455],{"class":164},[105,139576,51422],{"class":115},[105,139578,307],{"class":164},[105,139580,51541],{"class":164},[105,139582,1282],{"class":115},[105,139584,139585],{"class":107,"line":1171},[105,139586,1556],{"class":115},[14,139588,139589],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1123,139591,139592,139601,139604,139615],{},[62,139593,139594,139595,139597,139598,139600],{},"分为上下两块，上面是 ",[102,139596,131757],{}," 友情链接，下面是 ",[102,139599,131750],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[62,139602,139603],{},"把内容分别复制到相应模块中",[62,139605,139037,139606,139608,139609,139611,139612,139614],{},[102,139607,131757],{}," 设置 15px 的下外边距，给",[102,139610,131757],{}," 里面 的 ",[102,139613,354],{}," 标签设置 左右 3px 的外边距",[62,139616,139617,139618,139620],{},"给",[102,139619,131750],{}," 设置 20px 的行高",[14,139622,138376],{},[96,139624,139625],{"className":126537,"code":138726,"language":126539,"meta":22,"style":22},[102,139626,139627,139633,139645],{"__ignoreMap":22},[105,139628,139629,139631],{"class":107,"line":108},[105,139630,51596],{"class":51285},[105,139632,15564],{"class":115},[105,139634,139635,139637,139639,139641,139643],{"class":107,"line":28},[105,139636,70455],{"class":164},[105,139638,51422],{"class":115},[105,139640,307],{"class":164},[105,139642,51541],{"class":164},[105,139644,1282],{"class":115},[105,139646,139647],{"class":107,"line":1171},[105,139648,1556],{"class":115},[14,139650,138416],{},[96,139652,139653],{"className":126537,"code":138726,"language":126539,"meta":22,"style":22},[102,139654,139655,139661,139673],{"__ignoreMap":22},[105,139656,139657,139659],{"class":107,"line":108},[105,139658,51596],{"class":51285},[105,139660,15564],{"class":115},[105,139662,139663,139665,139667,139669,139671],{"class":107,"line":28},[105,139664,70455],{"class":164},[105,139666,51422],{"class":115},[105,139668,307],{"class":164},[105,139670,51541],{"class":164},[105,139672,1282],{"class":115},[105,139674,139675],{"class":107,"line":1171},[105,139676,1556],{"class":115},[14,139678,139679],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5118,139681,139682],{},"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":28,"depth":28,"links":139684},[139685,139686,139687,139694],{"id":137965,"depth":28,"text":137966},{"id":137984,"depth":28,"text":137985},{"id":138011,"depth":28,"text":138012,"children":139688},[139689,139690,139691,139692,139693],{"id":138015,"depth":1171,"text":138016},{"id":138028,"depth":1171,"text":138029},{"id":138052,"depth":1171,"text":138053},{"id":138074,"depth":1171,"text":138075},{"id":138146,"depth":1171,"text":138147},{"id":138272,"depth":28,"text":138273,"children":139695},[139696,139697,139698,139699,139701],{"id":138276,"depth":1171,"text":138277},{"id":138283,"depth":1171,"text":138284},{"id":138455,"depth":1171,"text":138456},{"id":138996,"depth":1171,"text":139700},"15.4.4 nav导航模块制作",{"id":139294,"depth":1171,"text":139295},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137957,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139708,"title":139709,"body":139710,"description":23369,"extension":30,"meta":142112,"navigation":32,"path":142113,"seo":142114,"stem":142115,"__hash__":142116},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139711,"toc":142089},[139712,139715,139719,139723,139735,139738,139741,139744,139755,139757,139781,139783,139807,139812,139815,139817,139853,139855,139891,139894,139899,139902,139905,139908,139938,139945,139948,139958,139960,139994,139997,140031,140037,140054,140056,140092,140094,140130,140135,140160,140162,140188,140190,140214,140221,140224,140288,140290,140332,140334,140374,140381,140386,140388,140418,140420,140450,140454,140457,140464,140476,140478,140504,140506,140530,140533,140535,140559,140565,140575,140577,140607,140609,140639,140646,140687,140689,140725,140727,140763,140767,140770,140773,140776,140782,140787,140790,140813,140816,140840,140843,140867,140872,140875,140878,140881,140884,140887,140961,140963,140993,140995,141025,141028,141031,141063,141067,141071,141085,141094,141097,141102,141104,141198,141200,141294,141317,141319,141343,141345,141369,141376,141379,141389,141391,141415,141420,141428,141430,141460,141465,141505,141507,141533,141535,141561,141565,141568,141573,141576,141580,141588,141595,141603,141605,141635,141637,141667,141675,141678,141681,141683,141713,141715,141745,141748,141753,141755,141779,141781,141805,141808,141893,141895,141919,141921,141945,141949,141951,141975,141977,142011,142015,142029,142032,142037,142040,142045,142048,142078,142086],[10,139713,139709],{"id":139714},"_16-品优购项目下篇-主体与页面开发",[47,139716,139718],{"id":139717},"_161-项目主体模块制作","16.1 项目主体模块制作",[76,139720,139722],{"id":139721},"_1611-首页制作","16.1.1 首页制作",[14,139724,139725,139727,139728,139730,139731,139734],{},[265,139726,102043],{}," 主体模块是 ",[265,139729,74043],{}," 里面专有的，注意需要新的样式文件 ",[265,139732,139733],{},"index.css，"," 就不要写在common.css中了",[20,139736],{"style":126393,"src":139737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[20,139739],{"style":126393,"src":139740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139742,139743],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1123,139745,139746,139749,139752],{},[62,139747,139748],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[62,139750,139751],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[62,139753,139754],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139756,138376],{},[96,139758,139759],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,139760,139761,139767,139777],{"__ignoreMap":22},[105,139762,139763,139765],{"class":107,"line":108},[105,139764,130385],{"class":1954},[105,139766,15564],{"class":115},[105,139768,139769,139771,139773,139775],{"class":107,"line":28},[105,139770,131017],{"class":164},[105,139772,51422],{"class":115},[105,139774,23729],{"class":164},[105,139776,1282],{"class":115},[105,139778,139779],{"class":107,"line":1171},[105,139780,1556],{"class":115},[14,139782,138416],{},[96,139784,139785],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,139786,139787,139793,139803],{"__ignoreMap":22},[105,139788,139789,139791],{"class":107,"line":108},[105,139790,130385],{"class":1954},[105,139792,15564],{"class":115},[105,139794,139795,139797,139799,139801],{"class":107,"line":28},[105,139796,131017],{"class":164},[105,139798,51422],{"class":115},[105,139800,23729],{"class":164},[105,139802,1282],{"class":115},[105,139804,139805],{"class":107,"line":1171},[105,139806,1556],{"class":115},[59,139808,139809],{},[62,139810,139811],{},"左侧focus模块制作",[20,139813],{"style":126393,"src":139814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139816,138376],{},[96,139818,139819],{"className":126537,"code":127860,"language":126539,"meta":22,"style":22},[102,139820,139821,139829,139839,139849],{"__ignoreMap":22},[105,139822,139823,139825,139827],{"class":107,"line":108},[105,139824,53806],{"class":51285},[105,139826,61885],{"class":1954},[105,139828,15564],{"class":115},[105,139830,139831,139833,139835,139837],{"class":107,"line":28},[105,139832,127875],{"class":164},[105,139834,51422],{"class":115},[105,139836,54874],{"class":164},[105,139838,1282],{"class":115},[105,139840,139841,139843,139845,139847],{"class":107,"line":1171},[105,139842,70783],{"class":164},[105,139844,51422],{"class":115},[105,139846,54722],{"class":164},[105,139848,1282],{"class":115},[105,139850,139851],{"class":107,"line":1186},[105,139852,1556],{"class":115},[14,139854,138416],{},[96,139856,139857],{"className":126537,"code":127860,"language":126539,"meta":22,"style":22},[102,139858,139859,139867,139877,139887],{"__ignoreMap":22},[105,139860,139861,139863,139865],{"class":107,"line":108},[105,139862,53806],{"class":51285},[105,139864,61885],{"class":1954},[105,139866,15564],{"class":115},[105,139868,139869,139871,139873,139875],{"class":107,"line":28},[105,139870,127875],{"class":164},[105,139872,51422],{"class":115},[105,139874,54874],{"class":164},[105,139876,1282],{"class":115},[105,139878,139879,139881,139883,139885],{"class":107,"line":1171},[105,139880,70783],{"class":164},[105,139882,51422],{"class":115},[105,139884,54722],{"class":164},[105,139886,1282],{"class":115},[105,139888,139889],{"class":107,"line":1186},[105,139890,1556],{"class":115},[14,139892,139893],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[59,139895,139896],{"start":28},[62,139897,139898],{},"右侧newsflash模块制作",[20,139900],{"style":126393,"src":139901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139903,139904],{},"右侧的模块 分为上中下三个盒子",[14,139906,139907],{},"结构代码：",[96,139909,139910],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,139911,139912],{"__ignoreMap":22},[105,139913,139914,139916,139918,139920,139922,139924,139926,139928,139930,139932,139934,139936],{"class":107,"line":108},[105,139915,1026],{"class":115},[105,139917,20],{"class":51285},[105,139919,55224],{"class":1954},[105,139921,161],{"class":115},[105,139923,134054],{"class":220},[105,139925,55232],{"class":1954},[105,139927,161],{"class":115},[105,139929,134061],{"class":220},[105,139931,134064],{"class":1954},[105,139933,161],{"class":115},[105,139935,134069],{"class":220},[105,139937,51292],{"class":115},[14,139939,139940,139941,139944],{},"1 号盒子为 ",[102,139942,139943],{},"news"," 新闻模块 高度为 165px",[20,139946],{"style":126393,"src":139947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,139949,139950,139951,139954,139955],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[102,139952,139953],{},"news-hd","，下面是 ",[102,139956,139957],{},"news-bd",[14,139959,139907],{},[96,139961,139962],{"className":127284,"code":130641,"language":127286,"meta":22,"style":22},[102,139963,139964,139968,139982,139986],{"__ignoreMap":22},[105,139965,139966],{"class":107,"line":108},[105,139967,130648],{"class":174},[105,139969,139970,139972,139974,139976,139978,139980],{"class":107,"line":28},[105,139971,1026],{"class":115},[105,139973,51596],{"class":51285},[105,139975,53471],{"class":1954},[105,139977,161],{"class":115},[105,139979,130661],{"class":220},[105,139981,51292],{"class":115},[105,139983,139984],{"class":107,"line":1171},[105,139985,130668],{"class":115},[105,139987,139988,139990,139992],{"class":107,"line":1186},[105,139989,51770],{"class":115},[105,139991,51596],{"class":51285},[105,139993,51292],{"class":115},[14,139995,139996],{},"样式代码：",[96,139998,139999],{"className":127284,"code":130641,"language":127286,"meta":22,"style":22},[102,140000,140001,140005,140019,140023],{"__ignoreMap":22},[105,140002,140003],{"class":107,"line":108},[105,140004,130648],{"class":174},[105,140006,140007,140009,140011,140013,140015,140017],{"class":107,"line":28},[105,140008,1026],{"class":115},[105,140010,51596],{"class":51285},[105,140012,53471],{"class":1954},[105,140014,161],{"class":115},[105,140016,130661],{"class":220},[105,140018,51292],{"class":115},[105,140020,140021],{"class":107,"line":1171},[105,140022,130668],{"class":115},[105,140024,140025,140027,140029],{"class":107,"line":1186},[105,140026,51770],{"class":115},[105,140028,51596],{"class":51285},[105,140030,51292],{"class":115},[14,140032,140033,140034,140036],{},"上面是",[102,140035,139953],{},"，设置高度是 33px，设置下边框",[1123,140038,140039,140045],{},[62,140040,140041,140042,140044],{},"里面放一个",[102,140043,22902],{}," 标题",[62,140046,140047,140048,140050,140051,140053],{},"放一个a",[102,140049,102678],{},"，内容是 更多，然后让 ",[102,140052,354],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140055,139907],{},[96,140057,140058],{"className":126537,"code":138379,"language":126539,"meta":22,"style":22},[102,140059,140060,140068,140078,140088],{"__ignoreMap":22},[105,140061,140062,140064,140066],{"class":107,"line":108},[105,140063,51596],{"class":51285},[105,140065,137538],{"class":1954},[105,140067,15564],{"class":115},[105,140069,140070,140072,140074,140076],{"class":107,"line":28},[105,140071,137545],{"class":164},[105,140073,51422],{"class":115},[105,140075,7644],{"class":220},[105,140077,1282],{"class":115},[105,140079,140080,140082,140084,140086],{"class":107,"line":1171},[105,140081,128153],{"class":164},[105,140083,51422],{"class":115},[105,140085,60854],{"class":164},[105,140087,1282],{"class":115},[105,140089,140090],{"class":107,"line":1186},[105,140091,1556],{"class":115},[14,140093,139996],{},[96,140095,140096],{"className":126537,"code":138379,"language":126539,"meta":22,"style":22},[102,140097,140098,140106,140116,140126],{"__ignoreMap":22},[105,140099,140100,140102,140104],{"class":107,"line":108},[105,140101,51596],{"class":51285},[105,140103,137538],{"class":1954},[105,140105,15564],{"class":115},[105,140107,140108,140110,140112,140114],{"class":107,"line":28},[105,140109,137545],{"class":164},[105,140111,51422],{"class":115},[105,140113,7644],{"class":220},[105,140115,1282],{"class":115},[105,140117,140118,140120,140122,140124],{"class":107,"line":1171},[105,140119,128153],{"class":164},[105,140121,51422],{"class":115},[105,140123,60854],{"class":164},[105,140125,1282],{"class":115},[105,140127,140128],{"class":107,"line":1186},[105,140129,1556],{"class":115},[14,140131,140132,140133],{},"下面是",[102,140134,139957],{},[1123,140136,140137,140145],{},[62,140138,140139,140140,101003,140142,140144],{},"里面包含 ",[102,140141,1123],{},[102,140143,62],{}," 还有链接",[62,140146,139617,140147,140149,140150,140152,140153,140156,140157],{},[102,140148,62],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[102,140151,131203],{}," 2.设置 ",[102,140154,140155],{},"white-space: nowrap;"," 3. 设置 ",[102,140158,140159],{},"text-overflow: ellipsis;",[14,140161,139907],{},[96,140163,140165],{"className":126537,"code":140164,"language":126539,"meta":22,"style":22},"div {\n  overflow: hidden;\n}\n",[102,140166,140167,140173,140184],{"__ignoreMap":22},[105,140168,140169,140171],{"class":107,"line":108},[105,140170,51596],{"class":51285},[105,140172,15564],{"class":115},[105,140174,140175,140178,140180,140182],{"class":107,"line":28},[105,140176,140177],{"class":164},"  overflow",[105,140179,51422],{"class":115},[105,140181,61699],{"class":164},[105,140183,1282],{"class":115},[105,140185,140186],{"class":107,"line":1171},[105,140187,1556],{"class":115},[14,140189,139996],{},[96,140191,140192],{"className":126537,"code":140164,"language":126539,"meta":22,"style":22},[102,140193,140194,140200,140210],{"__ignoreMap":22},[105,140195,140196,140198],{"class":107,"line":108},[105,140197,51596],{"class":51285},[105,140199,15564],{"class":115},[105,140201,140202,140204,140206,140208],{"class":107,"line":28},[105,140203,140177],{"class":164},[105,140205,51422],{"class":115},[105,140207,61699],{"class":164},[105,140209,1282],{"class":115},[105,140211,140212],{"class":107,"line":1171},[105,140213,1556],{"class":115},[14,140215,140216,140217,140220],{},"2 号盒子为 ",[102,140218,140219],{},"lifeservice"," 生活服务模块 高度为 209px",[20,140222],{"style":126393,"src":140223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1123,140225,140226,140229,140239,140263,140274],{},[62,140227,140228],{},"设置边框（左右下边框）",[62,140230,140231,140232,140235,140236,140238],{},"里面的内容 是 ",[102,140233,140234],{},"ul > 12*li","，给",[102,140237,62],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[62,140240,140241,140242],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1123,140243,140244,140249,140258],{},[62,140245,140246,140248],{},[102,140247,140219],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[62,140250,140251,140252,140254,140255,140257],{},"可以让 ",[102,140253,140219],{}," 里面的 ",[102,140256,1123],{}," 宽度为 252，就可以装的下 4 个 小 li",[62,140259,140260,140262],{},[102,140261,140219],{}," 盒子 overflow 隐藏多余的部分就可以了",[62,140264,116452,140265,140267,140268,140270,140271,140273],{},[102,140266,62],{}," 里面放一个 ",[102,140269,557],{},"（里面放图标），下面的文本用 ",[102,140272,14],{}," 标签包裹",[62,140275,139037,140276,140278,140279,140281,140282,139071,140284,140287],{},[102,140277,557],{}," 设置 24px宽和28px的高（注意 ",[102,140280,557],{}," 是行内元素， 转成行内块），给 ",[102,140283,62],{},[102,140285,140286],{},"text-align:center"," 让里面内容居中显示",[14,140289,139907],{},[96,140291,140293],{"className":126537,"code":140292,"language":126539,"meta":22,"style":22},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[102,140294,140295,140313,140318,140328],{"__ignoreMap":22},[105,140296,140297,140299,140301,140303,140305,140307,140309,140311],{"class":107,"line":108},[105,140298,105],{"class":51285},[105,140300,12427],{"class":115},[105,140302,354],{"class":51285},[105,140304,12427],{"class":115},[105,140306,23546],{"class":51285},[105,140308,12427],{"class":115},[105,140310,265],{"class":51285},[105,140312,15564],{"class":115},[105,140314,140315],{"class":107,"line":28},[105,140316,140317],{"class":174},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[105,140319,140320,140322,140324,140326],{"class":107,"line":1171},[105,140321,128153],{"class":164},[105,140323,51422],{"class":115},[105,140325,128215],{"class":164},[105,140327,1282],{"class":115},[105,140329,140330],{"class":107,"line":1186},[105,140331,1556],{"class":115},[14,140333,139996],{},[96,140335,140336],{"className":126537,"code":140292,"language":126539,"meta":22,"style":22},[102,140337,140338,140356,140360,140370],{"__ignoreMap":22},[105,140339,140340,140342,140344,140346,140348,140350,140352,140354],{"class":107,"line":108},[105,140341,105],{"class":51285},[105,140343,12427],{"class":115},[105,140345,354],{"class":51285},[105,140347,12427],{"class":115},[105,140349,23546],{"class":51285},[105,140351,12427],{"class":115},[105,140353,265],{"class":51285},[105,140355,15564],{"class":115},[105,140357,140358],{"class":107,"line":28},[105,140359,140317],{"class":174},[105,140361,140362,140364,140366,140368],{"class":107,"line":1171},[105,140363,128153],{"class":164},[105,140365,51422],{"class":115},[105,140367,128215],{"class":164},[105,140369,1282],{"class":115},[105,140371,140372],{"class":107,"line":1186},[105,140373,1556],{"class":115},[14,140375,140376,140377,140380],{},"3 号盒子为 ",[102,140378,140379],{},"bargain"," 特价商品",[1123,140382,140383],{},[62,140384,140385],{},"这个比较简单，直接插入一张图片即可",[14,140387,139907],{},[96,140389,140390],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,140391,140392],{"__ignoreMap":22},[105,140393,140394,140396,140398,140400,140402,140404,140406,140408,140410,140412,140414,140416],{"class":107,"line":108},[105,140395,1026],{"class":115},[105,140397,20],{"class":51285},[105,140399,55224],{"class":1954},[105,140401,161],{"class":115},[105,140403,134054],{"class":220},[105,140405,55232],{"class":1954},[105,140407,161],{"class":115},[105,140409,134061],{"class":220},[105,140411,134064],{"class":1954},[105,140413,161],{"class":115},[105,140415,134069],{"class":220},[105,140417,51292],{"class":115},[14,140419,139996],{},[96,140421,140422],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,140423,140424],{"__ignoreMap":22},[105,140425,140426,140428,140430,140432,140434,140436,140438,140440,140442,140444,140446,140448],{"class":107,"line":108},[105,140427,1026],{"class":115},[105,140429,20],{"class":51285},[105,140431,55224],{"class":1954},[105,140433,161],{"class":115},[105,140435,134054],{"class":220},[105,140437,55232],{"class":1954},[105,140439,161],{"class":115},[105,140441,134061],{"class":220},[105,140443,134064],{"class":1954},[105,140445,161],{"class":115},[105,140447,134069],{"class":220},[105,140449,51292],{"class":115},[76,140451,140453],{"id":140452},"_1612-推荐模块制作","16.1.2 推荐模块制作",[20,140455],{"style":126393,"src":140456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140458,140459,140460,140463],{},"大盒子 ",[102,140461,140462],{},"recom"," 推荐模块 recommend",[1123,140465,140466],{},[62,140467,140468,140469,140471,140472,140475],{},"给这个 ",[102,140470,140462],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[102,140473,140474],{},"#ebebeb","），设置距离上边 12px",[14,140477,139907],{},[96,140479,140481],{"className":126537,"code":140480,"language":126539,"meta":22,"style":22},"div {\n  background-color: #f0f0f0;\n}\n",[102,140482,140483,140489,140500],{"__ignoreMap":22},[105,140484,140485,140487],{"class":107,"line":108},[105,140486,51596],{"class":51285},[105,140488,15564],{"class":115},[105,140490,140491,140493,140495,140498],{"class":107,"line":28},[105,140492,70863],{"class":164},[105,140494,51422],{"class":115},[105,140496,140497],{"class":164},"#f0f0f0",[105,140499,1282],{"class":115},[105,140501,140502],{"class":107,"line":1171},[105,140503,1556],{"class":115},[14,140505,139996],{},[96,140507,140508],{"className":126537,"code":140480,"language":126539,"meta":22,"style":22},[102,140509,140510,140516,140526],{"__ignoreMap":22},[105,140511,140512,140514],{"class":107,"line":108},[105,140513,51596],{"class":51285},[105,140515,15564],{"class":115},[105,140517,140518,140520,140522,140524],{"class":107,"line":28},[105,140519,70863],{"class":164},[105,140521,51422],{"class":115},[105,140523,140497],{"class":164},[105,140525,1282],{"class":115},[105,140527,140528],{"class":107,"line":1171},[105,140529,1556],{"class":115},[14,140531,140532],{},"里面包含 2 个盒子， 浮动即可",[14,140534,139907],{},[96,140536,140537],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,140538,140539,140545,140555],{"__ignoreMap":22},[105,140540,140541,140543],{"class":107,"line":108},[105,140542,130385],{"class":1954},[105,140544,15564],{"class":115},[105,140546,140547,140549,140551,140553],{"class":107,"line":28},[105,140548,131017],{"class":164},[105,140550,51422],{"class":115},[105,140552,23729],{"class":164},[105,140554,1282],{"class":115},[105,140556,140557],{"class":107,"line":1171},[105,140558,1556],{"class":115},[14,140560,140561,140562],{},"1 号盒子 ",[102,140563,140564],{},"recom_hd",[1123,140566,140567,140570],{},[62,140568,140569],{},"设置宽度205px，高度163px",[62,140571,140041,140572,140574],{},[102,140573,20],{},"标签，插入图片即可",[14,140576,139907],{},[96,140578,140579],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,140580,140581],{"__ignoreMap":22},[105,140582,140583,140585,140587,140589,140591,140593,140595,140597,140599,140601,140603,140605],{"class":107,"line":108},[105,140584,1026],{"class":115},[105,140586,20],{"class":51285},[105,140588,55224],{"class":1954},[105,140590,161],{"class":115},[105,140592,134054],{"class":220},[105,140594,55232],{"class":1954},[105,140596,161],{"class":115},[105,140598,134061],{"class":220},[105,140600,134064],{"class":1954},[105,140602,161],{"class":115},[105,140604,134069],{"class":220},[105,140606,51292],{"class":115},[14,140608,139996],{},[96,140610,140611],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,140612,140613],{"__ignoreMap":22},[105,140614,140615,140617,140619,140621,140623,140625,140627,140629,140631,140633,140635,140637],{"class":107,"line":108},[105,140616,1026],{"class":115},[105,140618,20],{"class":51285},[105,140620,55224],{"class":1954},[105,140622,161],{"class":115},[105,140624,134054],{"class":220},[105,140626,55232],{"class":1954},[105,140628,161],{"class":115},[105,140630,134061],{"class":220},[105,140632,134064],{"class":1954},[105,140634,161],{"class":115},[105,140636,134069],{"class":220},[105,140638,51292],{"class":115},[14,140640,140641,140642,140645],{},"2 号盒子 ",[102,140643,140644],{},"recom_bd"," ，注意里面的小竖线",[1123,140647,140648,140659,140662,140667,140672],{},[62,140649,140650,140651,140653,140654,140656,140657],{},"右侧结构里面放 ",[102,140652,1123],{}," 包含 4个 ",[102,140655,62],{},"，每个li里面包含一个",[102,140658,20],{},[62,140660,140661],{},"直接利用切片工具把里面的内容当成一张图片",[62,140663,139037,140664,140666],{},[102,140665,62],{}," 设置浮动",[62,140668,139037,140669,140671],{},[102,140670,20],{}," 设置宽高，宽度 248px，高度 163px",[62,140673,140674,140675,140235,140678,140680,140681,140683,140684],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[102,140676,140677],{},"top 10px",[102,140679,62],{},"设置相对定位（注意，最后一个",[102,140682,62],{},"不用设置伪元素），可以利用 ",[102,140685,140686],{},"nth-child(-n+3){...}",[14,140688,139907],{},[96,140690,140691],{"className":126537,"code":138379,"language":126539,"meta":22,"style":22},[102,140692,140693,140701,140711,140721],{"__ignoreMap":22},[105,140694,140695,140697,140699],{"class":107,"line":108},[105,140696,51596],{"class":51285},[105,140698,137538],{"class":1954},[105,140700,15564],{"class":115},[105,140702,140703,140705,140707,140709],{"class":107,"line":28},[105,140704,137545],{"class":164},[105,140706,51422],{"class":115},[105,140708,7644],{"class":220},[105,140710,1282],{"class":115},[105,140712,140713,140715,140717,140719],{"class":107,"line":1171},[105,140714,128153],{"class":164},[105,140716,51422],{"class":115},[105,140718,60854],{"class":164},[105,140720,1282],{"class":115},[105,140722,140723],{"class":107,"line":1186},[105,140724,1556],{"class":115},[14,140726,139996],{},[96,140728,140729],{"className":126537,"code":138379,"language":126539,"meta":22,"style":22},[102,140730,140731,140739,140749,140759],{"__ignoreMap":22},[105,140732,140733,140735,140737],{"class":107,"line":108},[105,140734,51596],{"class":51285},[105,140736,137538],{"class":1954},[105,140738,15564],{"class":115},[105,140740,140741,140743,140745,140747],{"class":107,"line":28},[105,140742,137545],{"class":164},[105,140744,51422],{"class":115},[105,140746,7644],{"class":220},[105,140748,1282],{"class":115},[105,140750,140751,140753,140755,140757],{"class":107,"line":1171},[105,140752,128153],{"class":164},[105,140754,51422],{"class":115},[105,140756,60854],{"class":164},[105,140758,1282],{"class":115},[105,140760,140761],{"class":107,"line":1186},[105,140762,1556],{"class":115},[76,140764,140766],{"id":140765},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[20,140768],{"style":126393,"src":140769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140771,140772],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140774,140775],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140777,140778,140781],{},[102,140779,140780],{},"box_hd"," 制作",[14,140783,140561,140784,140786],{},[102,140785,140780],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[20,140788],{"style":126393,"src":140789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1123,140791,140792,140797,140802,140805],{},[62,140793,140794,140796],{},[102,140795,140780],{}," 给 30px 的高度，2个像素的下边框",[62,140798,140799,140800],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[102,140801,139048],{},[62,140803,140804],{},"左侧盒左浮动，右侧盒子右浮动",[62,140806,140807,140809,140810,140812],{},[102,140808,354],{},"标签之间的距离用左右的",[102,140811,30868],{},"撑开即可",[14,140814,140815],{},"结构代码",[96,140817,140818],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,140819,140820,140826,140836],{"__ignoreMap":22},[105,140821,140822,140824],{"class":107,"line":108},[105,140823,130385],{"class":1954},[105,140825,15564],{"class":115},[105,140827,140828,140830,140832,140834],{"class":107,"line":28},[105,140829,131017],{"class":164},[105,140831,51422],{"class":115},[105,140833,23729],{"class":164},[105,140835,1282],{"class":115},[105,140837,140838],{"class":107,"line":1171},[105,140839,1556],{"class":115},[14,140841,140842],{},"样式代码",[96,140844,140845],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,140846,140847,140853,140863],{"__ignoreMap":22},[105,140848,140849,140851],{"class":107,"line":108},[105,140850,130385],{"class":1954},[105,140852,15564],{"class":115},[105,140854,140855,140857,140859,140861],{"class":107,"line":28},[105,140856,131017],{"class":164},[105,140858,51422],{"class":115},[105,140860,23729],{"class":164},[105,140862,1282],{"class":115},[105,140864,140865],{"class":107,"line":1171},[105,140866,1556],{"class":115},[14,140868,140869,140781],{},[102,140870,140871],{},"box_bd",[14,140873,140874],{},"2 号盒子 box_bd，不要给高度",[20,140876],{"style":126393,"src":140877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140879,140880],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140882,140883],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140885,140886],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1123,140888,140889,140901,140917],{},[62,140890,140891,140893,140894,140897,140898,140900],{},[102,140892,140871],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[102,140895,140896],{},"tab_content","，在",[102,140899,140896],{}," 里面包裹tab选项卡对应的内容",[62,140902,140903,140904,140907,140908,140910,140911,140913,140914,140916],{},"内容被一个大盒子包裹（",[102,140905,140906],{},"tab_list_item","），里面是 ",[102,140909,1123],{}," 包裹 5个 ",[102,140912,62],{},"，每个",[102,140915,62],{},"设置对应的宽度，然后设置浮动",[62,140918,140919,140920,140922,140923,140925,140926],{},"而这5个",[102,140921,62],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[102,140924,62],{},"设置",[1123,140927,140928,140946,140949],{},[62,140929,140930,140931,140933,140934,140936,140937,140939,140940,140942,140943,140945],{},"第一个小 ",[102,140932,62],{}," 分为上下结构，上面是 ",[102,140935,1123],{}," 包裹 ",[102,140938,62],{}," ，",[102,140941,62],{},"里面包裹 ",[102,140944,354],{},"，下面插入一张图片",[62,140947,140948],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[62,140950,140951,140952,140954,140955,140957,140958,140960],{},"后面的小 ",[102,140953,62],{}," 里面先放一个",[102,140956,354],{},"标签，然后在",[102,140959,354],{},"标签里面插入图片即可",[14,140962,140815],{},[96,140964,140965],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,140966,140967],{"__ignoreMap":22},[105,140968,140969,140971,140973,140975,140977,140979,140981,140983,140985,140987,140989,140991],{"class":107,"line":108},[105,140970,1026],{"class":115},[105,140972,20],{"class":51285},[105,140974,55224],{"class":1954},[105,140976,161],{"class":115},[105,140978,134054],{"class":220},[105,140980,55232],{"class":1954},[105,140982,161],{"class":115},[105,140984,134061],{"class":220},[105,140986,134064],{"class":1954},[105,140988,161],{"class":115},[105,140990,134069],{"class":220},[105,140992,51292],{"class":115},[14,140994,140842],{},[96,140996,140997],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,140998,140999],{"__ignoreMap":22},[105,141000,141001,141003,141005,141007,141009,141011,141013,141015,141017,141019,141021,141023],{"class":107,"line":108},[105,141002,1026],{"class":115},[105,141004,20],{"class":51285},[105,141006,55224],{"class":1954},[105,141008,161],{"class":115},[105,141010,134054],{"class":220},[105,141012,55232],{"class":1954},[105,141014,161],{"class":115},[105,141016,134061],{"class":220},[105,141018,134064],{"class":1954},[105,141020,161],{"class":115},[105,141022,134069],{"class":220},[105,141024,51292],{"class":115},[14,141026,141027],{},"tab栏切换需求！！！！！！介绍：",[20,141029],{"style":126393,"src":141030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1123,141032,141033,141041,141047,141050],{},[62,141034,141035,141038,141039],{},[102,141036,141037],{},"tab","栏的布局是 ",[102,141040,139048],{},[62,141042,141043,141044,141046],{},"有多少个",[102,141045,141037],{},"选项卡，那么对应就有多少个内容",[62,141048,141049],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[62,141051,141052,141053,141056,141057,141059,141060,141062],{},"等后面我们学习了",[102,141054,141055],{},"js","之后，我们就会配合",[102,141058,141055],{},"来实现，",[102,141061,141037],{},"栏的切换",[47,141064,141066],{"id":141065},"_162-列表制作","16.2 列表制作",[76,141068,141070],{"id":141069},"_1621-准备工作","16.2.1 准备工作",[1123,141072,141073,141076,141079,141082],{},[62,141074,141075],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[62,141077,141078],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[62,141080,141081],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[62,141083,141084],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[76,141086,141088,141089,101003,141091,141093],{"id":141087},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[102,141090,131542],{},[102,141092,53698],{}," 修改",[20,141095],{"style":126393,"src":141096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1123,141098,141099],{},[62,141100,141101],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141103,139907],{},[96,141105,141106],{"className":126537,"code":131969,"language":126539,"meta":22,"style":22},[102,141107,141108,141112,141126,141130,141144,141148,141162,141166,141180,141184],{"__ignoreMap":22},[105,141109,141110],{"class":107,"line":108},[105,141111,131976],{"class":174},[105,141113,141114,141116,141118,141120,141122,141124],{"class":107,"line":28},[105,141115,131981],{"class":1954},[105,141117,79792],{"class":115},[105,141119,128897],{"class":164},[105,141121,51422],{"class":115},[105,141123,131990],{"class":164},[105,141125,129467],{"class":115},[105,141127,141128],{"class":107,"line":1171},[105,141129,131997],{"class":174},[105,141131,141132,141134,141136,141138,141140,141142],{"class":107,"line":1186},[105,141133,132002],{"class":1954},[105,141135,79792],{"class":115},[105,141137,128897],{"class":164},[105,141139,51422],{"class":115},[105,141141,54749],{"class":164},[105,141143,129467],{"class":115},[105,141145,141146],{"class":107,"line":1192},[105,141147,132017],{"class":174},[105,141149,141150,141152,141154,141156,141158,141160],{"class":107,"line":1206},[105,141151,132022],{"class":1954},[105,141153,79792],{"class":115},[105,141155,128897],{"class":164},[105,141157,51422],{"class":115},[105,141159,54816],{"class":164},[105,141161,129467],{"class":115},[105,141163,141164],{"class":107,"line":1212},[105,141165,132037],{"class":174},[105,141167,141168,141170,141172,141174,141176,141178],{"class":107,"line":1303},[105,141169,132042],{"class":1954},[105,141171,79792],{"class":115},[105,141173,128897],{"class":164},[105,141175,51422],{"class":115},[105,141177,86218],{"class":164},[105,141179,129467],{"class":115},[105,141181,141182],{"class":107,"line":1309},[105,141183,132057],{"class":174},[105,141185,141186,141188,141190,141192,141194,141196],{"class":107,"line":1321},[105,141187,132062],{"class":1954},[105,141189,79792],{"class":115},[105,141191,128897],{"class":164},[105,141193,51422],{"class":115},[105,141195,132071],{"class":164},[105,141197,129467],{"class":115},[14,141199,139996],{},[96,141201,141202],{"className":126537,"code":131969,"language":126539,"meta":22,"style":22},[102,141203,141204,141208,141222,141226,141240,141244,141258,141262,141276,141280],{"__ignoreMap":22},[105,141205,141206],{"class":107,"line":108},[105,141207,131976],{"class":174},[105,141209,141210,141212,141214,141216,141218,141220],{"class":107,"line":28},[105,141211,131981],{"class":1954},[105,141213,79792],{"class":115},[105,141215,128897],{"class":164},[105,141217,51422],{"class":115},[105,141219,131990],{"class":164},[105,141221,129467],{"class":115},[105,141223,141224],{"class":107,"line":1171},[105,141225,131997],{"class":174},[105,141227,141228,141230,141232,141234,141236,141238],{"class":107,"line":1186},[105,141229,132002],{"class":1954},[105,141231,79792],{"class":115},[105,141233,128897],{"class":164},[105,141235,51422],{"class":115},[105,141237,54749],{"class":164},[105,141239,129467],{"class":115},[105,141241,141242],{"class":107,"line":1192},[105,141243,132017],{"class":174},[105,141245,141246,141248,141250,141252,141254,141256],{"class":107,"line":1206},[105,141247,132022],{"class":1954},[105,141249,79792],{"class":115},[105,141251,128897],{"class":164},[105,141253,51422],{"class":115},[105,141255,54816],{"class":164},[105,141257,129467],{"class":115},[105,141259,141260],{"class":107,"line":1212},[105,141261,132037],{"class":174},[105,141263,141264,141266,141268,141270,141272,141274],{"class":107,"line":1303},[105,141265,132042],{"class":1954},[105,141267,79792],{"class":115},[105,141269,128897],{"class":164},[105,141271,51422],{"class":115},[105,141273,86218],{"class":164},[105,141275,129467],{"class":115},[105,141277,141278],{"class":107,"line":1309},[105,141279,132057],{"class":174},[105,141281,141282,141284,141286,141288,141290,141292],{"class":107,"line":1321},[105,141283,132062],{"class":1954},[105,141285,79792],{"class":115},[105,141287,128897],{"class":164},[105,141289,51422],{"class":115},[105,141291,132071],{"class":164},[105,141293,129467],{"class":115},[1123,141295,141296,141307],{},[62,141297,141298,141299,141302,141303,101003,141305],{},"1 号盒子左侧浮动 ",[102,141300,141301],{},"sk_list"," 里面包含 ",[102,141304,1123],{},[102,141306,62],{},[62,141308,141309,141310,141302,141313,101003,141315],{},"2 号盒子左侧浮动 ",[102,141311,141312],{},"sk_con",[102,141314,1123],{},[102,141316,62],{},[14,141318,139907],{},[96,141320,141321],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,141322,141323,141329,141339],{"__ignoreMap":22},[105,141324,141325,141327],{"class":107,"line":108},[105,141326,130385],{"class":1954},[105,141328,15564],{"class":115},[105,141330,141331,141333,141335,141337],{"class":107,"line":28},[105,141332,131017],{"class":164},[105,141334,51422],{"class":115},[105,141336,23729],{"class":164},[105,141338,1282],{"class":115},[105,141340,141341],{"class":107,"line":1171},[105,141342,1556],{"class":115},[14,141344,139996],{},[96,141346,141347],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,141348,141349,141355,141365],{"__ignoreMap":22},[105,141350,141351,141353],{"class":107,"line":108},[105,141352,130385],{"class":1954},[105,141354,15564],{"class":115},[105,141356,141357,141359,141361,141363],{"class":107,"line":28},[105,141358,131017],{"class":164},[105,141360,51422],{"class":115},[105,141362,23729],{"class":164},[105,141364,1282],{"class":115},[105,141366,141367],{"class":107,"line":1171},[105,141368,1556],{"class":115},[76,141370,141372,141373],{"id":141371},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[102,141374,141375],{},"sk_container",[20,141377],{"style":126393,"src":141378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1123,141380,141381,141386],{},[62,141382,140561,141383,141385],{},[102,141384,141375],{}," 给宽度 1200，不要给高度",[62,141387,141388],{},"一定不要忘记清除浮动",[14,141390,139907],{},[96,141392,141393],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,141394,141395,141401,141411],{"__ignoreMap":22},[105,141396,141397,141399],{"class":107,"line":108},[105,141398,130385],{"class":1954},[105,141400,15564],{"class":115},[105,141402,141403,141405,141407,141409],{"class":107,"line":28},[105,141404,131017],{"class":164},[105,141406,51422],{"class":115},[105,141408,23729],{"class":164},[105,141410,1282],{"class":115},[105,141412,141413],{"class":107,"line":1171},[105,141414,1556],{"class":115},[59,141416,141417],{},[62,141418,141419],{},"sk_hd制作",[1123,141421,141422],{},[62,141423,140641,141424,141427],{},[102,141425,141426],{},"sk_hd"," ，插入图片即可",[14,141429,139907],{},[96,141431,141432],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,141433,141434],{"__ignoreMap":22},[105,141435,141436,141438,141440,141442,141444,141446,141448,141450,141452,141454,141456,141458],{"class":107,"line":108},[105,141437,1026],{"class":115},[105,141439,20],{"class":51285},[105,141441,55224],{"class":1954},[105,141443,161],{"class":115},[105,141445,134054],{"class":220},[105,141447,55232],{"class":1954},[105,141449,161],{"class":115},[105,141451,134061],{"class":220},[105,141453,134064],{"class":1954},[105,141455,161],{"class":115},[105,141457,134069],{"class":220},[105,141459,51292],{"class":115},[59,141461,141462],{"start":28},[62,141463,141464],{},"sk_bd制作",[1123,141466,141467],{},[62,141468,141469,141470,141473,141474,101003,141476,141478],{},"3 号盒子 ",[102,141471,141472],{},"sk_bd"," ，里面包含很多的 ",[102,141475,1123],{},[102,141477,62],{},[1123,141479,141480,141489],{},[62,141481,141482,141483,141485,141486,141488],{},"当鼠标移入到 ",[102,141484,62],{}," 上面的时候显示红色的边框，在这里先给 ",[102,141487,62],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[62,141490,141491,141492,141494,141495,141497,141498,141501,141502,141504],{},"由于给每个 ",[102,141493,62],{}," 都设置了外边距，导致一行的最后一个 ",[102,141496,62],{}," 掉了下来，在这里我们利用 ",[102,141499,141500],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[102,141503,62],{},"，去掉外边距就好了",[14,141506,139907],{},[96,141508,141509],{"className":126537,"code":138726,"language":126539,"meta":22,"style":22},[102,141510,141511,141517,141529],{"__ignoreMap":22},[105,141512,141513,141515],{"class":107,"line":108},[105,141514,51596],{"class":51285},[105,141516,15564],{"class":115},[105,141518,141519,141521,141523,141525,141527],{"class":107,"line":28},[105,141520,70455],{"class":164},[105,141522,51422],{"class":115},[105,141524,307],{"class":164},[105,141526,51541],{"class":164},[105,141528,1282],{"class":115},[105,141530,141531],{"class":107,"line":1171},[105,141532,1556],{"class":115},[14,141534,139996],{},[96,141536,141537],{"className":126537,"code":138726,"language":126539,"meta":22,"style":22},[102,141538,141539,141545,141557],{"__ignoreMap":22},[105,141540,141541,141543],{"class":107,"line":108},[105,141542,51596],{"class":51285},[105,141544,15564],{"class":115},[105,141546,141547,141549,141551,141553,141555],{"class":107,"line":28},[105,141548,70455],{"class":164},[105,141550,51422],{"class":115},[105,141552,307],{"class":164},[105,141554,51541],{"class":164},[105,141556,1282],{"class":115},[105,141558,141559],{"class":107,"line":1171},[105,141560,1556],{"class":115},[47,141562,141564],{"id":141563},"_163-注册页面制作","16.3 注册页面制作",[20,141566],{"style":126393,"src":141567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141569,141570,141572],{},[265,141571,9017],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[20,141574],{"style":126393,"src":141575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[76,141577,141579],{"id":141578},"_1631-准备工作","16.3.1 准备工作",[1123,141581,141582,141585],{},[62,141583,141584],{},"创建register.html，引入 base.css，引入favicon图标",[62,141586,141587],{},"创建register.css ，在html页面进行引入",[76,141589,141591,141592,141594],{"id":141590},"_1632-header-头部实现","16.3.2 ",[102,141593,131542],{}," 头部实现",[1123,141596,141597,141600],{},[62,141598,141599],{},"整个内容用 版心 进行包裹",[62,141601,141602],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141604,139907],{},[96,141606,141607],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,141608,141609],{"__ignoreMap":22},[105,141610,141611,141613,141615,141617,141619,141621,141623,141625,141627,141629,141631,141633],{"class":107,"line":108},[105,141612,1026],{"class":115},[105,141614,20],{"class":51285},[105,141616,55224],{"class":1954},[105,141618,161],{"class":115},[105,141620,134054],{"class":220},[105,141622,55232],{"class":1954},[105,141624,161],{"class":115},[105,141626,134061],{"class":220},[105,141628,134064],{"class":1954},[105,141630,161],{"class":115},[105,141632,134069],{"class":220},[105,141634,51292],{"class":115},[14,141636,139996],{},[96,141638,141639],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,141640,141641],{"__ignoreMap":22},[105,141642,141643,141645,141647,141649,141651,141653,141655,141657,141659,141661,141663,141665],{"class":107,"line":108},[105,141644,1026],{"class":115},[105,141646,20],{"class":51285},[105,141648,55224],{"class":1954},[105,141650,161],{"class":115},[105,141652,134054],{"class":220},[105,141654,55232],{"class":1954},[105,141656,161],{"class":115},[105,141658,134061],{"class":220},[105,141660,134064],{"class":1954},[105,141662,161],{"class":115},[105,141664,134069],{"class":220},[105,141666,51292],{"class":115},[76,141668,141670,141671,141674],{"id":141669},"_1633-registerarea-主体模块实现","16.3.3 ",[102,141672,141673],{},"registerarea"," 主体模块实现",[20,141676],{"style":126393,"src":141677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141679,141680],{},"整个大盒子 高度为 522px，设置4个边框",[14,141682,139907],{},[96,141684,141685],{"className":126537,"code":130694,"language":126539,"meta":22,"style":22},[102,141686,141687,141693,141709],{"__ignoreMap":22},[105,141688,141689,141691],{"class":107,"line":108},[105,141690,51596],{"class":51285},[105,141692,15564],{"class":115},[105,141694,141695,141697,141699,141701,141703,141705,141707],{"class":107,"line":28},[105,141696,70881],{"class":164},[105,141698,51422],{"class":115},[105,141700,333],{"class":164},[105,141702,51477],{"class":111},[105,141704,51506],{"class":164},[105,141706,129929],{"class":164},[105,141708,1282],{"class":115},[105,141710,141711],{"class":107,"line":1171},[105,141712,1556],{"class":115},[14,141714,139996],{},[96,141716,141717],{"className":126537,"code":130694,"language":126539,"meta":22,"style":22},[102,141718,141719,141725,141741],{"__ignoreMap":22},[105,141720,141721,141723],{"class":107,"line":108},[105,141722,51596],{"class":51285},[105,141724,15564],{"class":115},[105,141726,141727,141729,141731,141733,141735,141737,141739],{"class":107,"line":28},[105,141728,70881],{"class":164},[105,141730,51422],{"class":115},[105,141732,333],{"class":164},[105,141734,51477],{"class":111},[105,141736,51506],{"class":164},[105,141738,129929],{"class":164},[105,141740,1282],{"class":115},[105,141742,141743],{"class":107,"line":1171},[105,141744,1556],{"class":115},[14,141746,141747],{},"1号盒子 是一个 h3 标签，放标题",[1123,141749,141750],{},[62,141751,141752],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141754,139907],{},[96,141756,141757],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,141758,141759,141765,141775],{"__ignoreMap":22},[105,141760,141761,141763],{"class":107,"line":108},[105,141762,130385],{"class":1954},[105,141764,15564],{"class":115},[105,141766,141767,141769,141771,141773],{"class":107,"line":28},[105,141768,131017],{"class":164},[105,141770,51422],{"class":115},[105,141772,23729],{"class":164},[105,141774,1282],{"class":115},[105,141776,141777],{"class":107,"line":1171},[105,141778,1556],{"class":115},[14,141780,139996],{},[96,141782,141783],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,141784,141785,141791,141801],{"__ignoreMap":22},[105,141786,141787,141789],{"class":107,"line":108},[105,141788,130385],{"class":1954},[105,141790,15564],{"class":115},[105,141792,141793,141795,141797,141799],{"class":107,"line":28},[105,141794,131017],{"class":164},[105,141796,51422],{"class":115},[105,141798,23729],{"class":164},[105,141800,1282],{"class":115},[105,141802,141803],{"class":107,"line":1171},[105,141804,1556],{"class":115},[14,141806,141807],{},"2号盒子 里面放注册的内容",[1123,141809,141810,141813,141822,141836,141849,141852,141855,141873,141887],{},[62,141811,141812],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[62,141814,141815,141816,141818,141819,141821],{},"里面的内容利用 ",[102,141817,1123],{}," 包含 ",[102,141820,62],{}," 来实现的（不需要用表格）",[62,141823,139051,141824,141826,141827,141829,141830,141832,141833,141835],{},[102,141825,62],{}," 里面，左侧放 ",[102,141828,33593],{}," 标签， 中间放",[102,141831,53806],{}," 标签， 右侧放 ",[102,141834,105],{}," 提示信息",[62,141837,141838,141839,141841,141842,141844,141845,141848],{},"左侧 ",[102,141840,33593],{},"里面的文字都是右对齐，我们可以给",[102,141843,33593],{},"设置一个宽度（88px），然后利用",[102,141846,141847],{},"text-align"," 来设置右对齐",[62,141850,141851],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[62,141853,141854],{},"右侧 span修饰一下文字颜色",[62,141856,141857,141858],{},"提示信息的样式优化",[1123,141859,141860,141863,141866],{},[62,141861,141862],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[62,141864,141865],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[62,141867,141868,141869,141872],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[102,141870,141871],{},"vertical-algin"," 来设置 图片与文字对齐方式",[62,141874,141875,141876],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1123,141877,141878,141884],{},[62,141879,141880,141881,141883],{},"设置 ",[102,141882,23546],{}," 的 左右 12px 的内边距，设置一下文字颜色",[62,141885,141886],{},"分别设置 背景颜色",[62,141888,141889,141890,141892],{},"同意协议 和 完成注册 都是用 ",[102,141891,62],{}," 进行包裹",[14,141894,139907],{},[96,141896,141897],{"className":126537,"code":140480,"language":126539,"meta":22,"style":22},[102,141898,141899,141905,141915],{"__ignoreMap":22},[105,141900,141901,141903],{"class":107,"line":108},[105,141902,51596],{"class":51285},[105,141904,15564],{"class":115},[105,141906,141907,141909,141911,141913],{"class":107,"line":28},[105,141908,70863],{"class":164},[105,141910,51422],{"class":115},[105,141912,140497],{"class":164},[105,141914,1282],{"class":115},[105,141916,141917],{"class":107,"line":1171},[105,141918,1556],{"class":115},[14,141920,139996],{},[96,141922,141923],{"className":126537,"code":140480,"language":126539,"meta":22,"style":22},[102,141924,141925,141931,141941],{"__ignoreMap":22},[105,141926,141927,141929],{"class":107,"line":108},[105,141928,51596],{"class":51285},[105,141930,15564],{"class":115},[105,141932,141933,141935,141937,141939],{"class":107,"line":28},[105,141934,70863],{"class":164},[105,141936,51422],{"class":115},[105,141938,140497],{"class":164},[105,141940,1282],{"class":115},[105,141942,141943],{"class":107,"line":1171},[105,141944,1556],{"class":115},[76,141946,141948],{"id":141947},"_1634-底部实现","16.3.4 底部实现",[14,141950,139907],{},[96,141952,141953],{"className":126537,"code":140480,"language":126539,"meta":22,"style":22},[102,141954,141955,141961,141971],{"__ignoreMap":22},[105,141956,141957,141959],{"class":107,"line":108},[105,141958,51596],{"class":51285},[105,141960,15564],{"class":115},[105,141962,141963,141965,141967,141969],{"class":107,"line":28},[105,141964,70863],{"class":164},[105,141966,51422],{"class":115},[105,141968,140497],{"class":164},[105,141970,1282],{"class":115},[105,141972,141973],{"class":107,"line":1171},[105,141974,1556],{"class":115},[14,141976,139996],{},[96,141978,141979],{"className":127284,"code":130641,"language":127286,"meta":22,"style":22},[102,141980,141981,141985,141999,142003],{"__ignoreMap":22},[105,141982,141983],{"class":107,"line":108},[105,141984,130648],{"class":174},[105,141986,141987,141989,141991,141993,141995,141997],{"class":107,"line":28},[105,141988,1026],{"class":115},[105,141990,51596],{"class":51285},[105,141992,53471],{"class":1954},[105,141994,161],{"class":115},[105,141996,130661],{"class":220},[105,141998,51292],{"class":115},[105,142000,142001],{"class":107,"line":1171},[105,142002,130668],{"class":115},[105,142004,142005,142007,142009],{"class":107,"line":1186},[105,142006,51770],{"class":115},[105,142008,51596],{"class":51285},[105,142010,51292],{"class":115},[47,142012,142014],{"id":142013},"_164-项目总结","16.4 项目总结",[59,142016,142017,142020,142023,142026],{},[62,142018,142019],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[62,142021,142022],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[62,142024,142025],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[62,142027,142028],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[20,142030],{"style":126393,"src":142031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[59,142033,142034],{"start":1192},[62,142035,142036],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[20,142038],{"style":126393,"src":142039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[59,142041,142042],{"start":1206},[62,142043,142044],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[20,142046],{"style":126393,"src":142047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[96,142049,142050],{"className":127284,"code":136694,"language":127286,"meta":22,"style":22},[102,142051,142052],{"__ignoreMap":22},[105,142053,142054,142056,142058,142060,142062,142064,142066,142068,142070,142072,142074,142076],{"class":107,"line":108},[105,142055,1026],{"class":115},[105,142057,53806],{"class":51285},[105,142059,53809],{"class":1954},[105,142061,161],{"class":115},[105,142063,62684],{"class":220},[105,142065,14912],{"class":1954},[105,142067,161],{"class":115},[105,142069,136715],{"class":220},[105,142071,61005],{"class":1954},[105,142073,161],{"class":115},[105,142075,136722],{"class":220},[105,142077,51292],{"class":115},[59,142079,142080,142083],{"start":1212},[62,142081,142082],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[62,142084,142085],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5118,142087,142088],{},"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":28,"depth":28,"links":142090},[142091,142096,142103,142111],{"id":139717,"depth":28,"text":139718,"children":142092},[142093,142094,142095],{"id":139721,"depth":1171,"text":139722},{"id":140452,"depth":1171,"text":140453},{"id":140765,"depth":1171,"text":140766},{"id":141065,"depth":28,"text":141066,"children":142097},[142098,142099,142101],{"id":141069,"depth":1171,"text":141070},{"id":141087,"depth":1171,"text":142100},"16.2.2 列表页 header 和 nav 修改",{"id":141371,"depth":1171,"text":142102},"16.2.3 列表页主体 sk_container",{"id":141563,"depth":28,"text":141564,"children":142104},[142105,142106,142108,142110],{"id":141578,"depth":1171,"text":141579},{"id":141590,"depth":1171,"text":142107},"16.3.2 header 头部实现",{"id":141669,"depth":1171,"text":142109},"16.3.3 registerarea 主体模块实现",{"id":141947,"depth":1171,"text":141948},{"id":142013,"depth":28,"text":142014},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139709,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142118,"title":142119,"body":142120,"description":23369,"extension":30,"meta":142228,"navigation":32,"path":142229,"seo":142230,"stem":142231,"__hash__":142232},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142121,"toc":142223},[142122,142125,142129,142132,142135,142144,142153,142157,142162,142169,142187,142190,142193,142196,142199,142202,142205,142208,142211,142214,142217,142220],[10,142123,142119],{"id":142124},"_17-web服务器与网站发布",[47,142126,142128],{"id":142127},"_171-web服务器","17.1 Web服务器",[14,142130,142131],{},"把自己网站上传到服务器上，可以让其他人访问",[20,142133],{"style":126393,"src":142134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142136,142137,142140,142141],{},[265,142138,142139],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[265,142142,142143],{},"Web 服务器等",[14,142145,142146,142147,101003,142150,25725],{},"根据服务器在网络中所在的位置不同，又可分为 ",[265,142148,142149],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[265,142151,142152],{},"远程服务器",[76,142154,142156],{"id":142155},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142158,142159],{},[265,142160,142161],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142163,142164,142165],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[354,142166,142167],{"href":142167,"rel":142168},"http:\u002F\u002Ffree.3v.do\u002F",[23858],[1123,142170,142171,142174,142177,142184],{},[62,142172,142173],{},"去免费空间网站注册账号。",[62,142175,142176],{},"记录下主机名、用户名、密码、域名。",[62,142178,142179,142180,142183],{},"利用 ",[102,142181,142182],{},"utftp"," 软件 上传网站到远程服务器",[62,142185,142186],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142188,142189],{},"使用软件上传，对上传软件文件进行解压",[20,142191],{"style":126393,"src":142192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[20,142194],{"style":126393,"src":142195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142197,142198],{},"输入刚刚申请的服务器账号信息：",[20,142200],{"style":126393,"src":142201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[20,142203],{"style":126393,"src":142204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[20,142206],{"style":126393,"src":142207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[20,142209],{"style":126393,"src":142210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142212,142213],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[20,142215],{"style":126393,"src":142216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142218,142219],{},"浏览器输入域名即可访问",[14,142221,142222],{},"首页一定必须是index",{"title":22,"searchDepth":28,"depth":28,"links":142224},[142225],{"id":142127,"depth":28,"text":142128,"children":142226},[142227],{"id":142155,"depth":1171,"text":142156},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142119,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142234,"title":142235,"body":142236,"description":23369,"extension":30,"meta":143163,"navigation":32,"path":143164,"seo":143165,"stem":143166,"__hash__":143167},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142237,"toc":143146},[142238,142241,142245,142248,142251,142262,142265,142269,142273,142278,142281,142284,142287,142290,142294,142320,142324,142328,142331,142334,142338,142371,142375,142378,142381,142445,142449,142453,142456,142459,142462,142466,142511,142515,142518,142548,142552,142556,142559,142562,142566,142569,142638,142641,142749,142751,142757,142761,142764,142767,142863,142866,142870,142894,142898,142901,142905,142908,142912,142915,142918,142921,142924,142928,142931,142934,142938,142942,142945,142948,142951,142954,142958,142961,142965,142968,142971,143016,143020,143024,143027,143030,143033,143065,143069,143072,143106,143110,143113,143143],[10,142239,142235],{"id":142240},"_18-2d动画与3d转换",[47,142242,142244],{"id":142243},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142246,142247],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142249,142250],{},"转换（transform）你可以简单理解为变形",[1123,142252,142253,142256,142259],{},[62,142254,142255],{},"移动：translate",[62,142257,142258],{},"旋转：rotate",[62,142260,142261],{},"缩放：scale",[20,142263],{"style":126393,"src":142264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[76,142266,142268],{"id":142267},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21990,142270,142272],{"id":142271},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142274,142275,142276],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[265,142277,133196],{},[20,142279],{"style":126393,"src":142280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142282,142283],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142285,142286],{},"对于行内元素无效",[14,142288,142289],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21990,142291,142293],{"id":142292},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[96,142295,142296],{"className":126537,"code":138726,"language":126539,"meta":22,"style":22},[102,142297,142298,142304,142316],{"__ignoreMap":22},[105,142299,142300,142302],{"class":107,"line":108},[105,142301,51596],{"class":51285},[105,142303,15564],{"class":115},[105,142305,142306,142308,142310,142312,142314],{"class":107,"line":28},[105,142307,70455],{"class":164},[105,142309,51422],{"class":115},[105,142311,307],{"class":164},[105,142313,51541],{"class":164},[105,142315,1282],{"class":115},[105,142317,142318],{"class":107,"line":1171},[105,142319,1556],{"class":115},[76,142321,142323],{"id":142322},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21990,142325,142327],{"id":142326},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142329,142330],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[20,142332],{"style":126393,"src":142333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21990,142335,142337],{"id":142336},"_18122-旋转效果","18.1.2.2 旋转效果",[96,142339,142341],{"className":126537,"code":142340,"language":126539,"meta":22,"style":22},"div {\n  transform: rotate(45deg);\n}\n",[102,142342,142343,142349,142367],{"__ignoreMap":22},[105,142344,142345,142347],{"class":107,"line":108},[105,142346,51596],{"class":51285},[105,142348,15564],{"class":115},[105,142350,142351,142353,142355,142358,142360,142362,142365],{"class":107,"line":28},[105,142352,136521],{"class":164},[105,142354,51422],{"class":115},[105,142356,142357],{"class":164},"rotate",[105,142359,116],{"class":115},[105,142361,645],{"class":164},[105,142363,142364],{"class":111},"deg",[105,142366,2710],{"class":115},[105,142368,142369],{"class":107,"line":1171},[105,142370,1556],{"class":115},[21990,142372,142374],{"id":142373},"_18123-三角做法","18.1.2.3 三角做法",[14,142376,142377],{},"该下标当经过最外层大盒子时会实现向上反转",[20,142379],{"style":126393,"src":142380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[96,142382,142383],{"className":126537,"code":135057,"language":126539,"meta":22,"style":22},[102,142384,142385,142389,142395,142405,142415,142431,142441],{"__ignoreMap":22},[105,142386,142387],{"class":107,"line":108},[105,142388,135064],{"class":174},[105,142390,142391,142393],{"class":107,"line":28},[105,142392,135069],{"class":1954},[105,142394,15564],{"class":115},[105,142396,142397,142399,142401,142403],{"class":107,"line":1171},[105,142398,70553],{"class":164},[105,142400,51422],{"class":115},[105,142402,307],{"class":164},[105,142404,1282],{"class":115},[105,142406,142407,142409,142411,142413],{"class":107,"line":1186},[105,142408,70773],{"class":164},[105,142410,51422],{"class":115},[105,142412,307],{"class":164},[105,142414,1282],{"class":115},[105,142416,142417,142419,142421,142423,142425,142427,142429],{"class":107,"line":1192},[105,142418,70881],{"class":164},[105,142420,51422],{"class":115},[105,142422,562],{"class":164},[105,142424,51477],{"class":111},[105,142426,51506],{"class":164},[105,142428,63976],{"class":164},[105,142430,1282],{"class":115},[105,142432,142433,142435,142437,142439],{"class":107,"line":1206},[105,142434,135112],{"class":164},[105,142436,51422],{"class":115},[105,142438,62354],{"class":164},[105,142440,1282],{"class":115},[105,142442,142443],{"class":107,"line":1212},[105,142444,1556],{"class":115},[76,142446,142448],{"id":142447},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21990,142450,142452],{"id":142451},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142454,142455],{},"设置中心点",[20,142457],{"style":126393,"src":142458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142460,142461],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21990,142463,142465],{"id":142464},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[96,142467,142469],{"className":126537,"code":142468,"language":126539,"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",[102,142470,142471,142476,142482,142497,142502,142507],{"__ignoreMap":22},[105,142472,142473],{"class":107,"line":108},[105,142474,142475],{"class":174},"\u002F* 转换中心点 *\u002F\n",[105,142477,142478,142480],{"class":107,"line":28},[105,142479,51596],{"class":51285},[105,142481,15564],{"class":115},[105,142483,142484,142487,142489,142491,142493,142495],{"class":107,"line":1171},[105,142485,142486],{"class":164},"  transform-origin",[105,142488,51422],{"class":115},[105,142490,51577],{"class":164},[105,142492,17136],{"class":164},[105,142494,130400],{"class":115},[105,142496,135210],{"class":174},[105,142498,142499],{"class":107,"line":1186},[105,142500,142501],{"class":174},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[105,142503,142504],{"class":107,"line":1192},[105,142505,142506],{"class":174},"  \u002F* transform-origin: left top; *\u002F\n",[105,142508,142509],{"class":107,"line":1206},[105,142510,1556],{"class":115},[21990,142512,142514],{"id":142513},"_18133-旋转案例","18.1.3.3 旋转案例",[20,142516],{"style":126393,"src":142517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[96,142519,142520],{"className":126537,"code":142340,"language":126539,"meta":22,"style":22},[102,142521,142522,142528,142544],{"__ignoreMap":22},[105,142523,142524,142526],{"class":107,"line":108},[105,142525,51596],{"class":51285},[105,142527,15564],{"class":115},[105,142529,142530,142532,142534,142536,142538,142540,142542],{"class":107,"line":28},[105,142531,136521],{"class":164},[105,142533,51422],{"class":115},[105,142535,142357],{"class":164},[105,142537,116],{"class":115},[105,142539,645],{"class":164},[105,142541,142364],{"class":111},[105,142543,2710],{"class":115},[105,142545,142546],{"class":107,"line":1171},[105,142547,1556],{"class":115},[76,142549,142551],{"id":142550},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21990,142553,142555],{"id":142554},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142557,142558],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[20,142560],{"style":126393,"src":142561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21990,142563,142565],{"id":142564},"_18142-分页按钮","18.1.4.2 分页按钮",[20,142567],{"style":126393,"src":142568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[96,142570,142572],{"className":126537,"code":142571,"language":126539,"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",[102,142573,142574,142580,142596,142600,142604,142609,142615,142629,142634],{"__ignoreMap":22},[105,142575,142576,142578],{"class":107,"line":108},[105,142577,51596],{"class":51285},[105,142579,15564],{"class":115},[105,142581,142582,142584,142586,142589,142591,142594],{"class":107,"line":28},[105,142583,136521],{"class":164},[105,142585,51422],{"class":115},[105,142587,142588],{"class":164},"scale",[105,142590,116],{"class":115},[105,142592,142593],{"class":164},"1.2",[105,142595,2710],{"class":115},[105,142597,142598],{"class":107,"line":1171},[105,142599,1556],{"class":115},[105,142601,142602],{"class":107,"line":1186},[105,142603,135998],{"class":115},[105,142605,142606],{"class":107,"line":1192},[105,142607,142608],{"class":174},"\u002F* 2D 缩放 *\u002F\n",[105,142610,142611,142613],{"class":107,"line":1206},[105,142612,51596],{"class":51285},[105,142614,15564],{"class":115},[105,142616,142617,142619,142621,142623,142625,142627],{"class":107,"line":1212},[105,142618,136521],{"class":164},[105,142620,51422],{"class":115},[105,142622,142588],{"class":164},[105,142624,116],{"class":115},[105,142626,142593],{"class":164},[105,142628,2710],{"class":115},[105,142630,142631],{"class":107,"line":1303},[105,142632,142633],{"class":174},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[105,142635,142636],{"class":107,"line":1309},[105,142637,1556],{"class":115},[14,142639,142640],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[96,142642,142644],{"className":126537,"code":142643,"language":126539,"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",[102,142645,142646,142651,142661,142682,142703,142707,142712,142718,142745],{"__ignoreMap":22},[105,142647,142648],{"class":107,"line":108},[105,142649,142650],{"class":174},"\u002F* 定义动画 *\u002F\n",[105,142652,142653,142656,142659],{"class":107,"line":28},[105,142654,142655],{"class":111},"@keyframes",[105,142657,142658],{"class":5208}," move",[105,142660,15564],{"class":115},[105,142662,142663,142666,142668,142670,142672,142675,142677,142679],{"class":107,"line":1171},[105,142664,142665],{"class":1954},"  0%",[105,142667,79792],{"class":115},[105,142669,48119],{"class":164},[105,142671,51422],{"class":115},[105,142673,142674],{"class":164},"translateX",[105,142676,116],{"class":115},[105,142678,307],{"class":164},[105,142680,142681],{"class":115},"); }\n",[105,142683,142684,142687,142689,142691,142693,142695,142697,142699,142701],{"class":107,"line":1186},[105,142685,142686],{"class":1954},"  100%",[105,142688,79792],{"class":115},[105,142690,48119],{"class":164},[105,142692,51422],{"class":115},[105,142694,142674],{"class":164},[105,142696,116],{"class":115},[105,142698,427],{"class":164},[105,142700,51477],{"class":111},[105,142702,142681],{"class":115},[105,142704,142705],{"class":107,"line":1192},[105,142706,1556],{"class":115},[105,142708,142709],{"class":107,"line":1206},[105,142710,142711],{"class":174},"\u002F* 调用动画 *\u002F\n",[105,142713,142714,142716],{"class":107,"line":1212},[105,142715,51596],{"class":51285},[105,142717,15564],{"class":115},[105,142719,142720,142723,142725,142727,142729,142731,142733,142735,142737,142740,142743],{"class":107,"line":1303},[105,142721,142722],{"class":164},"  animation",[105,142724,51422],{"class":115},[105,142726,135223],{"class":164},[105,142728,25103],{"class":164},[105,142730,811],{"class":111},[105,142732,78665],{"class":164},[105,142734,4084],{"class":164},[105,142736,811],{"class":111},[105,142738,142739],{"class":164}," infinite",[105,142741,142742],{"class":164}," alternate",[105,142744,1282],{"class":115},[105,142746,142747],{"class":107,"line":1309},[105,142748,1556],{"class":115},[14,142750,142640],{},[96,142752,142755],{"className":142753,"code":142754,"language":5179},[5177],"\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",[102,142756,142754],{"__ignoreMap":22},[21990,142758,142760],{"id":142759},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142762,142763],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[20,142765],{"style":126393,"src":142766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[96,142768,142769],{"className":126537,"code":142643,"language":126539,"meta":22,"style":22},[102,142770,142771,142775,142783,142801,142821,142825,142829,142835,142859],{"__ignoreMap":22},[105,142772,142773],{"class":107,"line":108},[105,142774,142650],{"class":174},[105,142776,142777,142779,142781],{"class":107,"line":28},[105,142778,142655],{"class":111},[105,142780,142658],{"class":5208},[105,142782,15564],{"class":115},[105,142784,142785,142787,142789,142791,142793,142795,142797,142799],{"class":107,"line":1171},[105,142786,142665],{"class":1954},[105,142788,79792],{"class":115},[105,142790,48119],{"class":164},[105,142792,51422],{"class":115},[105,142794,142674],{"class":164},[105,142796,116],{"class":115},[105,142798,307],{"class":164},[105,142800,142681],{"class":115},[105,142802,142803,142805,142807,142809,142811,142813,142815,142817,142819],{"class":107,"line":1186},[105,142804,142686],{"class":1954},[105,142806,79792],{"class":115},[105,142808,48119],{"class":164},[105,142810,51422],{"class":115},[105,142812,142674],{"class":164},[105,142814,116],{"class":115},[105,142816,427],{"class":164},[105,142818,51477],{"class":111},[105,142820,142681],{"class":115},[105,142822,142823],{"class":107,"line":1192},[105,142824,1556],{"class":115},[105,142826,142827],{"class":107,"line":1206},[105,142828,142711],{"class":174},[105,142830,142831,142833],{"class":107,"line":1212},[105,142832,51596],{"class":51285},[105,142834,15564],{"class":115},[105,142836,142837,142839,142841,142843,142845,142847,142849,142851,142853,142855,142857],{"class":107,"line":1303},[105,142838,142722],{"class":164},[105,142840,51422],{"class":115},[105,142842,135223],{"class":164},[105,142844,25103],{"class":164},[105,142846,811],{"class":111},[105,142848,78665],{"class":164},[105,142850,4084],{"class":164},[105,142852,811],{"class":111},[105,142854,142739],{"class":164},[105,142856,142742],{"class":164},[105,142858,1282],{"class":115},[105,142860,142861],{"class":107,"line":1309},[105,142862,1556],{"class":115},[14,142864,142865],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[76,142867,142869],{"id":142868},"_1823-知识点回顾","18.2.3 知识点回顾",[96,142871,142872],{"className":126537,"code":128706,"language":126539,"meta":22,"style":22},[102,142873,142874,142880,142890],{"__ignoreMap":22},[105,142875,142876,142878],{"class":107,"line":108},[105,142877,51596],{"class":51285},[105,142879,15564],{"class":115},[105,142881,142882,142884,142886,142888],{"class":107,"line":28},[105,142883,128719],{"class":164},[105,142885,51422],{"class":115},[105,142887,61721],{"class":164},[105,142889,1282],{"class":115},[105,142891,142892],{"class":107,"line":1171},[105,142893,1556],{"class":115},[47,142895,142897],{"id":142896},"_183-3d-转换","18.3 3D 转换",[14,142899,142900],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[76,142902,142904],{"id":142903},"_1831-坐标轴认识","18.3.1 坐标轴认识",[20,142906],{"style":126393,"src":142907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[76,142909,142911],{"id":142910},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[20,142913],{"style":126393,"src":142914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142916,142917],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142919,142920],{},"translate3d的效果需要搭配透视perspective来使用",[20,142922],{"style":126393,"src":142923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[76,142925,142927],{"id":142926},"_1833-透视-perspective","18.3.3 透视 perspective",[20,142929],{"style":126393,"src":142930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142932,142933],{},"透视写在父盒子上，单位为像素",[76,142935,142937],{"id":142936},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21990,142939,142941],{"id":142940},"_18341-分开解释","18.3.4.1 分开解释",[20,142943],{"style":126393,"src":142944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[20,142946],{"style":126393,"src":142947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[20,142949],{"style":126393,"src":142950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,142952,142953],{},"总结来说就是左手原则",[21990,142955,142957],{"id":142956},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[20,142959],{"style":126393,"src":142960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[76,142962,142964],{"id":142963},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[20,142966],{"style":126393,"src":142967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[20,142969],{"style":126393,"src":142970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[96,142972,142974],{"className":126537,"code":142973,"language":126539,"meta":22,"style":22},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[102,142975,142976,142982,142995,143012],{"__ignoreMap":22},[105,142977,142978,142980],{"class":107,"line":108},[105,142979,51596],{"class":51285},[105,142981,15564],{"class":115},[105,142983,142984,142987,142989,142991,142993],{"class":107,"line":28},[105,142985,142986],{"class":164},"  perspective",[105,142988,51422],{"class":115},[105,142990,65059],{"class":164},[105,142992,51477],{"class":111},[105,142994,1282],{"class":115},[105,142996,142997,142999,143001,143004,143006,143008,143010],{"class":107,"line":1171},[105,142998,136521],{"class":164},[105,143000,51422],{"class":115},[105,143002,143003],{"class":164},"rotateX",[105,143005,116],{"class":115},[105,143007,645],{"class":164},[105,143009,142364],{"class":111},[105,143011,2710],{"class":115},[105,143013,143014],{"class":107,"line":1186},[105,143015,1556],{"class":115},[76,143017,143019],{"id":143018},"_1836-案例","18.3.6 案例",[21990,143021,143023],{"id":143022},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[20,143025],{"style":126393,"src":143026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[20,143028],{"style":126393,"src":143029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[20,143031],{"style":126393,"src":143032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[96,143034,143036],{"className":126537,"code":143035,"language":126539,"meta":22,"style":22},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[102,143037,143038,143043,143049,143061],{"__ignoreMap":22},[105,143039,143040],{"class":107,"line":108},[105,143041,143042],{"class":174},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[105,143044,143045,143047],{"class":107,"line":28},[105,143046,133534],{"class":1954},[105,143048,15564],{"class":115},[105,143050,143051,143053,143055,143057,143059],{"class":107,"line":1171},[105,143052,142986],{"class":164},[105,143054,51422],{"class":115},[105,143056,65059],{"class":164},[105,143058,51477],{"class":111},[105,143060,1282],{"class":115},[105,143062,143063],{"class":107,"line":1186},[105,143064,1556],{"class":115},[21990,143066,143068],{"id":143067},"_18362-3d导航栏","18.3.6.2 3D导航栏",[20,143070],{"style":126393,"src":143071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[96,143073,143074],{"className":127284,"code":130641,"language":127286,"meta":22,"style":22},[102,143075,143076,143080,143094,143098],{"__ignoreMap":22},[105,143077,143078],{"class":107,"line":108},[105,143079,130648],{"class":174},[105,143081,143082,143084,143086,143088,143090,143092],{"class":107,"line":28},[105,143083,1026],{"class":115},[105,143085,51596],{"class":51285},[105,143087,53471],{"class":1954},[105,143089,161],{"class":115},[105,143091,130661],{"class":220},[105,143093,51292],{"class":115},[105,143095,143096],{"class":107,"line":1171},[105,143097,130668],{"class":115},[105,143099,143100,143102,143104],{"class":107,"line":1186},[105,143101,51770],{"class":115},[105,143103,51596],{"class":51285},[105,143105,51292],{"class":115},[21990,143107,143109],{"id":143108},"_18363-旋转木马","18.3.6.3 旋转木马",[20,143111],{"style":126393,"src":143112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[96,143114,143115],{"className":126537,"code":142340,"language":126539,"meta":22,"style":22},[102,143116,143117,143123,143139],{"__ignoreMap":22},[105,143118,143119,143121],{"class":107,"line":108},[105,143120,51596],{"class":51285},[105,143122,15564],{"class":115},[105,143124,143125,143127,143129,143131,143133,143135,143137],{"class":107,"line":28},[105,143126,136521],{"class":164},[105,143128,51422],{"class":115},[105,143130,142357],{"class":164},[105,143132,116],{"class":115},[105,143134,645],{"class":164},[105,143136,142364],{"class":111},[105,143138,2710],{"class":115},[105,143140,143141],{"class":107,"line":1171},[105,143142,1556],{"class":115},[5118,143144,143145],{},"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":28,"depth":28,"links":143147},[143148,143155],{"id":142243,"depth":28,"text":142244,"children":143149},[143150,143151,143152,143153,143154],{"id":142267,"depth":1171,"text":142268},{"id":142322,"depth":1171,"text":142323},{"id":142447,"depth":1171,"text":142448},{"id":142550,"depth":1171,"text":142551},{"id":142868,"depth":1171,"text":142869},{"id":142896,"depth":28,"text":142897,"children":143156},[143157,143158,143159,143160,143161,143162],{"id":142903,"depth":1171,"text":142904},{"id":142910,"depth":1171,"text":142911},{"id":142926,"depth":1171,"text":142927},{"id":142936,"depth":1171,"text":142937},{"id":142963,"depth":1171,"text":142964},{"id":143018,"depth":1171,"text":143019},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142235,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143169,"title":143170,"body":143171,"description":23369,"extension":30,"meta":143374,"navigation":32,"path":143375,"seo":143376,"stem":143377,"__hash__":143378},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143172,"toc":143363},[143173,143176,143180,143183,143186,143190,143193,143196,143199,143203,143206,143210,143213,143217,143220,143224,143238,143242,143267,143270,143273,143290,143294,143298,143301,143304,143308,143311,143314,143332,143336,143339,143353,143357,143360],[10,143174,143170],{"id":143175},"_19-移动端基础-前缀现状与视口",[47,143177,143179],{"id":143178},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[20,143181],{"style":126393,"src":143182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143184,143185],{},"意思就是加个前缀，增加兼容性",[47,143187,143189],{"id":143188},"_192-移动端现状认识","19.2 移动端现状认识",[20,143191],{"style":126393,"src":143192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143194,143195],{},"调试方法：",[20,143197],{"style":126393,"src":143198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[47,143200,143202],{"id":143201},"_193-视口","19.3 视口",[14,143204,143205],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[76,143207,143209],{"id":143208},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[20,143211],{"style":126393,"src":143212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[76,143214,143216],{"id":143215},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[20,143218],{"style":126393,"src":143219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[76,143221,143223],{"id":143222},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1123,143225,143226,143229,143232,143235],{},[62,143227,143228],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[62,143230,143231],{},"理想视口，对设备来讲，是最理想的视口尺寸",[62,143233,143234],{},"需要手动添写meta视口标签通知浏览器操作",[62,143236,143237],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[76,143239,143241],{"id":143240},"_1934-meta视口标签","19.3.4 meta视口标签",[96,143243,143245],{"className":127284,"code":143244,"language":127286,"meta":22,"style":22},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[102,143246,143247],{"__ignoreMap":22},[105,143248,143249,143251,143253,143255,143257,143259,143261,143263,143265],{"class":107,"line":108},[105,143250,1026],{"class":115},[105,143252,51329],{"class":51285},[105,143254,14912],{"class":1954},[105,143256,161],{"class":115},[105,143258,51376],{"class":220},[105,143260,51356],{"class":1954},[105,143262,161],{"class":115},[105,143264,51383],{"class":220},[105,143266,51292],{"class":115},[20,143268],{"style":126393,"src":143269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143271,143272],{},"标准视口设置：",[59,143274,143275,143278,143281,143284,143287],{},[62,143276,143277],{},"视口宽度和设备保持一致",[62,143279,143280],{},"视口的默认缩放比例1.0",[62,143282,143283],{},"不允许用户自行缩放",[62,143285,143286],{},"最大允许的缩放比例1.0",[62,143288,143289],{},"最小允许的缩放比例1.0",[76,143291,143293],{"id":143292},"_1935-二倍图","19.3.5 二倍图",[21990,143295,143297],{"id":143296},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[20,143299],{"style":126393,"src":143300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[20,143302],{"style":126393,"src":143303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21990,143305,143307],{"id":143306},"_19352-多倍图","19.3.5.2 多倍图",[20,143309],{"style":126393,"src":143310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143312,143313],{},"二倍图法，代码如下：",[96,143315,143317],{"className":126537,"code":143316,"language":126539,"meta":22,"style":22},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[102,143318,143319,143324],{"__ignoreMap":22},[105,143320,143321],{"class":107,"line":108},[105,143322,143323],{"class":174},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[105,143325,143326,143329],{"class":107,"line":28},[105,143327,143328],{"class":51285},"background-size",[105,143330,143331],{"class":115},": 50% 50%;\n",[21990,143333,143335],{"id":143334},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[20,143337],{"style":126393,"src":143338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[59,143340,143341,143344,143347,143350],{},[62,143342,143343],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[62,143345,143346],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[62,143348,143349],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[62,143351,143352],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21990,143354,143356],{"id":143355},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[20,143358],{"style":126393,"src":143359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5118,143361,143362],{},"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":28,"depth":28,"links":143364},[143365,143366,143367],{"id":143178,"depth":28,"text":143179},{"id":143188,"depth":28,"text":143189},{"id":143201,"depth":28,"text":143202,"children":143368},[143369,143370,143371,143372,143373],{"id":143208,"depth":1171,"text":143209},{"id":143215,"depth":1171,"text":143216},{"id":143222,"depth":1171,"text":143223},{"id":143240,"depth":1171,"text":143241},{"id":143292,"depth":1171,"text":143293},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143170,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143380,"title":143381,"body":143382,"description":23369,"extension":30,"meta":144259,"navigation":32,"path":144260,"seo":144261,"stem":144262,"__hash__":144263},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143383,"toc":144243},[143384,143387,143391,143398,143401,143408,143411,143416,143419,143423,143427,143434,143437,143440,143444,143447,143450,143453,143456,143459,143463,143466,143470,143472,143475,143478,143481,143484,143486,143489,143491,143521,143523,143553,143557,143560,143564,143567,143584,143587,143590,143666,143668,143671,143674,143677,143680,143682,143685,143688,143692,143714,143717,143720,143724,143727,143733,143736,143740,143743,143746,143750,143753,143756,143759,143763,143766,143769,143772,143775,143779,143782,143786,143793,143796,143799,143802,143805,143815,143818,143821,143828,143831,143835,143838,143841,143845,143848,143851,143854,143899,143902,143905,143908,143910,144039,144041,144079,144082,144085,144087,144205,144207,144241],[10,143385,143381],{"id":143386},"_20-移动端布局实战上篇",[47,143388,143390],{"id":143389},"_201-移动端主流方案","20.1 移动端主流方案",[59,143392,143393],{},[62,143394,143395],{},[265,143396,143397],{},"单独移动端页面（主流）",[20,143399],{"style":126393,"src":143400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[59,143402,143403],{"start":28},[62,143404,143405],{},[265,143406,143407],{},"响应式兼容PC移动端",[20,143409],{"style":126393,"src":143410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[59,143412,143413],{"start":1171},[62,143414,143415],{},"两种页面选型布局方式",[20,143417],{"style":126393,"src":143418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[47,143420,143422],{"id":143421},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[76,143424,143426],{"id":143425},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143428,143429,143430],{},"官网地址： ",[354,143431,143432],{"href":143432,"rel":143433},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23858],[20,143435],{"style":126393,"src":143436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[20,143438],{"style":126393,"src":143439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[76,143441,143443],{"id":143442},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[20,143445],{"style":126393,"src":143446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[20,143448],{"style":126393,"src":143449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143451,143452],{},"去除高亮：",[14,143454,143455],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143457,143458],{},"-webkit- tap-highlight-color: transparent;",[47,143460,143462],{"id":143461},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[20,143464],{"style":126393,"src":143465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[47,143467,143469],{"id":143468},"_204-流式布局案例","20.4 流式布局案例",[14,143471,145],{},[14,143473,143474],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143476,143477],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143479,143480],{},"图片格式：",[20,143482],{"style":126393,"src":143483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143485,135580],{},[20,143487],{"style":126393,"src":143488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143490,139907],{},[96,143492,143493],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,143494,143495],{"__ignoreMap":22},[105,143496,143497,143499,143501,143503,143505,143507,143509,143511,143513,143515,143517,143519],{"class":107,"line":108},[105,143498,1026],{"class":115},[105,143500,20],{"class":51285},[105,143502,55224],{"class":1954},[105,143504,161],{"class":115},[105,143506,134054],{"class":220},[105,143508,55232],{"class":1954},[105,143510,161],{"class":115},[105,143512,134061],{"class":220},[105,143514,134064],{"class":1954},[105,143516,161],{"class":115},[105,143518,134069],{"class":220},[105,143520,51292],{"class":115},[14,143522,139996],{},[96,143524,143525],{"className":127284,"code":134039,"language":127286,"meta":22,"style":22},[102,143526,143527],{"__ignoreMap":22},[105,143528,143529,143531,143533,143535,143537,143539,143541,143543,143545,143547,143549,143551],{"class":107,"line":108},[105,143530,1026],{"class":115},[105,143532,20],{"class":51285},[105,143534,55224],{"class":1954},[105,143536,161],{"class":115},[105,143538,134054],{"class":220},[105,143540,55232],{"class":1954},[105,143542,161],{"class":115},[105,143544,134061],{"class":220},[105,143546,134064],{"class":1954},[105,143548,161],{"class":115},[105,143550,134069],{"class":220},[105,143552,51292],{"class":115},[47,143554,143556],{"id":143555},"_205-flex布局","20.5 flex布局",[20,143558],{"style":126393,"src":143559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[76,143561,143563],{"id":143562},"_2051-布局原理","20.5.1 布局原理",[14,143565,143566],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1123,143568,143569,143572,143575,143578,143581],{},[62,143570,143571],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[62,143573,143574],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[62,143576,143577],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[62,143579,143580],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[62,143582,143583],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143585,143586],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143588,143589],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[96,143591,143593],{"className":126537,"code":143592,"language":126539,"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",[102,143594,143595,143600,143607,143617,143629,143640,143651,143662],{"__ignoreMap":22},[105,143596,143597],{"class":107,"line":108},[105,143598,143599],{"class":174},"\u002F* Flex 弹性布局 *\u002F\n",[105,143601,143602,143605],{"class":107,"line":28},[105,143603,143604],{"class":1954},".container",[105,143606,15564],{"class":115},[105,143608,143609,143611,143613,143615],{"class":107,"line":1171},[105,143610,128153],{"class":164},[105,143612,51422],{"class":115},[105,143614,51462],{"class":164},[105,143616,1282],{"class":115},[105,143618,143619,143622,143624,143627],{"class":107,"line":1186},[105,143620,143621],{"class":164},"  flex-direction",[105,143623,51422],{"class":115},[105,143625,143626],{"class":164},"row",[105,143628,1282],{"class":115},[105,143630,143631,143634,143636,143638],{"class":107,"line":1192},[105,143632,143633],{"class":164},"  justify-content",[105,143635,51422],{"class":115},[105,143637,51653],{"class":164},[105,143639,1282],{"class":115},[105,143641,143642,143645,143647,143649],{"class":107,"line":1206},[105,143643,143644],{"class":164},"  align-items",[105,143646,51422],{"class":115},[105,143648,51577],{"class":164},[105,143650,1282],{"class":115},[105,143652,143653,143656,143658,143660],{"class":107,"line":1212},[105,143654,143655],{"class":164},"  flex-wrap",[105,143657,51422],{"class":115},[105,143659,78595],{"class":164},[105,143661,1282],{"class":115},[105,143663,143664],{"class":107,"line":1303},[105,143665,1556],{"class":115},[14,143667,70438],{},[14,143669,143670],{},".form-item .male-label {",[14,143672,143673],{},"   margin-right: 20px;",[14,143675,143676],{},"   display: inline-flex;",[14,143678,143679],{},"   align-items: center;",[14,143681,1062],{},[20,143683],{"style":126393,"src":143684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[20,143686],{"style":126393,"src":143687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[76,143689,143691],{"id":143690},"_2052-常见父项属性","20.5.2 常见父项属性",[59,143693,143694,143697,143700,143703,143706,143709,143712],{},[62,143695,143696],{},"flex-direction：设置主轴的方向",[62,143698,143699],{},"justify-content：设置主轴上的子元素排列方式",[62,143701,143702],{},"flex-wrap：设置子元素是否换行",[62,143704,143705],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[62,143707,143708],{},"align-items：设置侧轴上的子元素排列方式（单行）",[62,143710,143711],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[62,143713,143696],{},[20,143715],{"style":126393,"src":143716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[20,143718],{"style":126393,"src":143719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[59,143721,143722],{"start":28},[62,143723,143699],{},[20,143725],{"style":126393,"src":143726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143728,143729,143732],{},[102,143730,143731],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143734,143735],{},"跟着主轴走",[59,143737,143738],{"start":1171},[62,143739,143702],{},[20,143741],{"style":126393,"src":143742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143744,143745],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[59,143747,143748],{"start":1186},[62,143749,143705],{},[20,143751],{"style":126393,"src":143752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143754,143755],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143757,143758],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[59,143760,143761],{"start":1192},[62,143762,143708],{},[20,143764],{"style":126393,"src":143765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143767,143768],{},"align-items与align-content之间的区别：",[14,143770,143771],{},"单找items，多找content",[20,143773],{"style":126393,"src":143774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[59,143776,143777],{"start":1206},[62,143778,143711],{},[20,143780],{"style":126393,"src":143781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[76,143783,143785],{"id":143784},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[59,143787,143788],{},[62,143789,143790],{},[265,143791,143792],{},"flex 属性",[14,143794,143795],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[20,143797],{"style":126393,"src":143798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143800,143801],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143803,143804],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[59,143806,143807],{"start":28},[62,143808,143809,13787,143812],{},[265,143810,143811],{},"align-self",[265,143813,143814],{},"控制子项自己在侧轴上的排列方式",[20,143816],{"style":126393,"src":143817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143819,143820],{},"单个子盒子在父盒子侧轴上的排列方式",[59,143822,143823],{"start":1171},[62,143824,143825,143827],{},[265,143826,95282],{}," 属性定义项目的排列顺序",[20,143829],{"style":126393,"src":143830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[76,143832,143834],{"id":143833},"_2054-背景线性渐变","20.5.4 背景线性渐变",[20,143836],{"style":126393,"src":143837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143839,143840],{},"必须要添加浏览器的私有前缀",[76,143842,143844],{"id":143843},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143846,143847],{},"学到最重要的知识：",[14,143849,143850],{},"flex处理这样的布局思路",[20,143852],{"style":126393,"src":143853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[96,143855,143857],{"className":126537,"code":143856,"language":126539,"meta":22,"style":22},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[102,143858,143859,143865,143875,143885,143895],{"__ignoreMap":22},[105,143860,143861,143863],{"class":107,"line":108},[105,143862,143604],{"class":1954},[105,143864,15564],{"class":115},[105,143866,143867,143869,143871,143873],{"class":107,"line":28},[105,143868,128153],{"class":164},[105,143870,51422],{"class":115},[105,143872,51462],{"class":164},[105,143874,1282],{"class":115},[105,143876,143877,143879,143881,143883],{"class":107,"line":1171},[105,143878,143633],{"class":164},[105,143880,51422],{"class":115},[105,143882,51577],{"class":164},[105,143884,1282],{"class":115},[105,143886,143887,143889,143891,143893],{"class":107,"line":1186},[105,143888,143644],{"class":164},[105,143890,51422],{"class":115},[105,143892,51577],{"class":164},[105,143894,1282],{"class":115},[105,143896,143897],{"class":107,"line":1192},[105,143898,1556],{"class":115},[14,143900,143901],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143903,143904],{},"使用属性选择器",[20,143906],{"style":126393,"src":143907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143909,68874],{},[96,143911,143913],{"className":127284,"code":143912,"language":127286,"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",[102,143914,143915,143920,143934,143939,143959,143964,143983,143988,144007,144012,144031],{"__ignoreMap":22},[105,143916,143917],{"class":107,"line":108},[105,143918,143919],{"class":174},"\u003C!-- 携程网移动端案例结构 -->\n",[105,143921,143922,143924,143926,143928,143930,143932],{"class":107,"line":28},[105,143923,1026],{"class":115},[105,143925,51596],{"class":51285},[105,143927,53471],{"class":1954},[105,143929,161],{"class":115},[105,143931,92308],{"class":220},[105,143933,51292],{"class":115},[105,143935,143936],{"class":107,"line":1171},[105,143937,143938],{"class":174},"  \u003C!-- 搜索栏 -->\n",[105,143940,143941,143943,143945,143947,143949,143952,143955,143957],{"class":107,"line":1186},[105,143942,52129],{"class":115},[105,143944,51596],{"class":51285},[105,143946,53471],{"class":1954},[105,143948,161],{"class":115},[105,143950,143951],{"class":220},"\"search-index\"",[105,143953,143954],{"class":115},">...\u003C\u002F",[105,143956,51596],{"class":51285},[105,143958,51292],{"class":115},[105,143960,143961],{"class":107,"line":1192},[105,143962,143963],{"class":174},"  \u003C!-- 焦点图 -->\n",[105,143965,143966,143968,143970,143972,143974,143977,143979,143981],{"class":107,"line":1206},[105,143967,52129],{"class":115},[105,143969,51596],{"class":51285},[105,143971,53471],{"class":1954},[105,143973,161],{"class":115},[105,143975,143976],{"class":220},"\"focus\"",[105,143978,143954],{"class":115},[105,143980,51596],{"class":51285},[105,143982,51292],{"class":115},[105,143984,143985],{"class":107,"line":1212},[105,143986,143987],{"class":174},"  \u003C!-- 主导航 -->\n",[105,143989,143990,143992,143994,143996,143998,144001,144003,144005],{"class":107,"line":1303},[105,143991,52129],{"class":115},[105,143993,51596],{"class":51285},[105,143995,53471],{"class":1954},[105,143997,161],{"class":115},[105,143999,144000],{"class":220},"\"local-nav\"",[105,144002,143954],{"class":115},[105,144004,51596],{"class":51285},[105,144006,51292],{"class":115},[105,144008,144009],{"class":107,"line":1309},[105,144010,144011],{"class":174},"  \u003C!-- 子导航 -->\n",[105,144013,144014,144016,144018,144020,144022,144025,144027,144029],{"class":107,"line":1321},[105,144015,52129],{"class":115},[105,144017,51596],{"class":51285},[105,144019,53471],{"class":1954},[105,144021,161],{"class":115},[105,144023,144024],{"class":220},"\"nav-common\"",[105,144026,143954],{"class":115},[105,144028,51596],{"class":51285},[105,144030,51292],{"class":115},[105,144032,144033,144035,144037],{"class":107,"line":1603},[105,144034,51770],{"class":115},[105,144036,51596],{"class":51285},[105,144038,51292],{"class":115},[14,144040,70438],{},[96,144042,144043],{"className":126537,"code":136989,"language":126539,"meta":22,"style":22},[102,144044,144045,144059,144075],{"__ignoreMap":22},[105,144046,144047,144049,144051,144053,144055,144057],{"class":107,"line":108},[105,144048,53806],{"class":51285},[105,144050,1006],{"class":115},[105,144052,103092],{"class":1954},[105,144054,161],{"class":111},[105,144056,62684],{"class":220},[105,144058,137006],{"class":115},[105,144060,144061,144063,144065,144067,144069,144071,144073],{"class":107,"line":28},[105,144062,70881],{"class":164},[105,144064,51422],{"class":115},[105,144066,333],{"class":164},[105,144068,51477],{"class":111},[105,144070,51506],{"class":164},[105,144072,130117],{"class":164},[105,144074,1282],{"class":115},[105,144076,144077],{"class":107,"line":1171},[105,144078,1556],{"class":115},[14,144080,144081],{},"总代码和效果展示：",[20,144083],{"style":126393,"src":144084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144086,68874],{},[96,144088,144089],{"className":127284,"code":143912,"language":127286,"meta":22,"style":22},[102,144090,144091,144095,144109,144113,144131,144135,144153,144157,144175,144179,144197],{"__ignoreMap":22},[105,144092,144093],{"class":107,"line":108},[105,144094,143919],{"class":174},[105,144096,144097,144099,144101,144103,144105,144107],{"class":107,"line":28},[105,144098,1026],{"class":115},[105,144100,51596],{"class":51285},[105,144102,53471],{"class":1954},[105,144104,161],{"class":115},[105,144106,92308],{"class":220},[105,144108,51292],{"class":115},[105,144110,144111],{"class":107,"line":1171},[105,144112,143938],{"class":174},[105,144114,144115,144117,144119,144121,144123,144125,144127,144129],{"class":107,"line":1186},[105,144116,52129],{"class":115},[105,144118,51596],{"class":51285},[105,144120,53471],{"class":1954},[105,144122,161],{"class":115},[105,144124,143951],{"class":220},[105,144126,143954],{"class":115},[105,144128,51596],{"class":51285},[105,144130,51292],{"class":115},[105,144132,144133],{"class":107,"line":1192},[105,144134,143963],{"class":174},[105,144136,144137,144139,144141,144143,144145,144147,144149,144151],{"class":107,"line":1206},[105,144138,52129],{"class":115},[105,144140,51596],{"class":51285},[105,144142,53471],{"class":1954},[105,144144,161],{"class":115},[105,144146,143976],{"class":220},[105,144148,143954],{"class":115},[105,144150,51596],{"class":51285},[105,144152,51292],{"class":115},[105,144154,144155],{"class":107,"line":1212},[105,144156,143987],{"class":174},[105,144158,144159,144161,144163,144165,144167,144169,144171,144173],{"class":107,"line":1303},[105,144160,52129],{"class":115},[105,144162,51596],{"class":51285},[105,144164,53471],{"class":1954},[105,144166,161],{"class":115},[105,144168,144000],{"class":220},[105,144170,143954],{"class":115},[105,144172,51596],{"class":51285},[105,144174,51292],{"class":115},[105,144176,144177],{"class":107,"line":1309},[105,144178,144011],{"class":174},[105,144180,144181,144183,144185,144187,144189,144191,144193,144195],{"class":107,"line":1321},[105,144182,52129],{"class":115},[105,144184,51596],{"class":51285},[105,144186,53471],{"class":1954},[105,144188,161],{"class":115},[105,144190,144024],{"class":220},[105,144192,143954],{"class":115},[105,144194,51596],{"class":51285},[105,144196,51292],{"class":115},[105,144198,144199,144201,144203],{"class":107,"line":1603},[105,144200,51770],{"class":115},[105,144202,51596],{"class":51285},[105,144204,51292],{"class":115},[14,144206,70438],{},[96,144208,144209],{"className":127284,"code":130641,"language":127286,"meta":22,"style":22},[102,144210,144211,144215,144229,144233],{"__ignoreMap":22},[105,144212,144213],{"class":107,"line":108},[105,144214,130648],{"class":174},[105,144216,144217,144219,144221,144223,144225,144227],{"class":107,"line":28},[105,144218,1026],{"class":115},[105,144220,51596],{"class":51285},[105,144222,53471],{"class":1954},[105,144224,161],{"class":115},[105,144226,130661],{"class":220},[105,144228,51292],{"class":115},[105,144230,144231],{"class":107,"line":1171},[105,144232,130668],{"class":115},[105,144234,144235,144237,144239],{"class":107,"line":1186},[105,144236,51770],{"class":115},[105,144238,51596],{"class":51285},[105,144240,51292],{"class":115},[5118,144242,137938],{},{"title":22,"searchDepth":28,"depth":28,"links":144244},[144245,144246,144250,144251,144252],{"id":143389,"depth":28,"text":143390},{"id":143421,"depth":28,"text":143422,"children":144247},[144248,144249],{"id":143425,"depth":1171,"text":143426},{"id":143442,"depth":1171,"text":143443},{"id":143461,"depth":28,"text":143462},{"id":143468,"depth":28,"text":143469},{"id":143555,"depth":28,"text":143556,"children":144253},[144254,144255,144256,144257,144258],{"id":143562,"depth":1171,"text":143563},{"id":143690,"depth":1171,"text":143691},{"id":143784,"depth":1171,"text":143785},{"id":143833,"depth":1171,"text":143834},{"id":143843,"depth":1171,"text":143844},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143381,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144265,"title":144266,"body":144267,"description":23369,"extension":30,"meta":145494,"navigation":32,"path":145495,"seo":145496,"stem":145497,"__hash__":145498},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144268,"toc":145472},[144269,144272,144276,144280,144283,144286,144290,144295,144298,144301,144304,144307,144310,144367,144370,144375,144378,144381,144385,144396,144400,144403,144406,144413,144418,144422,144425,144431,144434,144438,144441,144448,144451,144454,144461,144464,144471,144474,144477,144484,144487,144490,144492,144509,144513,144516,144519,144522,144526,144529,144532,144535,144538,144541,144544,144546,144549,144552,144614,144617,144727,144734,144740,144743,144746,144750,144753,144757,144762,144765,144772,144775,144781,144786,144789,144792,144795,144798,144801,144804,144807,144810,144866,144868,144894,144898,144901,144904,144907,144915,144918,144921,144925,144981,144984,144988,144994,145005,145008,145013,145016,145019,145025,145028,145031,145034,145037,145040,145043,145046,145049,145074,145080,145083,145086,145089,145092,145095,145098,145103,145106,145109,145112,145120,145123,145130,145133,145136,145138,145162,145164,145167,145170,145173,145176,145179,145182,145185,145219,145222,145225,145259,145266,145269,145272,145275,145278,145281,145284,145291,145294,145297,145300,145303,145310,145313,145316,145323,145326,145329,145333,145336,145339,145342,145345,145348,145351,145354,145357,145359,145383,145385,145409,145413,145424,145427,145430,145433,145436,145439,145442,145445,145448,145451,145454,145457,145460,145463,145466,145469],[10,144270,144266],{"id":144271},"_21-移动端布局实战下篇",[47,144273,144275],{"id":144274},"_211-rem适配布局","21.1 rem适配布局",[76,144277,144279],{"id":144278},"_2111-rem单位","21.1.1 rem单位",[20,144281],{"style":126393,"src":144282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144284,144285],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[76,144287,144289],{"id":144288},"_2112-媒体查询","21.1.2 媒体查询",[59,144291,144292],{},[62,144293,144294],{},"参数介绍",[20,144296],{"style":126393,"src":144297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[20,144299],{"style":126393,"src":144300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[20,144302],{"style":126393,"src":144303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[20,144305],{"style":126393,"src":144306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[20,144308],{"style":126393,"src":144309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[96,144311,144313],{"className":126537,"code":144312,"language":126539,"meta":22,"style":22},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[102,144314,144315,144320,144339,144346,144359,144363],{"__ignoreMap":22},[105,144316,144317],{"class":107,"line":108},[105,144318,144319],{"class":174},"\u002F* 媒体查询 *\u002F\n",[105,144321,144322,144325,144327,144330,144332,144335,144337],{"class":107,"line":28},[105,144323,144324],{"class":111},"@media",[105,144326,1649],{"class":115},[105,144328,144329],{"class":164},"max-width",[105,144331,51422],{"class":115},[105,144333,144334],{"class":164},"768",[105,144336,51477],{"class":111},[105,144338,12434],{"class":115},[105,144340,144341,144344],{"class":107,"line":1171},[105,144342,144343],{"class":1954},"  .container",[105,144345,15564],{"class":115},[105,144347,144348,144351,144353,144355,144357],{"class":107,"line":1186},[105,144349,144350],{"class":164},"    width",[105,144352,51422],{"class":115},[105,144354,427],{"class":164},[105,144356,444],{"class":111},[105,144358,1282],{"class":115},[105,144360,144361],{"class":107,"line":1192},[105,144362,127333],{"class":115},[105,144364,144365],{"class":107,"line":1206},[105,144366,1556],{"class":115},[14,144368,144369],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[59,144371,144372],{"start":28},[62,144373,144374],{},"引入资源",[20,144376],{"style":126393,"src":144377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144379,144380],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[76,144382,144384],{"id":144383},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1123,144386,144387,144390,144393],{},[62,144388,144389],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[62,144391,144392],{},"媒体查询可以根据不同设备宽度来修改样式",[62,144394,144395],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[47,144397,144399],{"id":144398},"_212-less基础","21.2 Less基础",[14,144401,144402],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144404,144405],{},"Less可以解决该问题，它是css的扩展语言",[14,144407,144408,144409],{},"Less中文网址： ",[354,144410,144411],{"href":144411,"rel":144412},"http:\u002F\u002Flesscss.cn\u002F",[23858],[14,144414,144415],{},[265,144416,144417],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[76,144419,144421],{"id":144420},"_2121-less安装","21.2.1 less安装",[14,144423,144424],{},"如果使用vscode，则无需进行下方安装步骤",[14,144426,144427],{},[354,144428,144429],{"href":144429,"rel":144430},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23858],[20,144432],{"style":126393,"src":144433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[76,144435,144437],{"id":144436},"_2122-less使用","21.2.2 less使用",[14,144439,144440],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[59,144442,144443],{},[62,144444,144445],{},[265,144446,144447],{},"Less 变量",[20,144449],{"style":126393,"src":144450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[20,144452],{"style":126393,"src":144453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[59,144455,144456],{"start":28},[62,144457,144458],{},[265,144459,144460],{},"Less 编译",[20,144462],{"style":126393,"src":144463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[59,144465,144466],{"start":1171},[62,144467,144468],{},[265,144469,144470],{},"Less 嵌套",[20,144472],{"style":126393,"src":144473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[20,144475],{"style":126393,"src":144476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[59,144478,144479],{"start":1186},[62,144480,144481],{},[265,144482,144483],{},"Less 运算",[20,144485],{"style":126393,"src":144486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144488,144489],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144491,145],{},[1123,144493,144494,144497,144500,144503,144506],{},[62,144495,144496],{},"乘号（*）和除号（\u002F）的写法",[62,144498,144499],{},"运算符中间左右有个空格隔开 1px + 5",[62,144501,144502],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[62,144504,144505],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[62,144507,144508],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[47,144510,144512],{"id":144511},"_213-rem-适配方案","21.3 rem 适配方案",[14,144514,144515],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144517,144518],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[20,144520],{"style":126393,"src":144521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[76,144523,144525],{"id":144524},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144527,144528],{},"rem + 媒体查询 + less 技术",[20,144530],{"style":126393,"src":144531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144533,144534],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144536,144537],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[20,144539],{"style":126393,"src":144540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144542,144543],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144545,14625],{},[20,144547],{"style":126393,"src":144548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144550,144551],{},"index.html:",[96,144553,144555],{"className":126537,"code":144554,"language":126539,"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",[102,144556,144557,144562,144568,144584,144588,144594,144610],{"__ignoreMap":22},[105,144558,144559],{"class":107,"line":108},[105,144560,144561],{"class":174},"\u002F* rem 适配方案 *\u002F\n",[105,144563,144564,144566],{"class":107,"line":28},[105,144565,50620],{"class":51285},[105,144567,15564],{"class":115},[105,144569,144570,144572,144574,144577,144579,144581],{"class":107,"line":1171},[105,144571,70611],{"class":164},[105,144573,51422],{"class":115},[105,144575,144576],{"class":164},"62.5",[105,144578,444],{"class":111},[105,144580,130400],{"class":115},[105,144582,144583],{"class":174},"\u002F* 1rem = 10px *\u002F\n",[105,144585,144586],{"class":107,"line":1186},[105,144587,1556],{"class":115},[105,144589,144590,144592],{"class":107,"line":1192},[105,144591,130385],{"class":1954},[105,144593,15564],{"class":115},[105,144595,144596,144598,144600,144602,144605,144607],{"class":107,"line":1206},[105,144597,70553],{"class":164},[105,144599,51422],{"class":115},[105,144601,562],{"class":164},[105,144603,144604],{"class":111},"rem",[105,144606,130400],{"class":115},[105,144608,144609],{"class":174},"\u002F* 100px *\u002F\n",[105,144611,144612],{"class":107,"line":1212},[105,144613,1556],{"class":115},[14,144615,144616],{},"common.less",[96,144618,144620],{"className":126537,"code":144619,"language":126539,"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",[102,144621,144622,144628,144643,144647,144653,144667,144671,144675,144679,144685,144699,144703,144709,144723],{"__ignoreMap":22},[105,144623,144624,144626],{"class":107,"line":108},[105,144625,50620],{"class":51285},[105,144627,15564],{"class":115},[105,144629,144630,144632,144634,144636,144638,144640],{"class":107,"line":28},[105,144631,70611],{"class":164},[105,144633,51422],{"class":115},[105,144635,144576],{"class":164},[105,144637,444],{"class":111},[105,144639,26052],{"class":115},[105,144641,144642],{"class":174},"\u002F* 10px *\u002F\n",[105,144644,144645],{"class":107,"line":1171},[105,144646,1556],{"class":115},[105,144648,144649,144651],{"class":107,"line":1186},[105,144650,51596],{"class":51285},[105,144652,15564],{"class":115},[105,144654,144655,144657,144659,144661,144663,144665],{"class":107,"line":1192},[105,144656,70553],{"class":164},[105,144658,51422],{"class":115},[105,144660,562],{"class":164},[105,144662,144604],{"class":111},[105,144664,26052],{"class":115},[105,144666,144609],{"class":174},[105,144668,144669],{"class":107,"line":1206},[105,144670,1556],{"class":115},[105,144672,144673],{"class":107,"line":1212},[105,144674,135998],{"class":115},[105,144676,144677],{"class":107,"line":1303},[105,144678,144561],{"class":174},[105,144680,144681,144683],{"class":107,"line":1309},[105,144682,50620],{"class":51285},[105,144684,15564],{"class":115},[105,144686,144687,144689,144691,144693,144695,144697],{"class":107,"line":1321},[105,144688,70611],{"class":164},[105,144690,51422],{"class":115},[105,144692,144576],{"class":164},[105,144694,444],{"class":111},[105,144696,130400],{"class":115},[105,144698,144583],{"class":174},[105,144700,144701],{"class":107,"line":1603},[105,144702,1556],{"class":115},[105,144704,144705,144707],{"class":107,"line":1608},[105,144706,130385],{"class":1954},[105,144708,15564],{"class":115},[105,144710,144711,144713,144715,144717,144719,144721],{"class":107,"line":1614},[105,144712,70553],{"class":164},[105,144714,51422],{"class":115},[105,144716,562],{"class":164},[105,144718,144604],{"class":111},[105,144720,130400],{"class":115},[105,144722,144609],{"class":174},[105,144724,144725],{"class":107,"line":1619},[105,144726,1556],{"class":115},[14,144728,144729,144730,144733],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23546,144731,144732],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[96,144735,144738],{"className":144736,"code":144737,"language":5179},[5177],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[102,144739,144737],{"__ignoreMap":22},[14,144741,144742],{},"less保存时会自动变成.css文件",[14,144744,144745],{},"好好搞懂上述代码写法",[76,144747,144749],{"id":144748},"_2132-样式导入样式","21.3.2 样式导入样式",[20,144751],{"style":126393,"src":144752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[76,144754,144756],{"id":144755},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[59,144758,144759],{},[62,144760,144761],{},"准备工作",[20,144763],{"style":126393,"src":144764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144766,144767,144768],{},"github地址：",[354,144769,144770],{"href":144770,"rel":144771},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23858],[14,144773,144774],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144776,144777,144778],{},"js文件引入到index.html中使用的是",[102,144779,144780],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[59,144782,144783],{"start":28},[62,144784,144785],{},"vscode插件",[20,144787],{"style":126393,"src":144788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144790,144791],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144793,144794],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[20,144796],{"style":126393,"src":144797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144799,144800],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[20,144802],{"style":126393,"src":144803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144805,144806],{},"修改成75就可以，alt+z为快捷键",[14,144808,144809],{},"index.css：",[96,144811,144812],{"className":126537,"code":144554,"language":126539,"meta":22,"style":22},[102,144813,144814,144818,144824,144838,144842,144848,144862],{"__ignoreMap":22},[105,144815,144816],{"class":107,"line":108},[105,144817,144561],{"class":174},[105,144819,144820,144822],{"class":107,"line":28},[105,144821,50620],{"class":51285},[105,144823,15564],{"class":115},[105,144825,144826,144828,144830,144832,144834,144836],{"class":107,"line":1171},[105,144827,70611],{"class":164},[105,144829,51422],{"class":115},[105,144831,144576],{"class":164},[105,144833,444],{"class":111},[105,144835,130400],{"class":115},[105,144837,144583],{"class":174},[105,144839,144840],{"class":107,"line":1186},[105,144841,1556],{"class":115},[105,144843,144844,144846],{"class":107,"line":1192},[105,144845,130385],{"class":1954},[105,144847,15564],{"class":115},[105,144849,144850,144852,144854,144856,144858,144860],{"class":107,"line":1206},[105,144851,70553],{"class":164},[105,144853,51422],{"class":115},[105,144855,562],{"class":164},[105,144857,144604],{"class":111},[105,144859,130400],{"class":115},[105,144861,144609],{"class":174},[105,144863,144864],{"class":107,"line":1212},[105,144865,1556],{"class":115},[14,144867,144551],{},[96,144869,144870],{"className":126537,"code":126941,"language":126539,"meta":22,"style":22},[102,144871,144872,144878,144890],{"__ignoreMap":22},[105,144873,144874,144876],{"class":107,"line":108},[105,144875,51785],{"class":51285},[105,144877,15564],{"class":115},[105,144879,144880,144882,144884,144886,144888],{"class":107,"line":28},[105,144881,70611],{"class":164},[105,144883,51422],{"class":115},[105,144885,717],{"class":164},[105,144887,51477],{"class":111},[105,144889,1282],{"class":115},[105,144891,144892],{"class":107,"line":1171},[105,144893,1556],{"class":115},[47,144895,144897],{"id":144896},"_214-响应式开发","21.4 响应式开发",[14,144899,144900],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[20,144902],{"style":126393,"src":144903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144905,144906],{},"做法：",[1123,144908,144909,144912],{},[62,144910,144911],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[62,144913,144914],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[20,144916],{"style":126393,"src":144917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144919,144920],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[76,144922,144924],{"id":144923},"_2141-简单代码示范","21.4.1 简单代码示范",[96,144926,144927],{"className":126537,"code":144554,"language":126539,"meta":22,"style":22},[102,144928,144929,144933,144939,144953,144957,144963,144977],{"__ignoreMap":22},[105,144930,144931],{"class":107,"line":108},[105,144932,144561],{"class":174},[105,144934,144935,144937],{"class":107,"line":28},[105,144936,50620],{"class":51285},[105,144938,15564],{"class":115},[105,144940,144941,144943,144945,144947,144949,144951],{"class":107,"line":1171},[105,144942,70611],{"class":164},[105,144944,51422],{"class":115},[105,144946,144576],{"class":164},[105,144948,444],{"class":111},[105,144950,130400],{"class":115},[105,144952,144583],{"class":174},[105,144954,144955],{"class":107,"line":1186},[105,144956,1556],{"class":115},[105,144958,144959,144961],{"class":107,"line":1192},[105,144960,130385],{"class":1954},[105,144962,15564],{"class":115},[105,144964,144965,144967,144969,144971,144973,144975],{"class":107,"line":1206},[105,144966,70553],{"class":164},[105,144968,51422],{"class":115},[105,144970,562],{"class":164},[105,144972,144604],{"class":111},[105,144974,130400],{"class":115},[105,144976,144609],{"class":174},[105,144978,144979],{"class":107,"line":1212},[105,144980,1556],{"class":115},[14,144982,144983],{},"父盒子一般命名为container",[76,144985,144987],{"id":144986},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,144989,144990,144991],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[265,144992,144993],{},"使得 Web 开发更加快捷",[1123,144995,144996],{},[62,144997,144998,144999],{},"官网：",[265,145000,145001],{},[354,145002,145003],{"href":145003,"rel":145004},"http:\u002F\u002Fgetbootstrap.com\u002F",[23858],[14,145006,145007],{},"可以直接去官网拿现成的东西",[59,145009,145010],{},[62,145011,145012],{},"Bootstrap的使用",[14,145014,145015],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145017,145018],{},"Bootstrap 使用四步曲：",[14,145020,145021,145024],{},[265,145022,145023],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[20,145026],{"style":126393,"src":145027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145029,145030],{},"打开Bootstrap官网，然后下载",[20,145032],{"style":126393,"src":145033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[20,145035],{"style":126393,"src":145036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145038,145039],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145041,145042],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145044,145045],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[20,145047],{"style":126393,"src":145048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[96,145050,145052],{"className":126537,"code":145051,"language":126539,"meta":22,"style":22},".center {\n  color: red;\n}\n",[102,145053,145054,145060,145070],{"__ignoreMap":22},[105,145055,145056,145058],{"class":107,"line":108},[105,145057,126828],{"class":1954},[105,145059,15564],{"class":115},[105,145061,145062,145064,145066,145068],{"class":107,"line":28},[105,145063,70890],{"class":164},[105,145065,51422],{"class":115},[105,145067,57406],{"class":164},[105,145069,1282],{"class":115},[105,145071,145072],{"class":107,"line":1171},[105,145073,1556],{"class":115},[14,145075,145076,145079],{},[102,145077,145078],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[20,145081],{"style":126393,"src":145082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[20,145084],{"style":126393,"src":145085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[20,145087],{"style":126393,"src":145088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145090,145091],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[20,145093],{"style":126393,"src":145094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145096,145097],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[59,145099,145100],{"start":28},[62,145101,145102],{},"布局容器",[20,145104],{"style":126393,"src":145105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145107,145108],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145110,145111],{},"container-fluid用于移动式布局比较方便",[59,145113,145114],{"start":1171},[62,145115,145116,145117],{},"bootstrap ",[265,145118,145119],{},"栅格系统原理",[20,145121],{"style":126393,"src":145122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[59,145124,145125],{"start":1186},[62,145126,145127],{},[265,145128,145129],{},"栅格选项参数",[20,145131],{"style":126393,"src":145132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145134,145135],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145137,14625],{},[96,145139,145140],{"className":126537,"code":145051,"language":126539,"meta":22,"style":22},[102,145141,145142,145148,145158],{"__ignoreMap":22},[105,145143,145144,145146],{"class":107,"line":108},[105,145145,126828],{"class":1954},[105,145147,15564],{"class":115},[105,145149,145150,145152,145154,145156],{"class":107,"line":28},[105,145151,70890],{"class":164},[105,145153,51422],{"class":115},[105,145155,57406],{"class":164},[105,145157,1282],{"class":115},[105,145159,145160],{"class":107,"line":1171},[105,145161,1556],{"class":115},[14,145163,135580],{},[20,145165],{"style":126393,"src":145166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145168,145169],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145171,145172],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145174,145175],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145177,145178],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145180,145181],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145183,145184],{},"汇总展示说明：",[96,145186,145187],{"className":127284,"code":130641,"language":127286,"meta":22,"style":22},[102,145188,145189,145193,145207,145211],{"__ignoreMap":22},[105,145190,145191],{"class":107,"line":108},[105,145192,130648],{"class":174},[105,145194,145195,145197,145199,145201,145203,145205],{"class":107,"line":28},[105,145196,1026],{"class":115},[105,145198,51596],{"class":51285},[105,145200,53471],{"class":1954},[105,145202,161],{"class":115},[105,145204,130661],{"class":220},[105,145206,51292],{"class":115},[105,145208,145209],{"class":107,"line":1171},[105,145210,130668],{"class":115},[105,145212,145213,145215,145217],{"class":107,"line":1186},[105,145214,51770],{"class":115},[105,145216,51596],{"class":51285},[105,145218,51292],{"class":115},[20,145220],{"style":126393,"src":145221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145223,145224],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[96,145226,145227],{"className":127284,"code":130641,"language":127286,"meta":22,"style":22},[102,145228,145229,145233,145247,145251],{"__ignoreMap":22},[105,145230,145231],{"class":107,"line":108},[105,145232,130648],{"class":174},[105,145234,145235,145237,145239,145241,145243,145245],{"class":107,"line":28},[105,145236,1026],{"class":115},[105,145238,51596],{"class":51285},[105,145240,53471],{"class":1954},[105,145242,161],{"class":115},[105,145244,130661],{"class":220},[105,145246,51292],{"class":115},[105,145248,145249],{"class":107,"line":1171},[105,145250,130668],{"class":115},[105,145252,145253,145255,145257],{"class":107,"line":1186},[105,145254,51770],{"class":115},[105,145256,51596],{"class":51285},[105,145258,51292],{"class":115},[59,145260,145261],{"start":1192},[62,145262,145263],{},[265,145264,145265],{},"列嵌套",[20,145267],{"style":126393,"src":145268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145270,145271],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145273,145274],{},"没加row内部这样：",[20,145276],{"style":126393,"src":145277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145279,145280],{},"加上row之后内部为：",[20,145282],{"style":126393,"src":145283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[59,145285,145286],{"start":1206},[62,145287,145288],{},[265,145289,145290],{},"列偏移",[20,145292],{"style":126393,"src":145293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145295,145296],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145298,145299],{},"要加偏移量，即偏移份数",[14,145301,145302],{},"偏移的份数=12-两个盒子的份数",[59,145304,145305],{"start":1212},[62,145306,145307],{},[265,145308,145309],{},"列排序",[20,145311],{"style":126393,"src":145312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145314,145315],{},"pull拉左；push推右",[59,145317,145318],{"start":1303},[62,145319,145320],{},[265,145321,145322],{},"响应式工具",[20,145324],{"style":126393,"src":145325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145327,145328],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[76,145330,145332],{"id":145331},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145334,145335],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145337,145338],{},"ul {",[14,145340,145341],{},"list-style: none;",[14,145343,145344],{},"margin:0;",[14,145346,145347],{},"padding:0; }",[20,145349],{"style":126393,"src":145350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[20,145352],{"style":126393,"src":145353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145355,145356],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145358,68874],{},[96,145360,145361],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,145362,145363,145369,145379],{"__ignoreMap":22},[105,145364,145365,145367],{"class":107,"line":108},[105,145366,130385],{"class":1954},[105,145368,15564],{"class":115},[105,145370,145371,145373,145375,145377],{"class":107,"line":28},[105,145372,131017],{"class":164},[105,145374,51422],{"class":115},[105,145376,23729],{"class":164},[105,145378,1282],{"class":115},[105,145380,145381],{"class":107,"line":1171},[105,145382,1556],{"class":115},[14,145384,70438],{},[96,145386,145387],{"className":126537,"code":139207,"language":126539,"meta":22,"style":22},[102,145388,145389,145395,145405],{"__ignoreMap":22},[105,145390,145391,145393],{"class":107,"line":108},[105,145392,130385],{"class":1954},[105,145394,15564],{"class":115},[105,145396,145397,145399,145401,145403],{"class":107,"line":28},[105,145398,131017],{"class":164},[105,145400,51422],{"class":115},[105,145402,23729],{"class":164},[105,145404,1282],{"class":115},[105,145406,145407],{"class":107,"line":1171},[105,145408,1556],{"class":115},[47,145410,145412],{"id":145411},"_215-swiper-插件使用","21.5 swiper 插件使用",[1123,145414,145415,145418,145421],{},[62,145416,145417],{},"下载需要的css和js文件html页面中 引入相关文件",[62,145419,145420],{},"官网找到类似案例，复制html结构，css样式 js 语法",[62,145422,145423],{},"根据需求定制修改模块",[20,145425],{"style":126393,"src":145426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145428,145429],{},"解压后将这两部分放到项目中",[20,145431],{"style":126393,"src":145432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145434,145435],{},"这个插件可以帮助我们实现轮播图效果",[14,145437,145438],{},"用法：",[20,145440],{"style":126393,"src":145441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145443,145444],{},"找到自己喜欢的",[20,145446],{"style":126393,"src":145447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145449,145450],{},"右键，查看网页源代码",[20,145452],{"style":126393,"src":145453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145455,145456],{},"复制人家的结构内容",[14,145458,145459],{},"然后去看API文档：",[20,145461],{"style":126393,"src":145462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145464,145465],{},"可以看看如何修改样式",[14,145467,145468],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5118,145470,145471],{},"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":28,"depth":28,"links":145473},[145474,145479,145483,145488,145493],{"id":144274,"depth":28,"text":144275,"children":145475},[145476,145477,145478],{"id":144278,"depth":1171,"text":144279},{"id":144288,"depth":1171,"text":144289},{"id":144383,"depth":1171,"text":144384},{"id":144398,"depth":28,"text":144399,"children":145480},[145481,145482],{"id":144420,"depth":1171,"text":144421},{"id":144436,"depth":1171,"text":144437},{"id":144511,"depth":28,"text":144512,"children":145484},[145485,145486,145487],{"id":144524,"depth":1171,"text":144525},{"id":144748,"depth":1171,"text":144749},{"id":144755,"depth":1171,"text":144756},{"id":144896,"depth":28,"text":144897,"children":145489},[145490,145491,145492],{"id":144923,"depth":1171,"text":144924},{"id":144986,"depth":1171,"text":144987},{"id":145331,"depth":1171,"text":145332},{"id":145411,"depth":28,"text":145412},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144266,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145500,"title":145501,"body":145502,"description":23369,"extension":30,"meta":145722,"navigation":32,"path":145723,"seo":145724,"stem":145725,"__hash__":145726},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145503,"toc":145718},[145504,145507,145511,145514,145529,145534,145537,145542,145577,145582,145594,145599,145612,145617,145634,145639,145659,145664,145682,145685,145688,145691,145694,145698,145701,145704,145707,145710,145713,145716],[10,145505,145501],{"id":145506},"_22-代码提交与新型相对单位",[47,145508,145510],{"id":145509},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145512,145513],{},"法1：",[59,145515,145516,145523,145526],{},[62,145517,145518,145519],{},"登录网站注册：",[354,145520,145521],{"href":145521,"rel":145522},"https:\u002F\u002Fgitee.com\u002F",[23858],[62,145524,145525],{},"码云创建新的仓库",[62,145527,145528],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1123,145530,145531],{},[62,145532,145533],{},"在网站根目录右键-- Git Bash Here",[20,145535],{"style":126393,"src":145536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1123,145538,145539],{},[62,145540,145541],{},"如果是第一次利用git提交，请配置好全局选项",[96,145543,145545],{"className":117281,"code":145544,"language":117283,"meta":22,"style":22},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[102,145546,145547,145563],{"__ignoreMap":22},[105,145548,145549,145552,145554,145557,145560],{"class":107,"line":108},[105,145550,145551],{"class":1954},"git",[105,145553,119704],{"class":220},[105,145555,145556],{"class":164}," --global",[105,145558,145559],{"class":220}," user.name",[105,145561,145562],{"class":220}," \"你的名字\"\n",[105,145564,145565,145567,145569,145571,145574],{"class":107,"line":28},[105,145566,145551],{"class":1954},[105,145568,119704],{"class":220},[105,145570,145556],{"class":164},[105,145572,145573],{"class":220}," user.email",[105,145575,145576],{"class":220}," \"你的邮箱\"\n",[1123,145578,145579],{},[62,145580,145581],{},"初始化仓库",[96,145583,145585],{"className":117281,"code":145584,"language":117283,"meta":22,"style":22},"git init\n",[102,145586,145587],{"__ignoreMap":22},[105,145588,145589,145591],{"class":107,"line":108},[105,145590,145551],{"class":1954},[105,145592,145593],{"class":220}," init\n",[1123,145595,145596],{},[62,145597,145598],{},"把本地文件放到暂存区",[96,145600,145602],{"className":117281,"code":145601,"language":117283,"meta":22,"style":22},"git add .\n",[102,145603,145604],{"__ignoreMap":22},[105,145605,145606,145608,145610],{"class":107,"line":108},[105,145607,145551],{"class":1954},[105,145609,5201],{"class":220},[105,145611,28726],{"class":220},[1123,145613,145614],{},[62,145615,145616],{},"把本地文件放到本地仓库里面",[96,145618,145620],{"className":117281,"code":145619,"language":117283,"meta":22,"style":22},"git commit -m \"first commit\"\n",[102,145621,145622],{"__ignoreMap":22},[105,145623,145624,145626,145629,145631],{"class":107,"line":108},[105,145625,145551],{"class":1954},[105,145627,145628],{"class":220}," commit",[105,145630,100867],{"class":164},[105,145632,145633],{"class":220}," \"first commit\"\n",[1123,145635,145636],{},[62,145637,145638],{},"链接远程仓库",[96,145640,145642],{"className":117281,"code":145641,"language":117283,"meta":22,"style":22},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[102,145643,145644],{"__ignoreMap":22},[105,145645,145646,145648,145651,145653,145656],{"class":107,"line":108},[105,145647,145551],{"class":1954},[105,145649,145650],{"class":220}," remote",[105,145652,5201],{"class":220},[105,145654,145655],{"class":220}," origin",[105,145657,145658],{"class":220}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1123,145660,145661],{},[62,145662,145663],{},"把本地仓库的文件推送到远程仓库 push",[96,145665,145667],{"className":117281,"code":145666,"language":117283,"meta":22,"style":22},"git push -u origin master\n",[102,145668,145669],{"__ignoreMap":22},[105,145670,145671,145673,145675,145677,145679],{"class":107,"line":108},[105,145672,145551],{"class":1954},[105,145674,29001],{"class":220},[105,145676,28275],{"class":164},[105,145678,145655],{"class":220},[105,145680,145681],{"class":220}," master\n",[20,145683],{"style":126393,"src":145684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145686,145687],{},"上方方法暂未实现，后边学完git后在整",[14,145689,145690],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[20,145692],{"style":126393,"src":145693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[47,145695,145697],{"id":145696},"_222-新型相对单位","22.2 新型相对单位",[20,145699],{"style":126393,"src":145700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[20,145702],{"style":126393,"src":145703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145705,145706],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145708,145709],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[20,145711],{"style":126393,"src":145712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145714,145715],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5118,145717,23951],{},{"title":22,"searchDepth":28,"depth":28,"links":145719},[145720,145721],{"id":145509,"depth":28,"text":145510},{"id":145696,"depth":28,"text":145697},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145501,"description":23369},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145728,"title":145729,"body":145730,"description":145734,"extension":30,"meta":145735,"navigation":32,"path":145736,"seo":145737,"stem":145738,"__hash__":145739},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145731,"toc":145732},[],{"title":22,"searchDepth":28,"depth":28,"links":145733},[],"自己正经开始学编程的第一门语言！",{"category":92824},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145729,"description":145734},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145741,"title":145742,"body":145743,"description":23369,"extension":30,"meta":146890,"navigation":32,"path":146891,"seo":146892,"stem":146893,"__hash__":146894},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145744,"toc":146866},[145745,145748,145752,145755,145758,145783,145786,145792,145796,145799,145826,145829,145869,145872,145884,145887,145893,145897,145901,145928,145945,145952,145956,145959,145985,145988,145992,145995,146035,146038,146055,146061,146065,146070,146114,146117,146135,146138,146206,146210,146217,146220,146235,146238,146247,146250,146261,146264,146273,146276,146293,146296,146311,146315,146319,146322,146324,146344,146348,146351,146354,146365,146368,146374,146378,146384,146411,146414,146426,146429,146440,146443,146449,146453,146459,146509,146512,146554,146557,146590,146593,146627,146631,146634,146654,146657,146693,146696,146709,146713,146717,146723,146726,146739,146743,146746,146752,146755,146759,146762,146765,146814,146818,146834,146840,146847,146853,146863],[10,145746,145742],{"id":145747},"_1-python环境与第一个程序",[47,145749,145751],{"id":145750},"_11-什么是python","1.1 什么是Python",[14,145753,145754],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145756,145757],{},"理解 Python 时抓住三个关键词：",[59,145759,145760,145763,145766],{},[62,145761,145762],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[62,145764,145765],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[62,145767,145768,145769,328,145772,328,145775,328,145778,328,145780,28370],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[102,145770,145771],{},"os",[102,145773,145774],{},"sys",[102,145776,145777],{},"json",[102,145779,57845],{},[102,145781,145782],{},"datetime",[14,145784,145785],{},"Python 程序的运行链路：",[96,145787,145790],{"className":145788,"code":145789,"language":5179,"meta":22},[5177],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[102,145791,145789],{"__ignoreMap":22},[47,145793,145795],{"id":145794},"_12-python解释器","1.2 Python解释器",[14,145797,145798],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[96,145800,145802],{"className":23815,"code":145801,"language":23817,"meta":22,"style":22},"python --version\npython3 --version\npython\npython3\n",[102,145803,145804,145810,145816,145821],{"__ignoreMap":22},[105,145805,145806,145808],{"class":107,"line":108},[105,145807,30365],{"class":1954},[105,145809,26278],{"class":164},[105,145811,145812,145814],{"class":107,"line":28},[105,145813,100864],{"class":1954},[105,145815,26278],{"class":164},[105,145817,145818],{"class":107,"line":1171},[105,145819,145820],{"class":1954},"python\n",[105,145822,145823],{"class":107,"line":1186},[105,145824,145825],{"class":1954},"python3\n",[14,145827,145828],{},"进入交互模式后，可以直接输入表达式：",[96,145830,145832],{"className":30363,"code":145831,"language":30365,"meta":22,"style":22},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[102,145833,145834,145845,145850,145864],{"__ignoreMap":22},[105,145835,145836,145839,145841,145843],{"class":107,"line":108},[105,145837,145838],{"class":111},">>>",[105,145840,25103],{"class":164},[105,145842,45551],{"class":111},[105,145844,47708],{"class":164},[105,145846,145847],{"class":107,"line":28},[105,145848,145849],{"class":164},"3\n",[105,145851,145852,145854,145857,145859,145862],{"class":107,"line":1171},[105,145853,145838],{"class":111},[105,145855,145856],{"class":164}," print",[105,145858,116],{"class":115},[105,145860,145861],{"class":220},"\"hello python\"",[105,145863,122],{"class":115},[105,145865,145866],{"class":107,"line":1186},[105,145867,145868],{"class":115},"hello python\n",[14,145870,145871],{},"退出交互模式：",[96,145873,145875],{"className":30363,"code":145874,"language":30365,"meta":22,"style":22},"exit()\n",[102,145876,145877],{"__ignoreMap":22},[105,145878,145879,145882],{"class":107,"line":108},[105,145880,145881],{"class":164},"exit",[105,145883,1967],{"class":115},[14,145885,145886],{},"或使用快捷键：",[96,145888,145891],{"className":145889,"code":145890,"language":5179,"meta":22},[5177],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[102,145892,145890],{"__ignoreMap":22},[47,145894,145896],{"id":145895},"_13-安装python","1.3 安装Python",[76,145898,145900],{"id":145899},"_131-windows安装","1.3.1 Windows安装",[59,145902,145903,145910,145913,145919,145925],{},[62,145904,145905,145906],{},"打开 Python 官网：",[354,145907,145908],{"href":145908,"rel":145909},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23858],[62,145911,145912],{},"下载 Windows Installer。",[62,145914,145915,145916,28370],{},"安装时勾选 ",[102,145917,145918],{},"Add Python to PATH",[62,145920,145921,145922,28370],{},"点击 ",[102,145923,145924],{},"Install Now",[62,145926,145927],{},"安装完成后打开命令提示符验证：",[96,145929,145931],{"className":23815,"code":145930,"language":23817,"meta":22,"style":22},"python --version\npip --version\n",[102,145932,145933,145939],{"__ignoreMap":22},[105,145934,145935,145937],{"class":107,"line":108},[105,145936,30365],{"class":1954},[105,145938,26278],{"class":164},[105,145940,145941,145943],{"class":107,"line":28},[105,145942,23824],{"class":1954},[105,145944,26278],{"class":164},[14,145946,145947,145948,145951],{},"如果提示 ",[102,145949,145950],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[76,145953,145955],{"id":145954},"_132-macos安装","1.3.2 macOS安装",[14,145957,145958],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[96,145960,145962],{"className":23815,"code":145961,"language":23817,"meta":22,"style":22},"brew install python\npython3 --version\npip3 --version\n",[102,145963,145964,145973,145979],{"__ignoreMap":22},[105,145965,145966,145969,145971],{"class":107,"line":108},[105,145967,145968],{"class":1954},"brew",[105,145970,23827],{"class":220},[105,145972,124303],{"class":220},[105,145974,145975,145977],{"class":107,"line":28},[105,145976,100864],{"class":1954},[105,145978,26278],{"class":164},[105,145980,145981,145983],{"class":107,"line":1171},[105,145982,119685],{"class":1954},[105,145984,26278],{"class":164},[14,145986,145987],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[76,145989,145991],{"id":145990},"_133-linux安装","1.3.3 Linux安装",[14,145993,145994],{},"Ubuntu\u002FDebian：",[96,145996,145998],{"className":23815,"code":145997,"language":23817,"meta":22,"style":22},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[102,145999,146000,146008,146023,146029],{"__ignoreMap":22},[105,146001,146002,146004,146006],{"class":107,"line":108},[105,146003,24561],{"class":1954},[105,146005,117302],{"class":220},[105,146007,26227],{"class":220},[105,146009,146010,146012,146014,146016,146018,146020],{"class":107,"line":28},[105,146011,24561],{"class":1954},[105,146013,117302],{"class":220},[105,146015,23827],{"class":220},[105,146017,104388],{"class":220},[105,146019,100783],{"class":220},[105,146021,146022],{"class":220}," python3-venv\n",[105,146024,146025,146027],{"class":107,"line":1171},[105,146026,100864],{"class":1954},[105,146028,26278],{"class":164},[105,146030,146031,146033],{"class":107,"line":1186},[105,146032,119685],{"class":1954},[105,146034,26278],{"class":164},[14,146036,146037],{},"Fedora：",[96,146039,146041],{"className":23815,"code":146040,"language":23817,"meta":22,"style":22},"sudo dnf install python3 python3-pip\n",[102,146042,146043],{"__ignoreMap":22},[105,146044,146045,146047,146049,146051,146053],{"class":107,"line":108},[105,146046,24561],{"class":1954},[105,146048,26300],{"class":220},[105,146050,23827],{"class":220},[105,146052,104388],{"class":220},[105,146054,119750],{"class":220},[14,146056,146057,146058,146060],{},"Linux 上通常使用 ",[102,146059,100864],{}," 命令，避免和系统旧版本 Python 冲突。",[47,146062,146064],{"id":146063},"_14-pip包管理器","1.4 pip包管理器",[14,146066,146067,146069],{},[102,146068,23824],{}," 用来安装第三方库。",[96,146071,146073],{"className":23815,"code":146072,"language":23817,"meta":22,"style":22},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[102,146074,146075,146084,146093,146101,146107],{"__ignoreMap":22},[105,146076,146077,146079,146081],{"class":107,"line":108},[105,146078,23824],{"class":1954},[105,146080,23827],{"class":220},[105,146082,146083],{"class":220}," requests\n",[105,146085,146086,146088,146091],{"class":107,"line":28},[105,146087,23824],{"class":1954},[105,146089,146090],{"class":220}," uninstall",[105,146092,146083],{"class":220},[105,146094,146095,146097,146099],{"class":107,"line":1171},[105,146096,23824],{"class":1954},[105,146098,117559],{"class":220},[105,146100,146083],{"class":220},[105,146102,146103,146105],{"class":107,"line":1186},[105,146104,23824],{"class":1954},[105,146106,118940],{"class":220},[105,146108,146109,146111],{"class":107,"line":1192},[105,146110,23824],{"class":1954},[105,146112,146113],{"class":220}," freeze\n",[14,146115,146116],{},"国内网络较慢时可以临时使用镜像：",[96,146118,146120],{"className":23815,"code":146119,"language":23817,"meta":22,"style":22},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[102,146121,146122],{"__ignoreMap":22},[105,146123,146124,146126,146128,146131,146133],{"class":107,"line":108},[105,146125,23824],{"class":1954},[105,146127,23827],{"class":220},[105,146129,146130],{"class":220}," requests",[105,146132,26415],{"class":164},[105,146134,119713],{"class":220},[14,146136,146137],{},"常见第三方库：",[253,146139,146140,146149],{},[256,146141,146142],{},[259,146143,146144,146147],{},[262,146145,146146],{},"库",[262,146148,102681],{},[300,146150,146151,146159,146166,146174,146182,146190,146198],{},[259,146152,146153,146156],{},[305,146154,146155],{},"requests",[305,146157,146158],{},"网络请求",[259,146160,146161,146163],{},[305,146162,100611],{},[305,146164,146165],{},"数值计算",[259,146167,146168,146171],{},[305,146169,146170],{},"pandas",[305,146172,146173],{},"表格数据处理",[259,146175,146176,146179],{},[305,146177,146178],{},"matplotlib",[305,146180,146181],{},"绘图",[259,146183,146184,146187],{},[305,146185,146186],{},"pyecharts",[305,146188,146189],{},"ECharts 图表",[259,146191,146192,146195],{},[305,146193,146194],{},"flask",[305,146196,146197],{},"Web 后端",[259,146199,146200,146203],{},[305,146201,146202],{},"pytest",[305,146204,146205],{},"自动化测试",[47,146207,146209],{"id":146208},"_15-虚拟环境","1.5 虚拟环境",[14,146211,146212,146213,146216],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[102,146214,146215],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146218,146219],{},"创建虚拟环境：",[96,146221,146223],{"className":23815,"code":146222,"language":23817,"meta":22,"style":22},"python -m venv .venv\n",[102,146224,146225],{"__ignoreMap":22},[105,146226,146227,146229,146231,146233],{"class":107,"line":108},[105,146228,30365],{"class":1954},[105,146230,100867],{"class":164},[105,146232,100870],{"class":220},[105,146234,100873],{"class":220},[14,146236,146237],{},"Windows 激活：",[96,146239,146241],{"className":23815,"code":146240,"language":23817,"meta":22,"style":22},".venv\\Scripts\\activate\n",[102,146242,146243],{"__ignoreMap":22},[105,146244,146245],{"class":107,"line":108},[105,146246,146240],{"class":1954},[14,146248,146249],{},"macOS\u002FLinux 激活：",[96,146251,146253],{"className":23815,"code":146252,"language":23817,"meta":22,"style":22},"source .venv\u002Fbin\u002Factivate\n",[102,146254,146255],{"__ignoreMap":22},[105,146256,146257,146259],{"class":107,"line":108},[105,146258,100878],{"class":164},[105,146260,100881],{"class":220},[14,146262,146263],{},"退出虚拟环境：",[96,146265,146267],{"className":23815,"code":146266,"language":23817,"meta":22,"style":22},"deactivate\n",[102,146268,146269],{"__ignoreMap":22},[105,146270,146271],{"class":107,"line":108},[105,146272,146266],{"class":1954},[14,146274,146275],{},"保存依赖：",[96,146277,146279],{"className":23815,"code":146278,"language":23817,"meta":22,"style":22},"pip freeze > requirements.txt\n",[102,146280,146281],{"__ignoreMap":22},[105,146282,146283,146285,146288,146290],{"class":107,"line":108},[105,146284,23824],{"class":1954},[105,146286,146287],{"class":220}," freeze",[105,146289,26207],{"class":111},[105,146291,146292],{"class":220}," requirements.txt\n",[14,146294,146295],{},"安装依赖：",[96,146297,146299],{"className":23815,"code":146298,"language":23817,"meta":22,"style":22},"pip install -r requirements.txt\n",[102,146300,146301],{"__ignoreMap":22},[105,146302,146303,146305,146307,146309],{"class":107,"line":108},[105,146304,23824],{"class":1954},[105,146306,23827],{"class":220},[105,146308,119624],{"class":164},[105,146310,146292],{"class":220},[47,146312,146314],{"id":146313},"_16-开发工具","1.6 开发工具",[76,146316,146318],{"id":146317},"_161-pycharm","1.6.1 PyCharm",[14,146320,146321],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146323,122047],{},[59,146325,146326,146329,146332,146338,146341],{},[62,146327,146328],{},"New Project：创建项目。",[62,146330,146331],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[62,146333,146334,146335,125968],{},"New Python File：创建 ",[102,146336,146337],{},".py",[62,146339,146340],{},"Run：运行当前文件。",[62,146342,146343],{},"Debug：断点调试。",[76,146345,146347],{"id":146346},"_162-vs-code","1.6.2 VS Code",[14,146349,146350],{},"VS Code 轻量，适合后续多语言开发。",[14,146352,146353],{},"建议安装插件：",[59,146355,146356,146359,146362],{},[62,146357,146358],{},"Python。",[62,146360,146361],{},"Pylance。",[62,146363,146364],{},"Jupyter。",[14,146366,146367],{},"选择解释器：",[96,146369,146372],{"className":146370,"code":146371,"language":5179,"meta":22},[5177],"Ctrl + Shift + P -> Python: Select Interpreter\n",[102,146373,146371],{"__ignoreMap":22},[47,146375,146377],{"id":146376},"_17-第一个python程序","1.7 第一个Python程序",[14,146379,146380,146381,24603],{},"创建文件 ",[102,146382,146383],{},"hello.py",[96,146385,146387],{"className":30363,"code":146386,"language":30365,"meta":22,"style":22},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[102,146388,146389,146400],{"__ignoreMap":22},[105,146390,146391,146393,146395,146398],{"class":107,"line":108},[105,146392,30400],{"class":164},[105,146394,116],{"class":115},[105,146396,146397],{"class":220},"\"Hello World\"",[105,146399,122],{"class":115},[105,146401,146402,146404,146406,146409],{"class":107,"line":28},[105,146403,30400],{"class":164},[105,146405,116],{"class":115},[105,146407,146408],{"class":220},"\"你好，Python\"",[105,146410,122],{"class":115},[14,146412,146413],{},"在终端运行：",[96,146415,146417],{"className":23815,"code":146416,"language":23817,"meta":22,"style":22},"python hello.py\n",[102,146418,146419],{"__ignoreMap":22},[105,146420,146421,146423],{"class":107,"line":108},[105,146422,30365],{"class":1954},[105,146424,146425],{"class":220}," hello.py\n",[14,146427,146428],{},"或：",[96,146430,146432],{"className":23815,"code":146431,"language":23817,"meta":22,"style":22},"python3 hello.py\n",[102,146433,146434],{"__ignoreMap":22},[105,146435,146436,146438],{"class":107,"line":108},[105,146437,100864],{"class":1954},[105,146439,146425],{"class":220},[14,146441,146442],{},"输出：",[96,146444,146447],{"className":146445,"code":146446,"language":5179,"meta":22},[5177],"Hello World\n你好，Python\n",[102,146448,146446],{"__ignoreMap":22},[47,146450,146452],{"id":146451},"_18-print函数","1.8 print函数",[14,146454,146455,146458],{},[102,146456,146457],{},"print()"," 用来输出内容。",[96,146460,146462],{"className":30363,"code":146461,"language":30365,"meta":22,"style":22},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[102,146463,146464,146474,146484,146494],{"__ignoreMap":22},[105,146465,146466,146468,146470,146472],{"class":107,"line":108},[105,146467,30400],{"class":164},[105,146469,116],{"class":115},[105,146471,5836],{"class":220},[105,146473,122],{"class":115},[105,146475,146476,146478,146480,146482],{"class":107,"line":28},[105,146477,30400],{"class":164},[105,146479,116],{"class":115},[105,146481,427],{"class":164},[105,146483,122],{"class":115},[105,146485,146486,146488,146490,146492],{"class":107,"line":1171},[105,146487,30400],{"class":164},[105,146489,116],{"class":115},[105,146491,165],{"class":164},[105,146493,122],{"class":115},[105,146495,146496,146498,146500,146503,146505,146507],{"class":107,"line":1186},[105,146497,30400],{"class":164},[105,146499,116],{"class":115},[105,146501,146502],{"class":220},"\"年龄:\"",[105,146504,12427],{"class":115},[105,146506,766],{"class":164},[105,146508,122],{"class":115},[14,146510,146511],{},"多个内容用逗号隔开，默认中间加空格：",[96,146513,146515],{"className":30363,"code":146514,"language":30365,"meta":22,"style":22},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[102,146516,146517,146527,146537],{"__ignoreMap":22},[105,146518,146519,146522,146524],{"class":107,"line":108},[105,146520,146521],{"class":115},"name ",[105,146523,161],{"class":111},[105,146525,146526],{"class":220}," \"张三\"\n",[105,146528,146529,146532,146534],{"class":107,"line":28},[105,146530,146531],{"class":115},"age ",[105,146533,161],{"class":111},[105,146535,146536],{"class":164}," 18\n",[105,146538,146539,146541,146543,146546,146549,146551],{"class":107,"line":1171},[105,146540,30400],{"class":164},[105,146542,116],{"class":115},[105,146544,146545],{"class":220},"\"姓名:\"",[105,146547,146548],{"class":115},", name, ",[105,146550,146502],{"class":220},[105,146552,146553],{"class":115},", age)\n",[14,146555,146556],{},"修改分隔符：",[96,146558,146560],{"className":30363,"code":146559,"language":30365,"meta":22,"style":22},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[102,146561,146562],{"__ignoreMap":22},[105,146563,146564,146566,146568,146571,146573,146575,146577,146579,146581,146584,146586,146588],{"class":107,"line":108},[105,146565,30400],{"class":164},[105,146567,116],{"class":115},[105,146569,146570],{"class":220},"\"2024\"",[105,146572,12427],{"class":115},[105,146574,54301],{"class":220},[105,146576,12427],{"class":115},[105,146578,54301],{"class":220},[105,146580,12427],{"class":115},[105,146582,146583],{"class":5208},"sep",[105,146585,161],{"class":111},[105,146587,32468],{"class":220},[105,146589,122],{"class":115},[14,146591,146592],{},"修改结尾符：",[96,146594,146596],{"className":30363,"code":146595,"language":30365,"meta":22,"style":22},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[102,146597,146598,146616],{"__ignoreMap":22},[105,146599,146600,146602,146604,146606,146608,146610,146612,146614],{"class":107,"line":108},[105,146601,30400],{"class":164},[105,146603,116],{"class":115},[105,146605,5836],{"class":220},[105,146607,12427],{"class":115},[105,146609,45786],{"class":5208},[105,146611,161],{"class":111},[105,146613,4350],{"class":220},[105,146615,122],{"class":115},[105,146617,146618,146620,146622,146625],{"class":107,"line":28},[105,146619,30400],{"class":164},[105,146621,116],{"class":115},[105,146623,146624],{"class":220},"\"python\"",[105,146626,122],{"class":115},[47,146628,146630],{"id":146629},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146632,146633],{},"交互运行适合临时验证：",[96,146635,146637],{"className":30363,"code":146636,"language":30365,"meta":22,"style":22},">>> 10 * 3\n30\n",[102,146638,146639,146649],{"__ignoreMap":22},[105,146640,146641,146643,146645,146647],{"class":107,"line":108},[105,146642,145838],{"class":111},[105,146644,2029],{"class":164},[105,146646,6510],{"class":111},[105,146648,120021],{"class":164},[105,146650,146651],{"class":107,"line":28},[105,146652,146653],{"class":164},"30\n",[14,146655,146656],{},"脚本运行适合保存程序：",[96,146658,146660],{"className":30363,"code":146659,"language":30365,"meta":22,"style":22},"price = 8\ncount = 5\nprint(price * count)\n",[102,146661,146662,146672,146681],{"__ignoreMap":22},[105,146663,146664,146667,146669],{"class":107,"line":108},[105,146665,146666],{"class":115},"price ",[105,146668,161],{"class":111},[105,146670,146671],{"class":164}," 8\n",[105,146673,146674,146677,146679],{"class":107,"line":28},[105,146675,146676],{"class":115},"count ",[105,146678,161],{"class":111},[105,146680,54412],{"class":164},[105,146682,146683,146685,146688,146690],{"class":107,"line":1171},[105,146684,30400],{"class":164},[105,146686,146687],{"class":115},"(price ",[105,146689,571],{"class":111},[105,146691,146692],{"class":115}," count)\n",[14,146694,146695],{},"实际学习中推荐：",[59,146697,146698,146701,146706],{},[62,146699,146700],{},"临时试一个语法，用交互模式。",[62,146702,146703,146704,125968],{},"写完整练习，用 ",[102,146705,146337],{},[62,146707,146708],{},"写项目，用独立目录和虚拟环境。",[47,146710,146712],{"id":146711},"_110-常见错误","1.10 常见错误",[76,146714,146716],{"id":146715},"_1101-命令找不到","1.10.1 命令找不到",[96,146718,146721],{"className":146719,"code":146720,"language":5179,"meta":22},[5177],"python: command not found\n",[102,146722,146720],{"__ignoreMap":22},[14,146724,146725],{},"原因：",[59,146727,146728,146731,146734],{},[62,146729,146730],{},"没安装 Python。",[62,146732,146733],{},"PATH 没配置。",[62,146735,146736,146737,28370],{},"Linux\u002FmacOS 应该使用 ",[102,146738,100864],{},[76,146740,146742],{"id":146741},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146744,146745],{},"不要把文件命名为：",[96,146747,146750],{"className":146748,"code":146749,"language":5179,"meta":22},[5177],"random.py\njson.py\ntime.py\nrequests.py\n",[102,146751,146749],{"__ignoreMap":22},[14,146753,146754],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[76,146756,146758],{"id":146757},"_1103-中文乱码","1.10.3 中文乱码",[14,146760,146761],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146763,146764],{},"如果读写文件出现乱码，要明确指定编码：",[96,146766,146768],{"className":30363,"code":146767,"language":30365,"meta":22,"style":22},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[102,146769,146770,146804],{"__ignoreMap":22},[105,146771,146772,146774,146777,146779,146782,146784,146787,146789,146792,146794,146797,146799,146801],{"class":107,"line":108},[105,146773,107818],{"class":111},[105,146775,146776],{"class":164}," open",[105,146778,116],{"class":115},[105,146780,146781],{"class":220},"\"data.txt\"",[105,146783,12427],{"class":115},[105,146785,146786],{"class":220},"\"r\"",[105,146788,12427],{"class":115},[105,146790,146791],{"class":5208},"encoding",[105,146793,161],{"class":111},[105,146795,146796],{"class":220},"\"utf-8\"",[105,146798,13706],{"class":115},[105,146800,31368],{"class":111},[105,146802,146803],{"class":115}," f:\n",[105,146805,146806,146809,146811],{"class":107,"line":28},[105,146807,146808],{"class":115},"    content ",[105,146810,161],{"class":111},[105,146812,146813],{"class":115}," f.read()\n",[47,146815,146817],{"id":146816},"_111-本章练习","1.11 本章练习",[59,146819,146820,146823,146829],{},[62,146821,146822],{},"安装 Python，并在终端输出版本号。",[62,146824,146825,146826,146828],{},"新建 ",[102,146827,146383],{},"，输出自己的姓名、年龄、学习目标。",[62,146830,104351,146831,146833],{},[102,146832,146457],{}," 输出下面格式：",[96,146835,146838],{"className":146836,"code":146837,"language":5179,"meta":22},[5177],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[102,146839,146837],{"__ignoreMap":22},[59,146841,146842],{"start":1186},[62,146843,104351,146844,146846],{},[102,146845,146583],{}," 输出日期：",[96,146848,146851],{"className":146849,"code":146850,"language":5179,"meta":22},[5177],"2024-10-10\n",[102,146852,146850],{"__ignoreMap":22},[59,146854,146855],{"start":1192},[62,146856,104351,146857,146859,146860,146862],{},[102,146858,45786],{}," 让两次 ",[102,146861,146457],{}," 输出在同一行。",[5118,146864,146865],{},"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":28,"depth":28,"links":146867},[146868,146869,146870,146875,146876,146877,146881,146882,146883,146884,146889],{"id":145750,"depth":28,"text":145751},{"id":145794,"depth":28,"text":145795},{"id":145895,"depth":28,"text":145896,"children":146871},[146872,146873,146874],{"id":145899,"depth":1171,"text":145900},{"id":145954,"depth":1171,"text":145955},{"id":145990,"depth":1171,"text":145991},{"id":146063,"depth":28,"text":146064},{"id":146208,"depth":28,"text":146209},{"id":146313,"depth":28,"text":146314,"children":146878},[146879,146880],{"id":146317,"depth":1171,"text":146318},{"id":146346,"depth":1171,"text":146347},{"id":146376,"depth":28,"text":146377},{"id":146451,"depth":28,"text":146452},{"id":146629,"depth":28,"text":146630},{"id":146711,"depth":28,"text":146712,"children":146885},[146886,146887,146888],{"id":146715,"depth":1171,"text":146716},{"id":146741,"depth":1171,"text":146742},{"id":146757,"depth":1171,"text":146758},{"id":146816,"depth":28,"text":146817},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145742,"description":23369},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146896,"title":146897,"body":146898,"description":23369,"extension":30,"meta":149302,"navigation":32,"path":149303,"seo":149304,"stem":149305,"__hash__":149306},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146899,"toc":149287},[146900,146903,146907,146910,146913,146930,146933,146975,146978,146982,146985,146988,147025,147028,147062,147065,147157,147161,147175,147178,147205,147208,147212,147315,147322,147325,147342,147346,147353,147542,147545,147618,147622,147625,147709,147712,147744,147748,147952,147955,147959,147965,148067,148070,148326,148330,148333,148336,148350,148352,148538,148542,148904,148910,148914,148917,149041,149044,149223,149226,149230,149263,149267,149284],[10,146901,146897],{"id":146902},"_10-json与pyecharts折线图",[47,146904,146906],{"id":146905},"_101-数据可视化","10.1 数据可视化",[14,146908,146909],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146911,146912],{},"常见图表：",[59,146914,146915,146918,146921,146924,146927],{},[62,146916,146917],{},"折线图：看趋势。",[62,146919,146920],{},"柱状图：看分类对比。",[62,146922,146923],{},"饼图：看占比。",[62,146925,146926],{},"地图：看地域分布。",[62,146928,146929],{},"散点图：看两个变量之间的关系。",[14,146931,146932],{},"Python 可视化常用库：",[253,146934,146935,146943],{},[256,146936,146937],{},[259,146938,146939,146941],{},[262,146940,146146],{},[262,146942,23733],{},[300,146944,146945,146952,146960,146967],{},[259,146946,146947,146949],{},[305,146948,146178],{},[305,146950,146951],{},"基础、经典、可定制",[259,146953,146954,146957],{},[305,146955,146956],{},"seaborn",[305,146958,146959],{},"统计图表更美观",[259,146961,146962,146964],{},[305,146963,146186],{},[305,146965,146966],{},"生成交互式网页图表",[259,146968,146969,146972],{},[305,146970,146971],{},"plotly",[305,146973,146974],{},"交互图表能力强",[14,146976,146977],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[47,146979,146981],{"id":146980},"_102-json回顾","10.2 JSON回顾",[14,146983,146984],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,146986,146987],{},"Python 字典：",[96,146989,146991],{"className":30363,"code":146990,"language":30365,"meta":22,"style":22},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[102,146992,146993,147001,147012,147021],{"__ignoreMap":22},[105,146994,146995,146997,146999],{"class":107,"line":108},[105,146996,101643],{"class":115},[105,146998,161],{"class":111},[105,147000,15564],{"class":115},[105,147002,147003,147006,147008,147010],{"class":107,"line":28},[105,147004,147005],{"class":220},"    \"name\"",[105,147007,51422],{"class":115},[105,147009,69254],{"class":220},[105,147011,31451],{"class":115},[105,147013,147014,147017,147019],{"class":107,"line":1171},[105,147015,147016],{"class":220},"    \"value\"",[105,147018,51422],{"class":115},[105,147020,97443],{"class":164},[105,147022,147023],{"class":107,"line":1186},[105,147024,1556],{"class":115},[14,147026,147027],{},"JSON 字符串：",[96,147029,147032],{"className":147030,"code":147031,"language":145777,"meta":22,"style":22},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[102,147033,147034,147038,147049,147058],{"__ignoreMap":22},[105,147035,147036],{"class":107,"line":108},[105,147037,1537],{"class":115},[105,147039,147040,147043,147045,147047],{"class":107,"line":28},[105,147041,147042],{"class":164},"  \"name\"",[105,147044,51422],{"class":115},[105,147046,69254],{"class":220},[105,147048,31451],{"class":115},[105,147050,147051,147054,147056],{"class":107,"line":1171},[105,147052,147053],{"class":164},"  \"value\"",[105,147055,51422],{"class":115},[105,147057,97443],{"class":164},[105,147059,147060],{"class":107,"line":1186},[105,147061,1556],{"class":115},[14,147063,147064],{},"Python 与 JSON 的转换：",[96,147066,147068],{"className":30363,"code":147067,"language":30365,"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",[102,147069,147070,147077,147081,147106,147110,147129,147136,147140,147150],{"__ignoreMap":22},[105,147071,147072,147074],{"class":107,"line":108},[105,147073,30377],{"class":111},[105,147075,147076],{"class":115}," json\n",[105,147078,147079],{"class":107,"line":28},[105,147080,2391],{"emptyLinePlaceholder":32},[105,147082,147083,147085,147087,147089,147091,147093,147095,147097,147100,147102,147104],{"class":107,"line":1171},[105,147084,101643],{"class":115},[105,147086,161],{"class":111},[105,147088,4439],{"class":115},[105,147090,62664],{"class":220},[105,147092,51422],{"class":115},[105,147094,69254],{"class":220},[105,147096,12427],{"class":115},[105,147098,147099],{"class":220},"\"value\"",[105,147101,51422],{"class":115},[105,147103,427],{"class":164},[105,147105,1556],{"class":115},[105,147107,147108],{"class":107,"line":1186},[105,147109,2391],{"emptyLinePlaceholder":32},[105,147111,147112,147115,147117,147120,147123,147125,147127],{"class":107,"line":1192},[105,147113,147114],{"class":115},"json_text ",[105,147116,161],{"class":111},[105,147118,147119],{"class":115}," json.dumps(data, ",[105,147121,147122],{"class":5208},"ensure_ascii",[105,147124,161],{"class":111},[105,147126,33972],{"class":164},[105,147128,122],{"class":115},[105,147130,147131,147133],{"class":107,"line":1206},[105,147132,30400],{"class":164},[105,147134,147135],{"class":115},"(json_text)\n",[105,147137,147138],{"class":107,"line":1212},[105,147139,2391],{"emptyLinePlaceholder":32},[105,147141,147142,147145,147147],{"class":107,"line":1303},[105,147143,147144],{"class":115},"new_data ",[105,147146,161],{"class":111},[105,147148,147149],{"class":115}," json.loads(json_text)\n",[105,147151,147152,147154],{"class":107,"line":1309},[105,147153,30400],{"class":164},[105,147155,147156],{"class":115},"(new_data)\n",[47,147158,147160],{"id":147159},"_103-安装pyecharts","10.3 安装pyecharts",[96,147162,147164],{"className":23815,"code":147163,"language":23817,"meta":22,"style":22},"pip install pyecharts\n",[102,147165,147166],{"__ignoreMap":22},[105,147167,147168,147170,147172],{"class":107,"line":108},[105,147169,23824],{"class":1954},[105,147171,23827],{"class":220},[105,147173,147174],{"class":220}," pyecharts\n",[14,147176,147177],{},"验证：",[96,147179,147181],{"className":30363,"code":147180,"language":30365,"meta":22,"style":22},"import pyecharts\n\nprint(pyecharts.__version__)\n",[102,147182,147183,147189,147193],{"__ignoreMap":22},[105,147184,147185,147187],{"class":107,"line":108},[105,147186,30377],{"class":111},[105,147188,147174],{"class":115},[105,147190,147191],{"class":107,"line":28},[105,147192,2391],{"emptyLinePlaceholder":32},[105,147194,147195,147197,147200,147203],{"class":107,"line":1171},[105,147196,30400],{"class":164},[105,147198,147199],{"class":115},"(pyecharts.",[105,147201,147202],{"class":164},"__version__",[105,147204,122],{"class":115},[14,147206,147207],{},"如果使用虚拟环境，要先激活环境再安装。",[47,147209,147211],{"id":147210},"_104-第一个折线图","10.4 第一个折线图",[96,147213,147215],{"className":30363,"code":147214,"language":30365,"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",[102,147216,147217,147229,147233,147243,147273,147305],{"__ignoreMap":22},[105,147218,147219,147221,147224,147226],{"class":107,"line":108},[105,147220,30722],{"class":111},[105,147222,147223],{"class":115}," pyecharts.charts ",[105,147225,30377],{"class":111},[105,147227,147228],{"class":115}," Line\n",[105,147230,147231],{"class":107,"line":28},[105,147232,2391],{"emptyLinePlaceholder":32},[105,147234,147235,147238,147240],{"class":107,"line":1171},[105,147236,147237],{"class":115},"line ",[105,147239,161],{"class":111},[105,147241,147242],{"class":115}," Line()\n",[105,147244,147245,147248,147251,147253,147256,147258,147261,147263,147266,147268,147271],{"class":107,"line":1186},[105,147246,147247],{"class":115},"line.add_xaxis([",[105,147249,147250],{"class":220},"\"周一\"",[105,147252,12427],{"class":115},[105,147254,147255],{"class":220},"\"周二\"",[105,147257,12427],{"class":115},[105,147259,147260],{"class":220},"\"周三\"",[105,147262,12427],{"class":115},[105,147264,147265],{"class":220},"\"周四\"",[105,147267,12427],{"class":115},[105,147269,147270],{"class":220},"\"周五\"",[105,147272,4648],{"class":115},[105,147274,147275,147278,147281,147283,147285,147287,147289,147291,147293,147295,147298,147300,147303],{"class":107,"line":1192},[105,147276,147277],{"class":115},"line.add_yaxis(",[105,147279,147280],{"class":220},"\"销售额\"",[105,147282,77503],{"class":115},[105,147284,427],{"class":164},[105,147286,12427],{"class":115},[105,147288,933],{"class":164},[105,147290,12427],{"class":115},[105,147292,978],{"class":164},[105,147294,12427],{"class":115},[105,147296,147297],{"class":164},"150",[105,147299,12427],{"class":115},[105,147301,147302],{"class":164},"180",[105,147304,4648],{"class":115},[105,147306,147307,147310,147313],{"class":107,"line":1206},[105,147308,147309],{"class":115},"line.render(",[105,147311,147312],{"class":220},"\"line.html\"",[105,147314,122],{"class":115},[14,147316,147317,147318,147321],{},"运行后会生成 ",[102,147319,147320],{},"line.html","，用浏览器打开即可看到图表。",[14,147323,147324],{},"核心步骤：",[59,147326,147327,147330,147333,147336,147339],{},[62,147328,147329],{},"导入图表类。",[62,147331,147332],{},"创建图表对象。",[62,147334,147335],{},"添加 x 轴数据。",[62,147337,147338],{},"添加 y 轴数据。",[62,147340,147341],{},"渲染为 HTML。",[47,147343,147345],{"id":147344},"_105-全局配置","10.5 全局配置",[14,147347,147348,147349,147352],{},"常用配置在 ",[102,147350,147351],{},"pyecharts.options"," 中。",[96,147354,147356],{"className":30363,"code":147355,"language":30365,"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",[102,147357,147358,147375,147385,147389,147397,147421,147449,147454,147473,147492,147510,147530,147534],{"__ignoreMap":22},[105,147359,147360,147362,147365,147367,147370,147372],{"class":107,"line":108},[105,147361,30722],{"class":111},[105,147363,147364],{"class":115}," pyecharts ",[105,147366,30377],{"class":111},[105,147368,147369],{"class":115}," options ",[105,147371,31368],{"class":111},[105,147373,147374],{"class":115}," opts\n",[105,147376,147377,147379,147381,147383],{"class":107,"line":28},[105,147378,30722],{"class":111},[105,147380,147223],{"class":115},[105,147382,30377],{"class":111},[105,147384,147228],{"class":115},[105,147386,147387],{"class":107,"line":1171},[105,147388,2391],{"emptyLinePlaceholder":32},[105,147390,147391,147393,147395],{"class":107,"line":1186},[105,147392,147237],{"class":115},[105,147394,161],{"class":111},[105,147396,147242],{"class":115},[105,147398,147399,147401,147403,147405,147407,147409,147411,147413,147415,147417,147419],{"class":107,"line":1192},[105,147400,147247],{"class":115},[105,147402,147250],{"class":220},[105,147404,12427],{"class":115},[105,147406,147255],{"class":220},[105,147408,12427],{"class":115},[105,147410,147260],{"class":220},[105,147412,12427],{"class":115},[105,147414,147265],{"class":220},[105,147416,12427],{"class":115},[105,147418,147270],{"class":220},[105,147420,4648],{"class":115},[105,147422,147423,147425,147427,147429,147431,147433,147435,147437,147439,147441,147443,147445,147447],{"class":107,"line":1206},[105,147424,147277],{"class":115},[105,147426,147280],{"class":220},[105,147428,77503],{"class":115},[105,147430,427],{"class":164},[105,147432,12427],{"class":115},[105,147434,933],{"class":164},[105,147436,12427],{"class":115},[105,147438,978],{"class":164},[105,147440,12427],{"class":115},[105,147442,147297],{"class":164},[105,147444,12427],{"class":115},[105,147446,147302],{"class":164},[105,147448,4648],{"class":115},[105,147450,147451],{"class":107,"line":1212},[105,147452,147453],{"class":115},"line.set_global_opts(\n",[105,147455,147456,147459,147461,147464,147466,147468,147471],{"class":107,"line":1303},[105,147457,147458],{"class":5208},"    title_opts",[105,147460,161],{"class":111},[105,147462,147463],{"class":115},"opts.TitleOpts(",[105,147465,51392],{"class":5208},[105,147467,161],{"class":111},[105,147469,147470],{"class":220},"\"一周销售额\"",[105,147472,38032],{"class":115},[105,147474,147475,147478,147480,147483,147485,147487,147490],{"class":107,"line":1309},[105,147476,147477],{"class":5208},"    xaxis_opts",[105,147479,161],{"class":111},[105,147481,147482],{"class":115},"opts.AxisOpts(",[105,147484,79795],{"class":5208},[105,147486,161],{"class":111},[105,147488,147489],{"class":220},"\"日期\"",[105,147491,38032],{"class":115},[105,147493,147494,147497,147499,147501,147503,147505,147508],{"class":107,"line":1321},[105,147495,147496],{"class":5208},"    yaxis_opts",[105,147498,161],{"class":111},[105,147500,147482],{"class":115},[105,147502,79795],{"class":5208},[105,147504,161],{"class":111},[105,147506,147507],{"class":220},"\"金额\"",[105,147509,38032],{"class":115},[105,147511,147512,147515,147517,147520,147523,147525,147528],{"class":107,"line":1603},[105,147513,147514],{"class":5208},"    tooltip_opts",[105,147516,161],{"class":111},[105,147518,147519],{"class":115},"opts.TooltipOpts(",[105,147521,147522],{"class":5208},"trigger",[105,147524,161],{"class":111},[105,147526,147527],{"class":220},"\"axis\"",[105,147529,38032],{"class":115},[105,147531,147532],{"class":107,"line":1608},[105,147533,122],{"class":115},[105,147535,147536,147538,147540],{"class":107,"line":1614},[105,147537,147309],{"class":115},[105,147539,147312],{"class":220},[105,147541,122],{"class":115},[14,147543,147544],{},"常见全局配置：",[253,147546,147547,147556],{},[256,147548,147549],{},[259,147550,147551,147554],{},[262,147552,147553],{},"配置",[262,147555,102681],{},[300,147557,147558,147568,147578,147588,147598,147608],{},[259,147559,147560,147565],{},[305,147561,147562],{},[102,147563,147564],{},"TitleOpts",[305,147566,147567],{},"标题",[259,147569,147570,147575],{},[305,147571,147572],{},[102,147573,147574],{},"LegendOpts",[305,147576,147577],{},"图例",[259,147579,147580,147585],{},[305,147581,147582],{},[102,147583,147584],{},"TooltipOpts",[305,147586,147587],{},"提示框",[259,147589,147590,147595],{},[305,147591,147592],{},[102,147593,147594],{},"AxisOpts",[305,147596,147597],{},"坐标轴",[259,147599,147600,147605],{},[305,147601,147602],{},[102,147603,147604],{},"VisualMapOpts",[305,147606,147607],{},"视觉映射",[259,147609,147610,147615],{},[305,147611,147612],{},[102,147613,147614],{},"DataZoomOpts",[305,147616,147617],{},"区域缩放",[47,147619,147621],{"id":147620},"_106-系列配置","10.6 系列配置",[14,147623,147624],{},"系列配置作用于某一组数据。",[96,147626,147628],{"className":30363,"code":147627,"language":30365,"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",[102,147629,147630,147635,147646,147675,147686,147705],{"__ignoreMap":22},[105,147631,147632],{"class":107,"line":108},[105,147633,147634],{"class":115},"line.add_yaxis(\n",[105,147636,147637,147640,147642,147644],{"class":107,"line":28},[105,147638,147639],{"class":5208},"    series_name",[105,147641,161],{"class":111},[105,147643,147280],{"class":220},[105,147645,31451],{"class":115},[105,147647,147648,147651,147653,147655,147657,147659,147661,147663,147665,147667,147669,147671,147673],{"class":107,"line":1171},[105,147649,147650],{"class":5208},"    y_axis",[105,147652,161],{"class":111},[105,147654,1006],{"class":115},[105,147656,427],{"class":164},[105,147658,12427],{"class":115},[105,147660,933],{"class":164},[105,147662,12427],{"class":115},[105,147664,978],{"class":164},[105,147666,12427],{"class":115},[105,147668,147297],{"class":164},[105,147670,12427],{"class":115},[105,147672,147302],{"class":164},[105,147674,87821],{"class":115},[105,147676,147677,147680,147682,147684],{"class":107,"line":1186},[105,147678,147679],{"class":5208},"    is_smooth",[105,147681,161],{"class":111},[105,147683,31461],{"class":164},[105,147685,31451],{"class":115},[105,147687,147688,147691,147693,147696,147699,147701,147703],{"class":107,"line":1192},[105,147689,147690],{"class":5208},"    label_opts",[105,147692,161],{"class":111},[105,147694,147695],{"class":115},"opts.LabelOpts(",[105,147697,147698],{"class":5208},"is_show",[105,147700,161],{"class":111},[105,147702,31461],{"class":164},[105,147704,38032],{"class":115},[105,147706,147707],{"class":107,"line":1206},[105,147708,122],{"class":115},[14,147710,147711],{},"常用参数：",[59,147713,147714,147720,147726,147732,147738],{},[62,147715,147716,147719],{},[102,147717,147718],{},"series_name","：系列名称。",[62,147721,147722,147725],{},[102,147723,147724],{},"y_axis","：y 轴数据。",[62,147727,147728,147731],{},[102,147729,147730],{},"is_smooth","：是否平滑曲线。",[62,147733,147734,147737],{},[102,147735,147736],{},"label_opts","：标签配置。",[62,147739,147740,147743],{},[102,147741,147742],{},"symbol_size","：标记点大小。",[47,147745,147747],{"id":147746},"_107-多条折线","10.7 多条折线",[96,147749,147751],{"className":30363,"code":147750,"language":30365,"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",[102,147752,147753,147767,147777,147781,147810,147814,147822,147827,147865,147902,147906,147923,147939,147943],{"__ignoreMap":22},[105,147754,147755,147757,147759,147761,147763,147765],{"class":107,"line":108},[105,147756,30722],{"class":111},[105,147758,147364],{"class":115},[105,147760,30377],{"class":111},[105,147762,147369],{"class":115},[105,147764,31368],{"class":111},[105,147766,147374],{"class":115},[105,147768,147769,147771,147773,147775],{"class":107,"line":28},[105,147770,30722],{"class":111},[105,147772,147223],{"class":115},[105,147774,30377],{"class":111},[105,147776,147228],{"class":115},[105,147778,147779],{"class":107,"line":1171},[105,147780,2391],{"emptyLinePlaceholder":32},[105,147782,147783,147786,147788,147790,147792,147794,147796,147798,147800,147802,147804,147806,147808],{"class":107,"line":1186},[105,147784,147785],{"class":115},"dates ",[105,147787,161],{"class":111},[105,147789,52211],{"class":115},[105,147791,147250],{"class":220},[105,147793,12427],{"class":115},[105,147795,147255],{"class":220},[105,147797,12427],{"class":115},[105,147799,147260],{"class":220},[105,147801,12427],{"class":115},[105,147803,147265],{"class":220},[105,147805,12427],{"class":115},[105,147807,147270],{"class":220},[105,147809,33231],{"class":115},[105,147811,147812],{"class":107,"line":1192},[105,147813,2391],{"emptyLinePlaceholder":32},[105,147815,147816,147818,147820],{"class":107,"line":1206},[105,147817,147237],{"class":115},[105,147819,161],{"class":111},[105,147821,147242],{"class":115},[105,147823,147824],{"class":107,"line":1212},[105,147825,147826],{"class":115},"line.add_xaxis(dates)\n",[105,147828,147829,147831,147834,147836,147838,147840,147843,147845,147847,147849,147851,147853,147855,147857,147859,147861,147863],{"class":107,"line":1303},[105,147830,147277],{"class":115},[105,147832,147833],{"class":220},"\"线上销售\"",[105,147835,77503],{"class":115},[105,147837,427],{"class":164},[105,147839,12427],{"class":115},[105,147841,147842],{"class":164},"130",[105,147844,12427],{"class":115},[105,147846,933],{"class":164},[105,147848,12427],{"class":115},[105,147850,21040],{"class":164},[105,147852,12427],{"class":115},[105,147854,1713],{"class":164},[105,147856,112187],{"class":115},[105,147858,147730],{"class":5208},[105,147860,161],{"class":111},[105,147862,31461],{"class":164},[105,147864,122],{"class":115},[105,147866,147867,147869,147872,147874,147876,147878,147880,147882,147884,147886,147888,147890,147892,147894,147896,147898,147900],{"class":107,"line":1309},[105,147868,147277],{"class":115},[105,147870,147871],{"class":220},"\"线下销售\"",[105,147873,77503],{"class":115},[105,147875,728],{"class":164},[105,147877,12427],{"class":115},[105,147879,978],{"class":164},[105,147881,12427],{"class":115},[105,147883,427],{"class":164},[105,147885,12427],{"class":115},[105,147887,933],{"class":164},[105,147889,12427],{"class":115},[105,147891,147297],{"class":164},[105,147893,112187],{"class":115},[105,147895,147730],{"class":5208},[105,147897,161],{"class":111},[105,147899,31461],{"class":164},[105,147901,122],{"class":115},[105,147903,147904],{"class":107,"line":1321},[105,147905,147453],{"class":115},[105,147907,147908,147910,147912,147914,147916,147918,147921],{"class":107,"line":1603},[105,147909,147458],{"class":5208},[105,147911,161],{"class":111},[105,147913,147463],{"class":115},[105,147915,51392],{"class":5208},[105,147917,161],{"class":111},[105,147919,147920],{"class":220},"\"线上线下销售趋势\"",[105,147922,38032],{"class":115},[105,147924,147925,147927,147929,147931,147933,147935,147937],{"class":107,"line":1608},[105,147926,147514],{"class":5208},[105,147928,161],{"class":111},[105,147930,147519],{"class":115},[105,147932,147522],{"class":5208},[105,147934,161],{"class":111},[105,147936,147527],{"class":220},[105,147938,38032],{"class":115},[105,147940,147941],{"class":107,"line":1614},[105,147942,122],{"class":115},[105,147944,147945,147947,147950],{"class":107,"line":1619},[105,147946,147309],{"class":115},[105,147948,147949],{"class":220},"\"sales.html\"",[105,147951,122],{"class":115},[14,147953,147954],{},"多条折线适合比较不同指标或不同地区。",[47,147956,147958],{"id":147957},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,147960,147961,147962,24603],{},"假设 ",[102,147963,147964],{},"sales.json",[96,147966,147968],{"className":147030,"code":147967,"language":145777,"meta":22,"style":22},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[102,147969,147970,147975,148007,148035,148063],{"__ignoreMap":22},[105,147971,147972],{"class":107,"line":108},[105,147973,147974],{"class":115},"[\n",[105,147976,147977,147980,147983,147985,147987,147989,147992,147994,147996,147998,148001,148003,148005],{"class":107,"line":28},[105,147978,147979],{"class":115},"  {",[105,147981,147982],{"class":164},"\"date\"",[105,147984,51422],{"class":115},[105,147986,147250],{"class":220},[105,147988,12427],{"class":115},[105,147990,147991],{"class":164},"\"online\"",[105,147993,51422],{"class":115},[105,147995,427],{"class":164},[105,147997,12427],{"class":115},[105,147999,148000],{"class":164},"\"offline\"",[105,148002,51422],{"class":115},[105,148004,728],{"class":164},[105,148006,4921],{"class":115},[105,148008,148009,148011,148013,148015,148017,148019,148021,148023,148025,148027,148029,148031,148033],{"class":107,"line":1171},[105,148010,147979],{"class":115},[105,148012,147982],{"class":164},[105,148014,51422],{"class":115},[105,148016,147255],{"class":220},[105,148018,12427],{"class":115},[105,148020,147991],{"class":164},[105,148022,51422],{"class":115},[105,148024,147842],{"class":164},[105,148026,12427],{"class":115},[105,148028,148000],{"class":164},[105,148030,51422],{"class":115},[105,148032,978],{"class":164},[105,148034,4921],{"class":115},[105,148036,148037,148039,148041,148043,148045,148047,148049,148051,148053,148055,148057,148059,148061],{"class":107,"line":1186},[105,148038,147979],{"class":115},[105,148040,147982],{"class":164},[105,148042,51422],{"class":115},[105,148044,147260],{"class":220},[105,148046,12427],{"class":115},[105,148048,147991],{"class":164},[105,148050,51422],{"class":115},[105,148052,933],{"class":164},[105,148054,12427],{"class":115},[105,148056,148000],{"class":164},[105,148058,51422],{"class":115},[105,148060,427],{"class":164},[105,148062,1556],{"class":115},[105,148064,148065],{"class":107,"line":1192},[105,148066,33231],{"class":115},[14,148068,148069],{},"读取并绘图：",[96,148071,148073],{"className":30363,"code":148072,"language":30365,"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",[102,148074,148075,148081,148095,148105,148109,148141,148154,148158,148166,148175,148184,148188,148200,148209,148218,148227,148231,148239,148243,148260,148277,148281,148298,148314,148318],{"__ignoreMap":22},[105,148076,148077,148079],{"class":107,"line":108},[105,148078,30377],{"class":111},[105,148080,147076],{"class":115},[105,148082,148083,148085,148087,148089,148091,148093],{"class":107,"line":28},[105,148084,30722],{"class":111},[105,148086,147364],{"class":115},[105,148088,30377],{"class":111},[105,148090,147369],{"class":115},[105,148092,31368],{"class":111},[105,148094,147374],{"class":115},[105,148096,148097,148099,148101,148103],{"class":107,"line":1171},[105,148098,30722],{"class":111},[105,148100,147223],{"class":115},[105,148102,30377],{"class":111},[105,148104,147228],{"class":115},[105,148106,148107],{"class":107,"line":1186},[105,148108,2391],{"emptyLinePlaceholder":32},[105,148110,148111,148113,148115,148117,148120,148122,148124,148126,148128,148130,148132,148134,148136,148139],{"class":107,"line":1192},[105,148112,107818],{"class":111},[105,148114,146776],{"class":164},[105,148116,116],{"class":115},[105,148118,148119],{"class":220},"\"sales.json\"",[105,148121,12427],{"class":115},[105,148123,146786],{"class":220},[105,148125,12427],{"class":115},[105,148127,146791],{"class":5208},[105,148129,161],{"class":111},[105,148131,146796],{"class":220},[105,148133,13706],{"class":115},[105,148135,31368],{"class":111},[105,148137,148138],{"class":5208}," file",[105,148140,3730],{"class":115},[105,148142,148143,148145,148147,148150,148152],{"class":107,"line":1206},[105,148144,101406],{"class":115},[105,148146,161],{"class":111},[105,148148,148149],{"class":115}," json.load(",[105,148151,45339],{"class":5208},[105,148153,122],{"class":115},[105,148155,148156],{"class":107,"line":1212},[105,148157,2391],{"emptyLinePlaceholder":32},[105,148159,148160,148162,148164],{"class":107,"line":1303},[105,148161,147785],{"class":115},[105,148163,161],{"class":111},[105,148165,51823],{"class":115},[105,148167,148168,148171,148173],{"class":107,"line":1309},[105,148169,148170],{"class":115},"online_sales ",[105,148172,161],{"class":111},[105,148174,51823],{"class":115},[105,148176,148177,148180,148182],{"class":107,"line":1321},[105,148178,148179],{"class":115},"offline_sales ",[105,148181,161],{"class":111},[105,148183,51823],{"class":115},[105,148185,148186],{"class":107,"line":1603},[105,148187,2391],{"emptyLinePlaceholder":32},[105,148189,148190,148192,148195,148197],{"class":107,"line":1608},[105,148191,3016],{"class":111},[105,148193,148194],{"class":115}," item ",[105,148196,26028],{"class":111},[105,148198,148199],{"class":115}," data:\n",[105,148201,148202,148205,148207],{"class":107,"line":1614},[105,148203,148204],{"class":115},"    dates.append(item[",[105,148206,147982],{"class":220},[105,148208,4648],{"class":115},[105,148210,148211,148214,148216],{"class":107,"line":1619},[105,148212,148213],{"class":115},"    online_sales.append(item[",[105,148215,147991],{"class":220},[105,148217,4648],{"class":115},[105,148219,148220,148223,148225],{"class":107,"line":1633},[105,148221,148222],{"class":115},"    offline_sales.append(item[",[105,148224,148000],{"class":220},[105,148226,4648],{"class":115},[105,148228,148229],{"class":107,"line":1638},[105,148230,2391],{"emptyLinePlaceholder":32},[105,148232,148233,148235,148237],{"class":107,"line":1644},[105,148234,147237],{"class":115},[105,148236,161],{"class":111},[105,148238,147242],{"class":115},[105,148240,148241],{"class":107,"line":1665},[105,148242,147826],{"class":115},[105,148244,148245,148247,148249,148252,148254,148256,148258],{"class":107,"line":1670},[105,148246,147277],{"class":115},[105,148248,147833],{"class":220},[105,148250,148251],{"class":115},", online_sales, ",[105,148253,147730],{"class":5208},[105,148255,161],{"class":111},[105,148257,31461],{"class":164},[105,148259,122],{"class":115},[105,148261,148262,148264,148266,148269,148271,148273,148275],{"class":107,"line":1684},[105,148263,147277],{"class":115},[105,148265,147871],{"class":220},[105,148267,148268],{"class":115},", offline_sales, ",[105,148270,147730],{"class":5208},[105,148272,161],{"class":111},[105,148274,31461],{"class":164},[105,148276,122],{"class":115},[105,148278,148279],{"class":107,"line":1689},[105,148280,147453],{"class":115},[105,148282,148283,148285,148287,148289,148291,148293,148296],{"class":107,"line":1718},[105,148284,147458],{"class":5208},[105,148286,161],{"class":111},[105,148288,147463],{"class":115},[105,148290,51392],{"class":5208},[105,148292,161],{"class":111},[105,148294,148295],{"class":220},"\"销售趋势\"",[105,148297,38032],{"class":115},[105,148299,148300,148302,148304,148306,148308,148310,148312],{"class":107,"line":1723},[105,148301,147514],{"class":5208},[105,148303,161],{"class":111},[105,148305,147519],{"class":115},[105,148307,147522],{"class":5208},[105,148309,161],{"class":111},[105,148311,147527],{"class":220},[105,148313,38032],{"class":115},[105,148315,148316],{"class":107,"line":1740},[105,148317,122],{"class":115},[105,148319,148320,148322,148324],{"class":107,"line":1745},[105,148321,147309],{"class":115},[105,148323,147949],{"class":220},[105,148325,122],{"class":115},[47,148327,148329],{"id":148328},"_109-数据清洗","10.9 数据清洗",[14,148331,148332],{},"真实数据经常不整齐，需要清洗。",[14,148334,148335],{},"常见问题：",[59,148337,148338,148341,148344,148347],{},[62,148339,148340],{},"数字是字符串。",[62,148342,148343],{},"字段缺失。",[62,148345,148346],{},"空值。",[62,148348,148349],{},"日期格式不统一。",[14,148351,15127],{},[96,148353,148355],{"className":30363,"code":148354,"language":30365,"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",[102,148356,148357,148366,148389,148409,148430,148434,148438,148446,148455,148459,148470,148484,148493,148498,148502,148510,148520,148524,148531],{"__ignoreMap":22},[105,148358,148359,148362,148364],{"class":107,"line":108},[105,148360,148361],{"class":115},"raw_data ",[105,148363,161],{"class":111},[105,148365,55432],{"class":115},[105,148367,148368,148371,148373,148375,148377,148379,148382,148384,148387],{"class":107,"line":28},[105,148369,148370],{"class":115},"    {",[105,148372,147982],{"class":220},[105,148374,51422],{"class":115},[105,148376,147250],{"class":220},[105,148378,12427],{"class":115},[105,148380,148381],{"class":220},"\"sales\"",[105,148383,51422],{"class":115},[105,148385,148386],{"class":220},"\"100\"",[105,148388,4921],{"class":115},[105,148390,148391,148393,148395,148397,148399,148401,148403,148405,148407],{"class":107,"line":1171},[105,148392,148370],{"class":115},[105,148394,147982],{"class":220},[105,148396,51422],{"class":115},[105,148398,147255],{"class":220},[105,148400,12427],{"class":115},[105,148402,148381],{"class":220},[105,148404,51422],{"class":115},[105,148406,7644],{"class":220},[105,148408,4921],{"class":115},[105,148410,148411,148413,148415,148417,148419,148421,148423,148425,148428],{"class":107,"line":1186},[105,148412,148370],{"class":115},[105,148414,147982],{"class":220},[105,148416,51422],{"class":115},[105,148418,147260],{"class":220},[105,148420,12427],{"class":115},[105,148422,148381],{"class":220},[105,148424,51422],{"class":115},[105,148426,148427],{"class":220},"\"120\"",[105,148429,4921],{"class":115},[105,148431,148432],{"class":107,"line":1192},[105,148433,33231],{"class":115},[105,148435,148436],{"class":107,"line":1206},[105,148437,2391],{"emptyLinePlaceholder":32},[105,148439,148440,148442,148444],{"class":107,"line":1212},[105,148441,147785],{"class":115},[105,148443,161],{"class":111},[105,148445,51823],{"class":115},[105,148447,148448,148451,148453],{"class":107,"line":1303},[105,148449,148450],{"class":115},"sales ",[105,148452,161],{"class":111},[105,148454,51823],{"class":115},[105,148456,148457],{"class":107,"line":1309},[105,148458,2391],{"emptyLinePlaceholder":32},[105,148460,148461,148463,148465,148467],{"class":107,"line":1321},[105,148462,3016],{"class":111},[105,148464,148194],{"class":115},[105,148466,26028],{"class":111},[105,148468,148469],{"class":115}," raw_data:\n",[105,148471,148472,148475,148477,148480,148482],{"class":107,"line":1603},[105,148473,148474],{"class":115},"    value ",[105,148476,161],{"class":111},[105,148478,148479],{"class":115}," item.get(",[105,148481,148381],{"class":220},[105,148483,122],{"class":115},[105,148485,148486,148488,148490],{"class":107,"line":1608},[105,148487,3092],{"class":111},[105,148489,38915],{"class":111},[105,148491,148492],{"class":115}," value:\n",[105,148494,148495],{"class":107,"line":1614},[105,148496,148497],{"class":111},"        continue\n",[105,148499,148500],{"class":107,"line":1619},[105,148501,2391],{"emptyLinePlaceholder":32},[105,148503,148504,148506,148508],{"class":107,"line":1633},[105,148505,148204],{"class":115},[105,148507,147982],{"class":220},[105,148509,4648],{"class":115},[105,148511,148512,148515,148517],{"class":107,"line":1638},[105,148513,148514],{"class":115},"    sales.append(",[105,148516,119],{"class":164},[105,148518,148519],{"class":115},"(value))\n",[105,148521,148522],{"class":107,"line":1644},[105,148523,2391],{"emptyLinePlaceholder":32},[105,148525,148526,148528],{"class":107,"line":1665},[105,148527,30400],{"class":164},[105,148529,148530],{"class":115},"(dates)\n",[105,148532,148533,148535],{"class":107,"line":1670},[105,148534,30400],{"class":164},[105,148536,148537],{"class":115},"(sales)\n",[47,148539,148541],{"id":148540},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[96,148543,148545],{"className":30363,"code":148544,"language":30365,"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",[102,148546,148547,148561,148571,148575,148583,148604,148626,148648,148670,148692,148696,148700,148722,148743,148747,148755,148759,148763,148773,148782,148792,148808,148812,148816,148833,148849,148865,148881,148891,148895],{"__ignoreMap":22},[105,148548,148549,148551,148553,148555,148557,148559],{"class":107,"line":108},[105,148550,30722],{"class":111},[105,148552,147364],{"class":115},[105,148554,30377],{"class":111},[105,148556,147369],{"class":115},[105,148558,31368],{"class":111},[105,148560,147374],{"class":115},[105,148562,148563,148565,148567,148569],{"class":107,"line":28},[105,148564,30722],{"class":111},[105,148566,147223],{"class":115},[105,148568,30377],{"class":111},[105,148570,147228],{"class":115},[105,148572,148573],{"class":107,"line":1171},[105,148574,2391],{"emptyLinePlaceholder":32},[105,148576,148577,148579,148581],{"class":107,"line":1186},[105,148578,148450],{"class":115},[105,148580,161],{"class":111},[105,148582,55432],{"class":115},[105,148584,148585,148587,148589,148591,148594,148596,148598,148600,148602],{"class":107,"line":1192},[105,148586,148370],{"class":115},[105,148588,147982],{"class":220},[105,148590,51422],{"class":115},[105,148592,148593],{"class":220},"\"2024-10-01\"",[105,148595,12427],{"class":115},[105,148597,84069],{"class":220},[105,148599,51422],{"class":115},[105,148601,92008],{"class":164},[105,148603,4921],{"class":115},[105,148605,148606,148608,148610,148612,148615,148617,148619,148621,148624],{"class":107,"line":1206},[105,148607,148370],{"class":115},[105,148609,147982],{"class":220},[105,148611,51422],{"class":115},[105,148613,148614],{"class":220},"\"2024-10-02\"",[105,148616,12427],{"class":115},[105,148618,84069],{"class":220},[105,148620,51422],{"class":115},[105,148622,148623],{"class":164},"1800",[105,148625,4921],{"class":115},[105,148627,148628,148630,148632,148634,148637,148639,148641,148643,148646],{"class":107,"line":1212},[105,148629,148370],{"class":115},[105,148631,147982],{"class":220},[105,148633,51422],{"class":115},[105,148635,148636],{"class":220},"\"2024-10-03\"",[105,148638,12427],{"class":115},[105,148640,84069],{"class":220},[105,148642,51422],{"class":115},[105,148644,148645],{"class":164},"1500",[105,148647,4921],{"class":115},[105,148649,148650,148652,148654,148656,148659,148661,148663,148665,148668],{"class":107,"line":1303},[105,148651,148370],{"class":115},[105,148653,147982],{"class":220},[105,148655,51422],{"class":115},[105,148657,148658],{"class":220},"\"2024-10-04\"",[105,148660,12427],{"class":115},[105,148662,84069],{"class":220},[105,148664,51422],{"class":115},[105,148666,148667],{"class":164},"2100",[105,148669,4921],{"class":115},[105,148671,148672,148674,148676,148678,148681,148683,148685,148687,148690],{"class":107,"line":1309},[105,148673,148370],{"class":115},[105,148675,147982],{"class":220},[105,148677,51422],{"class":115},[105,148679,148680],{"class":220},"\"2024-10-05\"",[105,148682,12427],{"class":115},[105,148684,84069],{"class":220},[105,148686,51422],{"class":115},[105,148688,148689],{"class":164},"2600",[105,148691,4921],{"class":115},[105,148693,148694],{"class":107,"line":1321},[105,148695,33231],{"class":115},[105,148697,148698],{"class":107,"line":1603},[105,148699,2391],{"emptyLinePlaceholder":32},[105,148701,148702,148704,148706,148709,148711,148713,148715,148717,148719],{"class":107,"line":1608},[105,148703,147785],{"class":115},[105,148705,161],{"class":111},[105,148707,148708],{"class":115}," [item[",[105,148710,147982],{"class":220},[105,148712,4434],{"class":115},[105,148714,3016],{"class":111},[105,148716,148194],{"class":115},[105,148718,26028],{"class":111},[105,148720,148721],{"class":115}," sales]\n",[105,148723,148724,148727,148729,148731,148733,148735,148737,148739,148741],{"class":107,"line":1614},[105,148725,148726],{"class":115},"amounts ",[105,148728,161],{"class":111},[105,148730,148708],{"class":115},[105,148732,84069],{"class":220},[105,148734,4434],{"class":115},[105,148736,3016],{"class":111},[105,148738,148194],{"class":115},[105,148740,26028],{"class":111},[105,148742,148721],{"class":115},[105,148744,148745],{"class":107,"line":1619},[105,148746,2391],{"emptyLinePlaceholder":32},[105,148748,148749,148751,148753],{"class":107,"line":1633},[105,148750,147237],{"class":115},[105,148752,161],{"class":111},[105,148754,147242],{"class":115},[105,148756,148757],{"class":107,"line":1638},[105,148758,147826],{"class":115},[105,148760,148761],{"class":107,"line":1644},[105,148762,147634],{"class":115},[105,148764,148765,148767,148769,148771],{"class":107,"line":1665},[105,148766,147639],{"class":5208},[105,148768,161],{"class":111},[105,148770,147280],{"class":220},[105,148772,31451],{"class":115},[105,148774,148775,148777,148779],{"class":107,"line":1670},[105,148776,147650],{"class":5208},[105,148778,161],{"class":111},[105,148780,148781],{"class":115},"amounts,\n",[105,148783,148784,148786,148788,148790],{"class":107,"line":1684},[105,148785,147679],{"class":5208},[105,148787,161],{"class":111},[105,148789,31461],{"class":164},[105,148791,31451],{"class":115},[105,148793,148794,148796,148798,148800,148802,148804,148806],{"class":107,"line":1689},[105,148795,147690],{"class":5208},[105,148797,161],{"class":111},[105,148799,147695],{"class":115},[105,148801,147698],{"class":5208},[105,148803,161],{"class":111},[105,148805,31461],{"class":164},[105,148807,38032],{"class":115},[105,148809,148810],{"class":107,"line":1718},[105,148811,122],{"class":115},[105,148813,148814],{"class":107,"line":1723},[105,148815,147453],{"class":115},[105,148817,148818,148820,148822,148824,148826,148828,148831],{"class":107,"line":1740},[105,148819,147458],{"class":5208},[105,148821,161],{"class":111},[105,148823,147463],{"class":115},[105,148825,51392],{"class":5208},[105,148827,161],{"class":111},[105,148829,148830],{"class":220},"\"每日销售额\"",[105,148832,38032],{"class":115},[105,148834,148835,148837,148839,148841,148843,148845,148847],{"class":107,"line":1745},[105,148836,147477],{"class":5208},[105,148838,161],{"class":111},[105,148840,147482],{"class":115},[105,148842,79795],{"class":5208},[105,148844,161],{"class":111},[105,148846,147489],{"class":220},[105,148848,38032],{"class":115},[105,148850,148851,148853,148855,148857,148859,148861,148863],{"class":107,"line":1750},[105,148852,147496],{"class":5208},[105,148854,161],{"class":111},[105,148856,147482],{"class":115},[105,148858,79795],{"class":5208},[105,148860,161],{"class":111},[105,148862,147507],{"class":220},[105,148864,38032],{"class":115},[105,148866,148867,148869,148871,148873,148875,148877,148879],{"class":107,"line":1755},[105,148868,147514],{"class":5208},[105,148870,161],{"class":111},[105,148872,147519],{"class":115},[105,148874,147522],{"class":5208},[105,148876,161],{"class":111},[105,148878,147527],{"class":220},[105,148880,38032],{"class":115},[105,148882,148883,148886,148888],{"class":107,"line":1769},[105,148884,148885],{"class":5208},"    datazoom_opts",[105,148887,161],{"class":111},[105,148889,148890],{"class":115},"[opts.DataZoomOpts()],\n",[105,148892,148893],{"class":107,"line":1774},[105,148894,122],{"class":115},[105,148896,148897,148899,148902],{"class":107,"line":2568},[105,148898,147309],{"class":115},[105,148900,148901],{"class":220},"\"daily_sales.html\"",[105,148903,122],{"class":115},[14,148905,148906,148909],{},[102,148907,148908],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[47,148911,148913],{"id":148912},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148915,148916],{},"如果数据结构如下：",[96,148918,148920],{"className":30363,"code":148919,"language":30365,"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",[102,148921,148922,148930,148938,148960,148981,148986,148993,149013,149033,149037],{"__ignoreMap":22},[105,148923,148924,148926,148928],{"class":107,"line":108},[105,148925,101643],{"class":115},[105,148927,161],{"class":111},[105,148929,15564],{"class":115},[105,148931,148932,148935],{"class":107,"line":28},[105,148933,148934],{"class":220},"    \"北京\"",[105,148936,148937],{"class":115},": [\n",[105,148939,148940,148942,148944,148946,148949,148951,148954,148956,148958],{"class":107,"line":1171},[105,148941,4908],{"class":115},[105,148943,147982],{"class":220},[105,148945,51422],{"class":115},[105,148947,148948],{"class":220},"\"2024-01-01\"",[105,148950,12427],{"class":115},[105,148952,148953],{"class":220},"\"confirm\"",[105,148955,51422],{"class":115},[105,148957,562],{"class":164},[105,148959,4921],{"class":115},[105,148961,148962,148964,148966,148968,148971,148973,148975,148977,148979],{"class":107,"line":1186},[105,148963,4908],{"class":115},[105,148965,147982],{"class":220},[105,148967,51422],{"class":115},[105,148969,148970],{"class":220},"\"2024-01-02\"",[105,148972,12427],{"class":115},[105,148974,148953],{"class":220},[105,148976,51422],{"class":115},[105,148978,614],{"class":164},[105,148980,4921],{"class":115},[105,148982,148983],{"class":107,"line":1192},[105,148984,148985],{"class":115},"    ],\n",[105,148987,148988,148991],{"class":107,"line":1206},[105,148989,148990],{"class":220},"    \"上海\"",[105,148992,148937],{"class":115},[105,148994,148995,148997,148999,149001,149003,149005,149007,149009,149011],{"class":107,"line":1212},[105,148996,4908],{"class":115},[105,148998,147982],{"class":220},[105,149000,51422],{"class":115},[105,149002,148948],{"class":220},[105,149004,12427],{"class":115},[105,149006,148953],{"class":220},[105,149008,51422],{"class":115},[105,149010,511],{"class":164},[105,149012,4921],{"class":115},[105,149014,149015,149017,149019,149021,149023,149025,149027,149029,149031],{"class":107,"line":1303},[105,149016,4908],{"class":115},[105,149018,147982],{"class":220},[105,149020,51422],{"class":115},[105,149022,148970],{"class":220},[105,149024,12427],{"class":115},[105,149026,148953],{"class":220},[105,149028,51422],{"class":115},[105,149030,639],{"class":164},[105,149032,4921],{"class":115},[105,149034,149035],{"class":107,"line":1309},[105,149036,148985],{"class":115},[105,149038,149039],{"class":107,"line":1321},[105,149040,1556],{"class":115},[14,149042,149043],{},"绘制多地区趋势：",[96,149045,149047],{"className":30363,"code":149046,"language":30365,"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",[102,149048,149049,149063,149073,149077,149102,149106,149114,149118,149122,149134,149156,149169,149173,149177,149194,149210,149214],{"__ignoreMap":22},[105,149050,149051,149053,149055,149057,149059,149061],{"class":107,"line":108},[105,149052,30722],{"class":111},[105,149054,147364],{"class":115},[105,149056,30377],{"class":111},[105,149058,147369],{"class":115},[105,149060,31368],{"class":111},[105,149062,147374],{"class":115},[105,149064,149065,149067,149069,149071],{"class":107,"line":28},[105,149066,30722],{"class":111},[105,149068,147223],{"class":115},[105,149070,30377],{"class":111},[105,149072,147228],{"class":115},[105,149074,149075],{"class":107,"line":1171},[105,149076,2391],{"emptyLinePlaceholder":32},[105,149078,149079,149081,149083,149085,149087,149089,149091,149093,149095,149098,149100],{"class":107,"line":1186},[105,149080,147785],{"class":115},[105,149082,161],{"class":111},[105,149084,148708],{"class":115},[105,149086,147982],{"class":220},[105,149088,4434],{"class":115},[105,149090,3016],{"class":111},[105,149092,148194],{"class":115},[105,149094,26028],{"class":111},[105,149096,149097],{"class":115}," data[",[105,149099,69254],{"class":220},[105,149101,77512],{"class":115},[105,149103,149104],{"class":107,"line":1192},[105,149105,2391],{"emptyLinePlaceholder":32},[105,149107,149108,149110,149112],{"class":107,"line":1206},[105,149109,147237],{"class":115},[105,149111,161],{"class":111},[105,149113,147242],{"class":115},[105,149115,149116],{"class":107,"line":1212},[105,149117,147826],{"class":115},[105,149119,149120],{"class":107,"line":1303},[105,149121,2391],{"emptyLinePlaceholder":32},[105,149123,149124,149126,149129,149131],{"class":107,"line":1309},[105,149125,3016],{"class":111},[105,149127,149128],{"class":115}," city, records ",[105,149130,26028],{"class":111},[105,149132,149133],{"class":115}," data.items():\n",[105,149135,149136,149139,149141,149143,149145,149147,149149,149151,149153],{"class":107,"line":1321},[105,149137,149138],{"class":115},"    values ",[105,149140,161],{"class":111},[105,149142,148708],{"class":115},[105,149144,148953],{"class":220},[105,149146,4434],{"class":115},[105,149148,3016],{"class":111},[105,149150,148194],{"class":115},[105,149152,26028],{"class":111},[105,149154,149155],{"class":115}," records]\n",[105,149157,149158,149161,149163,149165,149167],{"class":107,"line":1603},[105,149159,149160],{"class":115},"    line.add_yaxis(city, values, ",[105,149162,147730],{"class":5208},[105,149164,161],{"class":111},[105,149166,31461],{"class":164},[105,149168,122],{"class":115},[105,149170,149171],{"class":107,"line":1608},[105,149172,2391],{"emptyLinePlaceholder":32},[105,149174,149175],{"class":107,"line":1614},[105,149176,147453],{"class":115},[105,149178,149179,149181,149183,149185,149187,149189,149192],{"class":107,"line":1619},[105,149180,147458],{"class":5208},[105,149182,161],{"class":111},[105,149184,147463],{"class":115},[105,149186,51392],{"class":5208},[105,149188,161],{"class":111},[105,149190,149191],{"class":220},"\"多地区趋势图\"",[105,149193,38032],{"class":115},[105,149195,149196,149198,149200,149202,149204,149206,149208],{"class":107,"line":1633},[105,149197,147514],{"class":5208},[105,149199,161],{"class":111},[105,149201,147519],{"class":115},[105,149203,147522],{"class":5208},[105,149205,161],{"class":111},[105,149207,147527],{"class":220},[105,149209,38032],{"class":115},[105,149211,149212],{"class":107,"line":1638},[105,149213,122],{"class":115},[105,149215,149216,149218,149221],{"class":107,"line":1644},[105,149217,147309],{"class":115},[105,149219,149220],{"class":220},"\"trend.html\"",[105,149222,122],{"class":115},[14,149224,149225],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[47,149227,149229],{"id":149228},"_1012-易错点","10.12 易错点",[59,149231,149232,149238,149244,149254,149260],{},[62,149233,149234,149237],{},[102,149235,149236],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[62,149239,149240,149243],{},[102,149241,149242],{},"render()"," 生成的是 HTML，不是图片。",[62,149245,149246,149247,149250,149251,28370],{},"JSON 字符串用 ",[102,149248,149249],{},"json.loads()","，JSON 文件用 ",[102,149252,149253],{},"json.load()",[62,149255,149256,149257,28370],{},"中文 JSON 保存时加 ",[102,149258,149259],{},"ensure_ascii=False",[62,149261,149262],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[47,149264,149266],{"id":149265},"_1013-本章练习","10.13 本章练习",[59,149268,149269,149272,149275,149278,149281],{},[62,149270,149271],{},"安装 pyecharts 并生成第一个折线图。",[62,149273,149274],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[62,149276,149277],{},"绘制两条折线，对比线上和线下销售额。",[62,149279,149280],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[62,149282,149283],{},"对含有空值的销售数据进行清洗后再绘图。",[5118,149285,149286],{},"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":28,"depth":28,"links":149288},[149289,149290,149291,149292,149293,149294,149295,149296,149297,149298,149299,149300,149301],{"id":146905,"depth":28,"text":146906},{"id":146980,"depth":28,"text":146981},{"id":147159,"depth":28,"text":147160},{"id":147210,"depth":28,"text":147211},{"id":147344,"depth":28,"text":147345},{"id":147620,"depth":28,"text":147621},{"id":147746,"depth":28,"text":147747},{"id":147957,"depth":28,"text":147958},{"id":148328,"depth":28,"text":148329},{"id":148540,"depth":28,"text":148541},{"id":148912,"depth":28,"text":148913},{"id":149228,"depth":28,"text":149229},{"id":149265,"depth":28,"text":149266},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146897,"description":23369},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149308,"title":149309,"body":149310,"description":23369,"extension":30,"meta":151670,"navigation":32,"path":151671,"seo":151672,"stem":151673,"__hash__":151674},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149311,"toc":151647},[149312,149315,149319,149322,149325,149401,149404,149495,149498,149502,149505,149549,149562,149566,149569,149636,149639,149643,149646,149730,149738,149742,149747,149888,149891,149902,149908,149914,150028,150032,150035,150038,150291,150294,150298,150301,150405,150408,150412,150563,150567,150574,150687,150691,150694,150800,150803,150807,150810,150841,150844,150949,150952,150956,150960,150970,151038,151042,151049,151113,151116,151120,151126,151222,151231,151235,151559,151568,151572,151600,151604,151644],[10,149313,149309],{"id":149314},"_11-面向对象基础",[47,149316,149318],{"id":149317},"_111-什么是面向对象","11.1 什么是面向对象",[14,149320,149321],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149323,149324],{},"面向过程：",[96,149326,149328],{"className":30363,"code":149327,"language":30365,"meta":22,"style":22},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[102,149329,149330,149339,149347,149351,149361,149392,149396],{"__ignoreMap":22},[105,149331,149332,149334,149336],{"class":107,"line":108},[105,149333,146521],{"class":115},[105,149335,161],{"class":111},[105,149337,149338],{"class":220}," \"小明\"\n",[105,149340,149341,149343,149345],{"class":107,"line":28},[105,149342,146531],{"class":115},[105,149344,161],{"class":111},[105,149346,146536],{"class":164},[105,149348,149349],{"class":107,"line":1171},[105,149350,2391],{"emptyLinePlaceholder":32},[105,149352,149353,149355,149358],{"class":107,"line":1186},[105,149354,31932],{"class":111},[105,149356,149357],{"class":1954}," introduce",[105,149359,149360],{"class":115},"(name, age):\n",[105,149362,149363,149365,149367,149369,149372,149374,149376,149378,149381,149383,149385,149387,149390],{"class":107,"line":1192},[105,149364,31284],{"class":164},[105,149366,116],{"class":115},[105,149368,168],{"class":111},[105,149370,149371],{"class":220},"\"我叫",[105,149373,1012],{"class":164},[105,149375,79795],{"class":115},[105,149377,1062],{"class":164},[105,149379,149380],{"class":220},"，今年",[105,149382,1012],{"class":164},[105,149384,70206],{"class":115},[105,149386,1062],{"class":164},[105,149388,149389],{"class":220},"岁\"",[105,149391,122],{"class":115},[105,149393,149394],{"class":107,"line":1206},[105,149395,2391],{"emptyLinePlaceholder":32},[105,149397,149398],{"class":107,"line":1212},[105,149399,149400],{"class":115},"introduce(name, age)\n",[14,149402,149403],{},"面向对象：",[96,149405,149407],{"className":30363,"code":149406,"language":30365,"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",[102,149408,149409,149417,149425,149454,149458,149462,149472,149481,149490],{"__ignoreMap":22},[105,149410,149411,149413,149415],{"class":107,"line":108},[105,149412,14686],{"class":111},[105,149414,7890],{"class":1954},[105,149416,3730],{"class":115},[105,149418,149419,149421,149423],{"class":107,"line":28},[105,149420,30786],{"class":111},[105,149422,149357],{"class":1954},[105,149424,30792],{"class":115},[105,149426,149427,149429,149431,149433,149435,149438,149440,149442,149444,149446,149448,149450,149452],{"class":107,"line":1171},[105,149428,32436],{"class":164},[105,149430,116],{"class":115},[105,149432,168],{"class":111},[105,149434,149371],{"class":220},[105,149436,149437],{"class":164},"{self",[105,149439,80286],{"class":115},[105,149441,1062],{"class":164},[105,149443,149380],{"class":220},[105,149445,149437],{"class":164},[105,149447,80298],{"class":115},[105,149449,1062],{"class":164},[105,149451,149389],{"class":220},[105,149453,122],{"class":115},[105,149455,149456],{"class":107,"line":1186},[105,149457,2391],{"emptyLinePlaceholder":32},[105,149459,149460],{"class":107,"line":1192},[105,149461,2391],{"emptyLinePlaceholder":32},[105,149463,149464,149467,149469],{"class":107,"line":1206},[105,149465,149466],{"class":115},"student ",[105,149468,161],{"class":111},[105,149470,149471],{"class":115}," Student()\n",[105,149473,149474,149477,149479],{"class":107,"line":1212},[105,149475,149476],{"class":115},"student.name ",[105,149478,161],{"class":111},[105,149480,149338],{"class":220},[105,149482,149483,149486,149488],{"class":107,"line":1303},[105,149484,149485],{"class":115},"student.age ",[105,149487,161],{"class":111},[105,149489,146536],{"class":164},[105,149491,149492],{"class":107,"line":1309},[105,149493,149494],{"class":115},"student.introduce()\n",[14,149496,149497],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[47,149499,149501],{"id":149500},"_112-类和对象","11.2 类和对象",[14,149503,149504],{},"类是模板，对象是根据模板创建出来的具体实例。",[96,149506,149508],{"className":30363,"code":149507,"language":30365,"meta":22,"style":22},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[102,149509,149510,149518,149523,149527,149531,149540],{"__ignoreMap":22},[105,149511,149512,149514,149516],{"class":107,"line":108},[105,149513,14686],{"class":111},[105,149515,7890],{"class":1954},[105,149517,3730],{"class":115},[105,149519,149520],{"class":107,"line":28},[105,149521,149522],{"class":111},"    pass\n",[105,149524,149525],{"class":107,"line":1171},[105,149526,2391],{"emptyLinePlaceholder":32},[105,149528,149529],{"class":107,"line":1186},[105,149530,2391],{"emptyLinePlaceholder":32},[105,149532,149533,149536,149538],{"class":107,"line":1192},[105,149534,149535],{"class":115},"student1 ",[105,149537,161],{"class":111},[105,149539,149471],{"class":115},[105,149541,149542,149545,149547],{"class":107,"line":1206},[105,149543,149544],{"class":115},"student2 ",[105,149546,161],{"class":111},[105,149548,149471],{"class":115},[14,149550,149551,149554,149555,101003,149558,149561],{},[102,149552,149553],{},"Student"," 是类，",[102,149556,149557],{},"student1",[102,149559,149560],{},"student2"," 是对象。",[47,149563,149565],{"id":149564},"_113-属性","11.3 属性",[14,149567,149568],{},"属性是对象保存的数据。",[96,149570,149572],{"className":30363,"code":149571,"language":30365,"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",[102,149573,149574,149582,149586,149590,149594,149602,149610,149618,149622,149629],{"__ignoreMap":22},[105,149575,149576,149578,149580],{"class":107,"line":108},[105,149577,14686],{"class":111},[105,149579,7890],{"class":1954},[105,149581,3730],{"class":115},[105,149583,149584],{"class":107,"line":28},[105,149585,149522],{"class":111},[105,149587,149588],{"class":107,"line":1171},[105,149589,2391],{"emptyLinePlaceholder":32},[105,149591,149592],{"class":107,"line":1186},[105,149593,2391],{"emptyLinePlaceholder":32},[105,149595,149596,149598,149600],{"class":107,"line":1192},[105,149597,149466],{"class":115},[105,149599,161],{"class":111},[105,149601,149471],{"class":115},[105,149603,149604,149606,149608],{"class":107,"line":1206},[105,149605,149476],{"class":115},[105,149607,161],{"class":111},[105,149609,149338],{"class":220},[105,149611,149612,149614,149616],{"class":107,"line":1212},[105,149613,149485],{"class":115},[105,149615,161],{"class":111},[105,149617,146536],{"class":164},[105,149619,149620],{"class":107,"line":1303},[105,149621,2391],{"emptyLinePlaceholder":32},[105,149623,149624,149626],{"class":107,"line":1309},[105,149625,30400],{"class":164},[105,149627,149628],{"class":115},"(student.name)\n",[105,149630,149631,149633],{"class":107,"line":1321},[105,149632,30400],{"class":164},[105,149634,149635],{"class":115},"(student.age)\n",[14,149637,149638],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[47,149640,149642],{"id":149641},"_114-方法","11.4 方法",[14,149644,149645],{},"类中的函数叫方法。",[96,149647,149648],{"className":30363,"code":149406,"language":30365,"meta":22,"style":22},[102,149649,149650,149658,149666,149694,149698,149702,149710,149718,149726],{"__ignoreMap":22},[105,149651,149652,149654,149656],{"class":107,"line":108},[105,149653,14686],{"class":111},[105,149655,7890],{"class":1954},[105,149657,3730],{"class":115},[105,149659,149660,149662,149664],{"class":107,"line":28},[105,149661,30786],{"class":111},[105,149663,149357],{"class":1954},[105,149665,30792],{"class":115},[105,149667,149668,149670,149672,149674,149676,149678,149680,149682,149684,149686,149688,149690,149692],{"class":107,"line":1171},[105,149669,32436],{"class":164},[105,149671,116],{"class":115},[105,149673,168],{"class":111},[105,149675,149371],{"class":220},[105,149677,149437],{"class":164},[105,149679,80286],{"class":115},[105,149681,1062],{"class":164},[105,149683,149380],{"class":220},[105,149685,149437],{"class":164},[105,149687,80298],{"class":115},[105,149689,1062],{"class":164},[105,149691,149389],{"class":220},[105,149693,122],{"class":115},[105,149695,149696],{"class":107,"line":1186},[105,149697,2391],{"emptyLinePlaceholder":32},[105,149699,149700],{"class":107,"line":1192},[105,149701,2391],{"emptyLinePlaceholder":32},[105,149703,149704,149706,149708],{"class":107,"line":1206},[105,149705,149466],{"class":115},[105,149707,161],{"class":111},[105,149709,149471],{"class":115},[105,149711,149712,149714,149716],{"class":107,"line":1212},[105,149713,149476],{"class":115},[105,149715,161],{"class":111},[105,149717,149338],{"class":220},[105,149719,149720,149722,149724],{"class":107,"line":1303},[105,149721,149485],{"class":115},[105,149723,161],{"class":111},[105,149725,146536],{"class":164},[105,149727,149728],{"class":107,"line":1309},[105,149729,149494],{"class":115},[14,149731,149732,149734,149735,149737],{},[102,149733,30808],{}," 表示当前对象。调用方法时不需要手动传入 ",[102,149736,30808],{},"，Python 会自动传。",[47,149739,149741],{"id":149740},"_115-构造方法__init__","11.5 构造方法__init__",[14,149743,149744,149746],{},[102,149745,30814],{}," 在对象创建时自动执行，用于初始化属性。",[96,149748,149750],{"className":30363,"code":149749,"language":30365,"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",[102,149751,149752,149760,149769,149781,149793,149804,149808,149816,149854,149858,149862,149884],{"__ignoreMap":22},[105,149753,149754,149756,149758],{"class":107,"line":108},[105,149755,14686],{"class":111},[105,149757,7890],{"class":1954},[105,149759,3730],{"class":115},[105,149761,149762,149764,149766],{"class":107,"line":28},[105,149763,30786],{"class":111},[105,149765,30789],{"class":164},[105,149767,149768],{"class":115},"(self, name, age, score):\n",[105,149770,149771,149773,149776,149778],{"class":107,"line":1171},[105,149772,30830],{"class":164},[105,149774,149775],{"class":115},".name ",[105,149777,161],{"class":111},[105,149779,149780],{"class":115}," name\n",[105,149782,149783,149785,149788,149790],{"class":107,"line":1186},[105,149784,30830],{"class":164},[105,149786,149787],{"class":115},".age ",[105,149789,161],{"class":111},[105,149791,149792],{"class":115}," age\n",[105,149794,149795,149797,149800,149802],{"class":107,"line":1192},[105,149796,30830],{"class":164},[105,149798,149799],{"class":115},".score ",[105,149801,161],{"class":111},[105,149803,1570],{"class":115},[105,149805,149806],{"class":107,"line":1206},[105,149807,2391],{"emptyLinePlaceholder":32},[105,149809,149810,149812,149814],{"class":107,"line":1212},[105,149811,30786],{"class":111},[105,149813,149357],{"class":1954},[105,149815,30792],{"class":115},[105,149817,149818,149820,149822,149824,149826,149828,149830,149832,149834,149836,149838,149840,149843,149845,149848,149850,149852],{"class":107,"line":1303},[105,149819,32436],{"class":164},[105,149821,116],{"class":115},[105,149823,168],{"class":111},[105,149825,149371],{"class":220},[105,149827,149437],{"class":164},[105,149829,80286],{"class":115},[105,149831,1062],{"class":164},[105,149833,149380],{"class":220},[105,149835,149437],{"class":164},[105,149837,80298],{"class":115},[105,149839,1062],{"class":164},[105,149841,149842],{"class":220},"岁，成绩",[105,149844,149437],{"class":164},[105,149846,149847],{"class":115},".score",[105,149849,1062],{"class":164},[105,149851,367],{"class":220},[105,149853,122],{"class":115},[105,149855,149856],{"class":107,"line":1309},[105,149857,2391],{"emptyLinePlaceholder":32},[105,149859,149860],{"class":107,"line":1321},[105,149861,2391],{"emptyLinePlaceholder":32},[105,149863,149864,149866,149868,149871,149874,149876,149878,149880,149882],{"class":107,"line":1603},[105,149865,149466],{"class":115},[105,149867,161],{"class":111},[105,149869,149870],{"class":115}," Student(",[105,149872,149873],{"class":220},"\"小明\"",[105,149875,12427],{"class":115},[105,149877,766],{"class":164},[105,149879,12427],{"class":115},[105,149881,1105],{"class":164},[105,149883,122],{"class":115},[105,149885,149886],{"class":107,"line":1608},[105,149887,149494],{"class":115},[14,149889,149890],{},"构造方法的好处：",[59,149892,149893,149896,149899],{},[62,149894,149895],{},"创建对象时必须提供必要数据。",[62,149897,149898],{},"属性初始化集中，不容易漏。",[62,149900,149901],{},"对象状态更完整。",[47,149903,149905,149906],{"id":149904},"_116-str","11.6 ",[265,149907,1291],{},[14,149909,149910,149911,28370],{},"直接打印对象时，默认输出不直观。可以定义 ",[102,149912,149913],{},"__str__",[96,149915,149917],{"className":30363,"code":149916,"language":30365,"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",[102,149918,149919,149927,149936,149946,149956,149960,149969,149997,150001,150005,150021],{"__ignoreMap":22},[105,149920,149921,149923,149925],{"class":107,"line":108},[105,149922,14686],{"class":111},[105,149924,7890],{"class":1954},[105,149926,3730],{"class":115},[105,149928,149929,149931,149933],{"class":107,"line":28},[105,149930,30786],{"class":111},[105,149932,30789],{"class":164},[105,149934,149935],{"class":115},"(self, name, age):\n",[105,149937,149938,149940,149942,149944],{"class":107,"line":1171},[105,149939,30830],{"class":164},[105,149941,149775],{"class":115},[105,149943,161],{"class":111},[105,149945,149780],{"class":115},[105,149947,149948,149950,149952,149954],{"class":107,"line":1186},[105,149949,30830],{"class":164},[105,149951,149787],{"class":115},[105,149953,161],{"class":111},[105,149955,149792],{"class":115},[105,149957,149958],{"class":107,"line":1192},[105,149959,2391],{"emptyLinePlaceholder":32},[105,149961,149962,149964,149967],{"class":107,"line":1206},[105,149963,30786],{"class":111},[105,149965,149966],{"class":164}," __str__",[105,149968,30792],{"class":115},[105,149970,149971,149973,149976,149979,149981,149983,149985,149988,149990,149992,149994],{"class":107,"line":1212},[105,149972,14744],{"class":111},[105,149974,149975],{"class":111}," f",[105,149977,149978],{"class":220},"\"Student(name=",[105,149980,149437],{"class":164},[105,149982,80286],{"class":115},[105,149984,1062],{"class":164},[105,149986,149987],{"class":220},", age=",[105,149989,149437],{"class":164},[105,149991,80298],{"class":115},[105,149993,1062],{"class":164},[105,149995,149996],{"class":220},")\"\n",[105,149998,149999],{"class":107,"line":1303},[105,150000,2391],{"emptyLinePlaceholder":32},[105,150002,150003],{"class":107,"line":1309},[105,150004,2391],{"emptyLinePlaceholder":32},[105,150006,150007,150009,150011,150013,150015,150017,150019],{"class":107,"line":1321},[105,150008,149466],{"class":115},[105,150010,161],{"class":111},[105,150012,149870],{"class":115},[105,150014,149873],{"class":220},[105,150016,12427],{"class":115},[105,150018,766],{"class":164},[105,150020,122],{"class":115},[105,150022,150023,150025],{"class":107,"line":1603},[105,150024,30400],{"class":164},[105,150026,150027],{"class":115},"(student)\n",[47,150029,150031],{"id":150030},"_117-封装","11.7 封装",[14,150033,150034],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150036,150037],{},"Python 中以双下划线开头的属性通常视为私有属性。",[96,150039,150041],{"className":30363,"code":150040,"language":30365,"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",[102,150042,150043,150052,150061,150073,150085,150089,150098,150107,150111,150121,150134,150145,150150,150161,150165,150174,150186,150197,150201,150214,150225,150229,150240,150244,150248,150266,150275,150284],{"__ignoreMap":22},[105,150044,150045,150047,150050],{"class":107,"line":108},[105,150046,14686],{"class":111},[105,150048,150049],{"class":1954}," Account",[105,150051,3730],{"class":115},[105,150053,150054,150056,150058],{"class":107,"line":28},[105,150055,30786],{"class":111},[105,150057,30789],{"class":164},[105,150059,150060],{"class":115},"(self, owner, balance):\n",[105,150062,150063,150065,150068,150070],{"class":107,"line":1171},[105,150064,30830],{"class":164},[105,150066,150067],{"class":115},".owner ",[105,150069,161],{"class":111},[105,150071,150072],{"class":115}," owner\n",[105,150074,150075,150077,150080,150082],{"class":107,"line":1186},[105,150076,30830],{"class":164},[105,150078,150079],{"class":115},".__balance ",[105,150081,161],{"class":111},[105,150083,150084],{"class":115}," balance\n",[105,150086,150087],{"class":107,"line":1192},[105,150088,2391],{"emptyLinePlaceholder":32},[105,150090,150091,150093,150096],{"class":107,"line":1206},[105,150092,30786],{"class":111},[105,150094,150095],{"class":1954}," get_balance",[105,150097,30792],{"class":115},[105,150099,150100,150102,150104],{"class":107,"line":1212},[105,150101,14744],{"class":111},[105,150103,38858],{"class":164},[105,150105,150106],{"class":115},".__balance\n",[105,150108,150109],{"class":107,"line":1303},[105,150110,2391],{"emptyLinePlaceholder":32},[105,150112,150113,150115,150118],{"class":107,"line":1309},[105,150114,30786],{"class":111},[105,150116,150117],{"class":1954}," deposit",[105,150119,150120],{"class":115},"(self, money):\n",[105,150122,150123,150125,150128,150130,150132],{"class":107,"line":1321},[105,150124,2488],{"class":111},[105,150126,150127],{"class":115}," money ",[105,150129,1579],{"class":111},[105,150131,4084],{"class":164},[105,150133,3730],{"class":115},[105,150135,150136,150138,150140,150143],{"class":107,"line":1603},[105,150137,34635],{"class":164},[105,150139,116],{"class":115},[105,150141,150142],{"class":220},"\"存款金额必须大于0\"",[105,150144,122],{"class":115},[105,150146,150147],{"class":107,"line":1608},[105,150148,150149],{"class":111},"            return\n",[105,150151,150152,150154,150156,150158],{"class":107,"line":1614},[105,150153,30830],{"class":164},[105,150155,150079],{"class":115},[105,150157,9469],{"class":111},[105,150159,150160],{"class":115}," money\n",[105,150162,150163],{"class":107,"line":1619},[105,150164,2391],{"emptyLinePlaceholder":32},[105,150166,150167,150169,150172],{"class":107,"line":1633},[105,150168,30786],{"class":111},[105,150170,150171],{"class":1954}," withdraw",[105,150173,150120],{"class":115},[105,150175,150176,150178,150180,150182,150184],{"class":107,"line":1638},[105,150177,2488],{"class":111},[105,150179,150127],{"class":115},[105,150181,1579],{"class":111},[105,150183,4084],{"class":164},[105,150185,3730],{"class":115},[105,150187,150188,150190,150192,150195],{"class":107,"line":1644},[105,150189,34635],{"class":164},[105,150191,116],{"class":115},[105,150193,150194],{"class":220},"\"取款金额必须大于0\"",[105,150196,122],{"class":115},[105,150198,150199],{"class":107,"line":1665},[105,150200,150149],{"class":111},[105,150202,150203,150205,150207,150209,150211],{"class":107,"line":1670},[105,150204,2488],{"class":111},[105,150206,150127],{"class":115},[105,150208,1076],{"class":111},[105,150210,38858],{"class":164},[105,150212,150213],{"class":115},".__balance:\n",[105,150215,150216,150218,150220,150223],{"class":107,"line":1684},[105,150217,34635],{"class":164},[105,150219,116],{"class":115},[105,150221,150222],{"class":220},"\"余额不足\"",[105,150224,122],{"class":115},[105,150226,150227],{"class":107,"line":1689},[105,150228,150149],{"class":111},[105,150230,150231,150233,150235,150238],{"class":107,"line":1718},[105,150232,30830],{"class":164},[105,150234,150079],{"class":115},[105,150236,150237],{"class":111},"-=",[105,150239,150160],{"class":115},[105,150241,150242],{"class":107,"line":1723},[105,150243,2391],{"emptyLinePlaceholder":32},[105,150245,150246],{"class":107,"line":1740},[105,150247,2391],{"emptyLinePlaceholder":32},[105,150249,150250,150253,150255,150258,150260,150262,150264],{"class":107,"line":1745},[105,150251,150252],{"class":115},"account ",[105,150254,161],{"class":111},[105,150256,150257],{"class":115}," Account(",[105,150259,149873],{"class":220},[105,150261,12427],{"class":115},[105,150263,6402],{"class":164},[105,150265,122],{"class":115},[105,150267,150268,150271,150273],{"class":107,"line":1750},[105,150269,150270],{"class":115},"account.deposit(",[105,150272,1713],{"class":164},[105,150274,122],{"class":115},[105,150276,150277,150280,150282],{"class":107,"line":1755},[105,150278,150279],{"class":115},"account.withdraw(",[105,150281,427],{"class":164},[105,150283,122],{"class":115},[105,150285,150286,150288],{"class":107,"line":1769},[105,150287,30400],{"class":164},[105,150289,150290],{"class":115},"(account.get_balance())\n",[14,150292,150293],{},"封装的意义是避免外部随意修改内部状态。",[47,150295,150297],{"id":150296},"_118-继承","11.8 继承",[14,150299,150300],{},"继承可以让子类复用父类的属性和方法。",[96,150302,150304],{"className":30363,"code":150303,"language":30365,"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",[102,150305,150306,150315,150324,150335,150339,150343,150357,150366,150377,150381,150385,150395,150400],{"__ignoreMap":22},[105,150307,150308,150310,150313],{"class":107,"line":108},[105,150309,14686],{"class":111},[105,150311,150312],{"class":1954}," Animal",[105,150314,3730],{"class":115},[105,150316,150317,150319,150322],{"class":107,"line":28},[105,150318,30786],{"class":111},[105,150320,150321],{"class":1954}," eat",[105,150323,30792],{"class":115},[105,150325,150326,150328,150330,150333],{"class":107,"line":1171},[105,150327,32436],{"class":164},[105,150329,116],{"class":115},[105,150331,150332],{"class":220},"\"吃东西\"",[105,150334,122],{"class":115},[105,150336,150337],{"class":107,"line":1186},[105,150338,2391],{"emptyLinePlaceholder":32},[105,150340,150341],{"class":107,"line":1192},[105,150342,2391],{"emptyLinePlaceholder":32},[105,150344,150345,150347,150350,150352,150355],{"class":107,"line":1206},[105,150346,14686],{"class":111},[105,150348,150349],{"class":1954}," Dog",[105,150351,116],{"class":115},[105,150353,150354],{"class":1954},"Animal",[105,150356,30771],{"class":115},[105,150358,150359,150361,150364],{"class":107,"line":1212},[105,150360,30786],{"class":111},[105,150362,150363],{"class":1954}," bark",[105,150365,30792],{"class":115},[105,150367,150368,150370,150372,150375],{"class":107,"line":1303},[105,150369,32436],{"class":164},[105,150371,116],{"class":115},[105,150373,150374],{"class":220},"\"汪汪\"",[105,150376,122],{"class":115},[105,150378,150379],{"class":107,"line":1309},[105,150380,2391],{"emptyLinePlaceholder":32},[105,150382,150383],{"class":107,"line":1321},[105,150384,2391],{"emptyLinePlaceholder":32},[105,150386,150387,150390,150392],{"class":107,"line":1603},[105,150388,150389],{"class":115},"dog ",[105,150391,161],{"class":111},[105,150393,150394],{"class":115}," Dog()\n",[105,150396,150397],{"class":107,"line":1608},[105,150398,150399],{"class":115},"dog.eat()\n",[105,150401,150402],{"class":107,"line":1614},[105,150403,150404],{"class":115},"dog.bark()\n",[14,150406,150407],{},"子类可以扩展新方法，也可以重写父类方法。",[47,150409,150411],{"id":150410},"_119-方法重写","11.9 方法重写",[96,150413,150415],{"className":30363,"code":150414,"language":30365,"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",[102,150416,150417,150425,150434,150445,150449,150453,150465,150473,150483,150487,150491,150504,150512,150523,150527,150531,150539,150549,150553,150558],{"__ignoreMap":22},[105,150418,150419,150421,150423],{"class":107,"line":108},[105,150420,14686],{"class":111},[105,150422,150312],{"class":1954},[105,150424,3730],{"class":115},[105,150426,150427,150429,150432],{"class":107,"line":28},[105,150428,30786],{"class":111},[105,150430,150431],{"class":1954}," speak",[105,150433,30792],{"class":115},[105,150435,150436,150438,150440,150443],{"class":107,"line":1171},[105,150437,32436],{"class":164},[105,150439,116],{"class":115},[105,150441,150442],{"class":220},"\"动物叫\"",[105,150444,122],{"class":115},[105,150446,150447],{"class":107,"line":1186},[105,150448,2391],{"emptyLinePlaceholder":32},[105,150450,150451],{"class":107,"line":1192},[105,150452,2391],{"emptyLinePlaceholder":32},[105,150454,150455,150457,150459,150461,150463],{"class":107,"line":1206},[105,150456,14686],{"class":111},[105,150458,150349],{"class":1954},[105,150460,116],{"class":115},[105,150462,150354],{"class":1954},[105,150464,30771],{"class":115},[105,150466,150467,150469,150471],{"class":107,"line":1212},[105,150468,30786],{"class":111},[105,150470,150431],{"class":1954},[105,150472,30792],{"class":115},[105,150474,150475,150477,150479,150481],{"class":107,"line":1303},[105,150476,32436],{"class":164},[105,150478,116],{"class":115},[105,150480,150374],{"class":220},[105,150482,122],{"class":115},[105,150484,150485],{"class":107,"line":1309},[105,150486,2391],{"emptyLinePlaceholder":32},[105,150488,150489],{"class":107,"line":1321},[105,150490,2391],{"emptyLinePlaceholder":32},[105,150492,150493,150495,150498,150500,150502],{"class":107,"line":1603},[105,150494,14686],{"class":111},[105,150496,150497],{"class":1954}," Cat",[105,150499,116],{"class":115},[105,150501,150354],{"class":1954},[105,150503,30771],{"class":115},[105,150505,150506,150508,150510],{"class":107,"line":1608},[105,150507,30786],{"class":111},[105,150509,150431],{"class":1954},[105,150511,30792],{"class":115},[105,150513,150514,150516,150518,150521],{"class":107,"line":1614},[105,150515,32436],{"class":164},[105,150517,116],{"class":115},[105,150519,150520],{"class":220},"\"喵喵\"",[105,150522,122],{"class":115},[105,150524,150525],{"class":107,"line":1619},[105,150526,2391],{"emptyLinePlaceholder":32},[105,150528,150529],{"class":107,"line":1633},[105,150530,2391],{"emptyLinePlaceholder":32},[105,150532,150533,150535,150537],{"class":107,"line":1638},[105,150534,150389],{"class":115},[105,150536,161],{"class":111},[105,150538,150394],{"class":115},[105,150540,150541,150544,150546],{"class":107,"line":1644},[105,150542,150543],{"class":115},"cat ",[105,150545,161],{"class":111},[105,150547,150548],{"class":115}," Cat()\n",[105,150550,150551],{"class":107,"line":1665},[105,150552,2391],{"emptyLinePlaceholder":32},[105,150554,150555],{"class":107,"line":1670},[105,150556,150557],{"class":115},"dog.speak()\n",[105,150559,150560],{"class":107,"line":1684},[105,150561,150562],{"class":115},"cat.speak()\n",[47,150564,150566],{"id":150565},"_1110-super","11.10 super",[14,150568,150569,150570,150573],{},"子类可以通过 ",[102,150571,150572],{},"super()"," 调用父类方法。",[96,150575,150577],{"className":30363,"code":150576,"language":30365,"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",[102,150578,150579,150587,150596,150606,150610,150614,150626,150635,150646,150656,150660,150664,150680],{"__ignoreMap":22},[105,150580,150581,150583,150585],{"class":107,"line":108},[105,150582,14686],{"class":111},[105,150584,15561],{"class":1954},[105,150586,3730],{"class":115},[105,150588,150589,150591,150593],{"class":107,"line":28},[105,150590,30786],{"class":111},[105,150592,30789],{"class":164},[105,150594,150595],{"class":115},"(self, name):\n",[105,150597,150598,150600,150602,150604],{"class":107,"line":1171},[105,150599,30830],{"class":164},[105,150601,149775],{"class":115},[105,150603,161],{"class":111},[105,150605,149780],{"class":115},[105,150607,150608],{"class":107,"line":1186},[105,150609,2391],{"emptyLinePlaceholder":32},[105,150611,150612],{"class":107,"line":1192},[105,150613,2391],{"emptyLinePlaceholder":32},[105,150615,150616,150618,150620,150622,150624],{"class":107,"line":1206},[105,150617,14686],{"class":111},[105,150619,7890],{"class":1954},[105,150621,116],{"class":115},[105,150623,19038],{"class":1954},[105,150625,30771],{"class":115},[105,150627,150628,150630,150632],{"class":107,"line":1212},[105,150629,30786],{"class":111},[105,150631,30789],{"class":164},[105,150633,150634],{"class":115},"(self, name, score):\n",[105,150636,150637,150639,150641,150643],{"class":107,"line":1303},[105,150638,30802],{"class":164},[105,150640,17253],{"class":115},[105,150642,30814],{"class":164},[105,150644,150645],{"class":115},"(name)\n",[105,150647,150648,150650,150652,150654],{"class":107,"line":1309},[105,150649,30830],{"class":164},[105,150651,149799],{"class":115},[105,150653,161],{"class":111},[105,150655,1570],{"class":115},[105,150657,150658],{"class":107,"line":1321},[105,150659,2391],{"emptyLinePlaceholder":32},[105,150661,150662],{"class":107,"line":1603},[105,150663,2391],{"emptyLinePlaceholder":32},[105,150665,150666,150668,150670,150672,150674,150676,150678],{"class":107,"line":1608},[105,150667,149466],{"class":115},[105,150669,161],{"class":111},[105,150671,149870],{"class":115},[105,150673,149873],{"class":220},[105,150675,12427],{"class":115},[105,150677,1105],{"class":164},[105,150679,122],{"class":115},[105,150681,150682,150684],{"class":107,"line":1614},[105,150683,30400],{"class":164},[105,150685,150686],{"class":115},"(student.name, student.score)\n",[47,150688,150690],{"id":150689},"_1111-多态","11.11 多态",[14,150692,150693],{},"多态指不同对象响应同一个方法，表现出不同结果。",[96,150695,150697],{"className":30363,"code":150696,"language":30365,"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",[102,150698,150699,150707,150715,150725,150729,150733,150741,150749,150759,150763,150767,150777,150782,150786,150790,150795],{"__ignoreMap":22},[105,150700,150701,150703,150705],{"class":107,"line":108},[105,150702,14686],{"class":111},[105,150704,150349],{"class":1954},[105,150706,3730],{"class":115},[105,150708,150709,150711,150713],{"class":107,"line":28},[105,150710,30786],{"class":111},[105,150712,150431],{"class":1954},[105,150714,30792],{"class":115},[105,150716,150717,150719,150721,150723],{"class":107,"line":1171},[105,150718,32436],{"class":164},[105,150720,116],{"class":115},[105,150722,150374],{"class":220},[105,150724,122],{"class":115},[105,150726,150727],{"class":107,"line":1186},[105,150728,2391],{"emptyLinePlaceholder":32},[105,150730,150731],{"class":107,"line":1192},[105,150732,2391],{"emptyLinePlaceholder":32},[105,150734,150735,150737,150739],{"class":107,"line":1206},[105,150736,14686],{"class":111},[105,150738,150497],{"class":1954},[105,150740,3730],{"class":115},[105,150742,150743,150745,150747],{"class":107,"line":1212},[105,150744,30786],{"class":111},[105,150746,150431],{"class":1954},[105,150748,30792],{"class":115},[105,150750,150751,150753,150755,150757],{"class":107,"line":1303},[105,150752,32436],{"class":164},[105,150754,116],{"class":115},[105,150756,150520],{"class":220},[105,150758,122],{"class":115},[105,150760,150761],{"class":107,"line":1309},[105,150762,2391],{"emptyLinePlaceholder":32},[105,150764,150765],{"class":107,"line":1321},[105,150766,2391],{"emptyLinePlaceholder":32},[105,150768,150769,150771,150774],{"class":107,"line":1603},[105,150770,31932],{"class":111},[105,150772,150773],{"class":1954}," make_sound",[105,150775,150776],{"class":115},"(animal):\n",[105,150778,150779],{"class":107,"line":1608},[105,150780,150781],{"class":115},"    animal.speak()\n",[105,150783,150784],{"class":107,"line":1614},[105,150785,2391],{"emptyLinePlaceholder":32},[105,150787,150788],{"class":107,"line":1619},[105,150789,2391],{"emptyLinePlaceholder":32},[105,150791,150792],{"class":107,"line":1633},[105,150793,150794],{"class":115},"make_sound(Dog())\n",[105,150796,150797],{"class":107,"line":1638},[105,150798,150799],{"class":115},"make_sound(Cat())\n",[14,150801,150802],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[47,150804,150806],{"id":150805},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150808,150809],{},"实例属性属于对象：",[96,150811,150813],{"className":30363,"code":150812,"language":30365,"meta":22,"style":22},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[102,150814,150815,150823,150831],{"__ignoreMap":22},[105,150816,150817,150819,150821],{"class":107,"line":108},[105,150818,14686],{"class":111},[105,150820,7890],{"class":1954},[105,150822,3730],{"class":115},[105,150824,150825,150827,150829],{"class":107,"line":28},[105,150826,30786],{"class":111},[105,150828,30789],{"class":164},[105,150830,150595],{"class":115},[105,150832,150833,150835,150837,150839],{"class":107,"line":1171},[105,150834,30830],{"class":164},[105,150836,149775],{"class":115},[105,150838,161],{"class":111},[105,150840,149780],{"class":115},[14,150842,150843],{},"类属性属于类，所有对象共享：",[96,150845,150847],{"className":30363,"code":150846,"language":30365,"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",[102,150848,150849,150857,150867,150871,150879,150889,150893,150897,150910,150924,150928,150935,150942],{"__ignoreMap":22},[105,150850,150851,150853,150855],{"class":107,"line":108},[105,150852,14686],{"class":111},[105,150854,7890],{"class":1954},[105,150856,3730],{"class":115},[105,150858,150859,150862,150864],{"class":107,"line":28},[105,150860,150861],{"class":115},"    school ",[105,150863,161],{"class":111},[105,150865,150866],{"class":220}," \"黑马学校\"\n",[105,150868,150869],{"class":107,"line":1171},[105,150870,2391],{"emptyLinePlaceholder":32},[105,150872,150873,150875,150877],{"class":107,"line":1186},[105,150874,30786],{"class":111},[105,150876,30789],{"class":164},[105,150878,150595],{"class":115},[105,150880,150881,150883,150885,150887],{"class":107,"line":1192},[105,150882,30830],{"class":164},[105,150884,149775],{"class":115},[105,150886,161],{"class":111},[105,150888,149780],{"class":115},[105,150890,150891],{"class":107,"line":1206},[105,150892,2391],{"emptyLinePlaceholder":32},[105,150894,150895],{"class":107,"line":1212},[105,150896,2391],{"emptyLinePlaceholder":32},[105,150898,150899,150902,150904,150906,150908],{"class":107,"line":1303},[105,150900,150901],{"class":115},"s1 ",[105,150903,161],{"class":111},[105,150905,149870],{"class":115},[105,150907,149873],{"class":220},[105,150909,122],{"class":115},[105,150911,150912,150915,150917,150919,150922],{"class":107,"line":1309},[105,150913,150914],{"class":115},"s2 ",[105,150916,161],{"class":111},[105,150918,149870],{"class":115},[105,150920,150921],{"class":220},"\"小红\"",[105,150923,122],{"class":115},[105,150925,150926],{"class":107,"line":1321},[105,150927,2391],{"emptyLinePlaceholder":32},[105,150929,150930,150932],{"class":107,"line":1603},[105,150931,30400],{"class":164},[105,150933,150934],{"class":115},"(s1.school)\n",[105,150936,150937,150939],{"class":107,"line":1608},[105,150938,30400],{"class":164},[105,150940,150941],{"class":115},"(s2.school)\n",[105,150943,150944,150946],{"class":107,"line":1614},[105,150945,30400],{"class":164},[105,150947,150948],{"class":115},"(Student.school)\n",[14,150950,150951],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[47,150953,150955],{"id":150954},"_1113-类方法和静态方法","11.13 类方法和静态方法",[76,150957,150959],{"id":150958},"_11131-类方法","11.13.1 类方法",[14,150961,150962,150963,150966,150967,28370],{},"类方法使用 ",[102,150964,150965],{},"@classmethod","，第一个参数通常是 ",[102,150968,150969],{},"cls",[96,150971,150973],{"className":30363,"code":150972,"language":30365,"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",[102,150974,150975,150983,150991,150995,151003,151013,151023,151027,151031],{"__ignoreMap":22},[105,150976,150977,150979,150981],{"class":107,"line":108},[105,150978,14686],{"class":111},[105,150980,7890],{"class":1954},[105,150982,3730],{"class":115},[105,150984,150985,150987,150989],{"class":107,"line":28},[105,150986,150861],{"class":115},[105,150988,161],{"class":111},[105,150990,150866],{"class":220},[105,150992,150993],{"class":107,"line":1171},[105,150994,2391],{"emptyLinePlaceholder":32},[105,150996,150997,151000],{"class":107,"line":1186},[105,150998,150999],{"class":1954},"    @",[105,151001,151002],{"class":164},"classmethod\n",[105,151004,151005,151007,151010],{"class":107,"line":1192},[105,151006,30786],{"class":111},[105,151008,151009],{"class":1954}," get_school",[105,151011,151012],{"class":115},"(cls):\n",[105,151014,151015,151017,151020],{"class":107,"line":1206},[105,151016,14744],{"class":111},[105,151018,151019],{"class":164}," cls",[105,151021,151022],{"class":115},".school\n",[105,151024,151025],{"class":107,"line":1212},[105,151026,2391],{"emptyLinePlaceholder":32},[105,151028,151029],{"class":107,"line":1303},[105,151030,2391],{"emptyLinePlaceholder":32},[105,151032,151033,151035],{"class":107,"line":1309},[105,151034,30400],{"class":164},[105,151036,151037],{"class":115},"(Student.get_school())\n",[76,151039,151041],{"id":151040},"_11132-静态方法","11.13.2 静态方法",[14,151043,151044,151045,151048],{},"静态方法使用 ",[102,151046,151047],{},"@staticmethod","，不需要访问实例和类。",[96,151050,151052],{"className":30363,"code":151051,"language":30365,"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",[102,151053,151054,151063,151070,151079,151090,151094,151098],{"__ignoreMap":22},[105,151055,151056,151058,151061],{"class":107,"line":108},[105,151057,14686],{"class":111},[105,151059,151060],{"class":1954}," MathUtils",[105,151062,3730],{"class":115},[105,151064,151065,151067],{"class":107,"line":28},[105,151066,150999],{"class":1954},[105,151068,151069],{"class":164},"staticmethod\n",[105,151071,151072,151074,151076],{"class":107,"line":1171},[105,151073,30786],{"class":111},[105,151075,5201],{"class":1954},[105,151077,151078],{"class":115},"(a, b):\n",[105,151080,151081,151083,151085,151087],{"class":107,"line":1186},[105,151082,14744],{"class":111},[105,151084,10861],{"class":115},[105,151086,597],{"class":111},[105,151088,151089],{"class":115}," b\n",[105,151091,151092],{"class":107,"line":1192},[105,151093,2391],{"emptyLinePlaceholder":32},[105,151095,151096],{"class":107,"line":1206},[105,151097,2391],{"emptyLinePlaceholder":32},[105,151099,151100,151102,151105,151107,151109,151111],{"class":107,"line":1212},[105,151101,30400],{"class":164},[105,151103,151104],{"class":115},"(MathUtils.add(",[105,151106,333],{"class":164},[105,151108,12427],{"class":115},[105,151110,193],{"class":164},[105,151112,30482],{"class":115},[14,151114,151115],{},"静态方法本质上是放在类命名空间里的普通函数。",[47,151117,151119],{"id":151118},"_1114-dataclass","11.14 dataclass",[14,151121,151122,151125],{},[102,151123,151124],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[96,151127,151129],{"className":30363,"code":151128,"language":30365,"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",[102,151130,151131,151143,151147,151151,151156,151164,151172,151180,151188,151192,151196,151216],{"__ignoreMap":22},[105,151132,151133,151135,151138,151140],{"class":107,"line":108},[105,151134,30722],{"class":111},[105,151136,151137],{"class":115}," dataclasses ",[105,151139,30377],{"class":111},[105,151141,151142],{"class":115}," dataclass\n",[105,151144,151145],{"class":107,"line":28},[105,151146,2391],{"emptyLinePlaceholder":32},[105,151148,151149],{"class":107,"line":1171},[105,151150,2391],{"emptyLinePlaceholder":32},[105,151152,151153],{"class":107,"line":1186},[105,151154,151155],{"class":1954},"@dataclass\n",[105,151157,151158,151160,151162],{"class":107,"line":1192},[105,151159,14686],{"class":111},[105,151161,7890],{"class":1954},[105,151163,3730],{"class":115},[105,151165,151166,151169],{"class":107,"line":1206},[105,151167,151168],{"class":115},"    name: ",[105,151170,151171],{"class":164},"str\n",[105,151173,151174,151177],{"class":107,"line":1212},[105,151175,151176],{"class":115},"    age: ",[105,151178,151179],{"class":164},"int\n",[105,151181,151182,151185],{"class":107,"line":1303},[105,151183,151184],{"class":115},"    score: ",[105,151186,151187],{"class":164},"float\n",[105,151189,151190],{"class":107,"line":1309},[105,151191,2391],{"emptyLinePlaceholder":32},[105,151193,151194],{"class":107,"line":1321},[105,151195,2391],{"emptyLinePlaceholder":32},[105,151197,151198,151200,151202,151204,151206,151208,151210,151212,151214],{"class":107,"line":1603},[105,151199,149466],{"class":115},[105,151201,161],{"class":111},[105,151203,149870],{"class":115},[105,151205,149873],{"class":220},[105,151207,12427],{"class":115},[105,151209,766],{"class":164},[105,151211,12427],{"class":115},[105,151213,1105],{"class":164},[105,151215,122],{"class":115},[105,151217,151218,151220],{"class":107,"line":1608},[105,151219,30400],{"class":164},[105,151221,150027],{"class":115},[14,151223,151224,151225,328,151227,151230],{},"它会自动生成 ",[102,151226,30814],{},[102,151228,151229],{},"__repr__"," 等方法。适合数据模型类。",[47,151232,151234],{"id":151233},"_1115-小案例学生类","11.15 小案例：学生类",[96,151236,151238],{"className":30363,"code":151237,"language":30365,"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",[102,151239,151240,151248,151257,151269,151279,151289,151299,151303,151312,151325,151329,151338,151344,151356,151368,151380,151392,151396,151400,151406,151416,151425,151435,151443,151451,151460,151464,151468,151476,151512,151516,151520,151545,151552],{"__ignoreMap":22},[105,151241,151242,151244,151246],{"class":107,"line":108},[105,151243,14686],{"class":111},[105,151245,7890],{"class":1954},[105,151247,3730],{"class":115},[105,151249,151250,151252,151254],{"class":107,"line":28},[105,151251,30786],{"class":111},[105,151253,30789],{"class":164},[105,151255,151256],{"class":115},"(self, student_id, name, age, score):\n",[105,151258,151259,151261,151264,151266],{"class":107,"line":1171},[105,151260,30830],{"class":164},[105,151262,151263],{"class":115},".student_id ",[105,151265,161],{"class":111},[105,151267,151268],{"class":115}," student_id\n",[105,151270,151271,151273,151275,151277],{"class":107,"line":1186},[105,151272,30830],{"class":164},[105,151274,149775],{"class":115},[105,151276,161],{"class":111},[105,151278,149780],{"class":115},[105,151280,151281,151283,151285,151287],{"class":107,"line":1192},[105,151282,30830],{"class":164},[105,151284,149787],{"class":115},[105,151286,161],{"class":111},[105,151288,149792],{"class":115},[105,151290,151291,151293,151295,151297],{"class":107,"line":1206},[105,151292,30830],{"class":164},[105,151294,149799],{"class":115},[105,151296,161],{"class":111},[105,151298,1570],{"class":115},[105,151300,151301],{"class":107,"line":1212},[105,151302,2391],{"emptyLinePlaceholder":32},[105,151304,151305,151307,151310],{"class":107,"line":1303},[105,151306,30786],{"class":111},[105,151308,151309],{"class":1954}," is_passed",[105,151311,30792],{"class":115},[105,151313,151314,151316,151318,151320,151322],{"class":107,"line":1309},[105,151315,14744],{"class":111},[105,151317,38858],{"class":164},[105,151319,149799],{"class":115},[105,151321,1701],{"class":111},[105,151323,151324],{"class":164}," 60\n",[105,151326,151327],{"class":107,"line":1321},[105,151328,2391],{"emptyLinePlaceholder":32},[105,151330,151331,151333,151336],{"class":107,"line":1603},[105,151332,30786],{"class":111},[105,151334,151335],{"class":1954}," to_dict",[105,151337,30792],{"class":115},[105,151339,151340,151342],{"class":107,"line":1608},[105,151341,14744],{"class":111},[105,151343,15564],{"class":115},[105,151345,151346,151349,151351,151353],{"class":107,"line":1614},[105,151347,151348],{"class":220},"            \"student_id\"",[105,151350,51422],{"class":115},[105,151352,30808],{"class":164},[105,151354,151355],{"class":115},".student_id,\n",[105,151357,151358,151361,151363,151365],{"class":107,"line":1619},[105,151359,151360],{"class":220},"            \"name\"",[105,151362,51422],{"class":115},[105,151364,30808],{"class":164},[105,151366,151367],{"class":115},".name,\n",[105,151369,151370,151373,151375,151377],{"class":107,"line":1633},[105,151371,151372],{"class":220},"            \"age\"",[105,151374,51422],{"class":115},[105,151376,30808],{"class":164},[105,151378,151379],{"class":115},".age,\n",[105,151381,151382,151385,151387,151389],{"class":107,"line":1638},[105,151383,151384],{"class":220},"            \"score\"",[105,151386,51422],{"class":115},[105,151388,30808],{"class":164},[105,151390,151391],{"class":115},".score,\n",[105,151393,151394],{"class":107,"line":1644},[105,151395,2520],{"class":115},[105,151397,151398],{"class":107,"line":1665},[105,151399,2391],{"emptyLinePlaceholder":32},[105,151401,151402,151404],{"class":107,"line":1670},[105,151403,150999],{"class":1954},[105,151405,151002],{"class":164},[105,151407,151408,151410,151413],{"class":107,"line":1684},[105,151409,30786],{"class":111},[105,151411,151412],{"class":1954}," from_dict",[105,151414,151415],{"class":115},"(cls, data):\n",[105,151417,151418,151420,151422],{"class":107,"line":1689},[105,151419,14744],{"class":111},[105,151421,151019],{"class":164},[105,151423,151424],{"class":115},"(\n",[105,151426,151427,151430,151433],{"class":107,"line":1718},[105,151428,151429],{"class":115},"            data[",[105,151431,151432],{"class":220},"\"student_id\"",[105,151434,87821],{"class":115},[105,151436,151437,151439,151441],{"class":107,"line":1723},[105,151438,151429],{"class":115},[105,151440,62664],{"class":220},[105,151442,87821],{"class":115},[105,151444,151445,151447,151449],{"class":107,"line":1740},[105,151446,151429],{"class":115},[105,151448,69109],{"class":220},[105,151450,87821],{"class":115},[105,151452,151453,151455,151458],{"class":107,"line":1745},[105,151454,151429],{"class":115},[105,151456,151457],{"class":220},"\"score\"",[105,151459,87821],{"class":115},[105,151461,151462],{"class":107,"line":1750},[105,151463,38111],{"class":115},[105,151465,151466],{"class":107,"line":1755},[105,151467,2391],{"emptyLinePlaceholder":32},[105,151469,151470,151472,151474],{"class":107,"line":1769},[105,151471,30786],{"class":111},[105,151473,149966],{"class":164},[105,151475,30792],{"class":115},[105,151477,151478,151480,151482,151484,151486,151489,151491,151494,151496,151498,151500,151502,151504,151506,151508,151510],{"class":107,"line":1774},[105,151479,14744],{"class":111},[105,151481,149975],{"class":111},[105,151483,367],{"class":220},[105,151485,149437],{"class":164},[105,151487,151488],{"class":115},".student_id",[105,151490,1062],{"class":164},[105,151492,151493],{"class":164}," {self",[105,151495,80286],{"class":115},[105,151497,1062],{"class":164},[105,151499,151493],{"class":164},[105,151501,80298],{"class":115},[105,151503,1062],{"class":164},[105,151505,151493],{"class":164},[105,151507,149847],{"class":115},[105,151509,1062],{"class":164},[105,151511,25118],{"class":220},[105,151513,151514],{"class":107,"line":2568},[105,151515,2391],{"emptyLinePlaceholder":32},[105,151517,151518],{"class":107,"line":2582},[105,151519,2391],{"emptyLinePlaceholder":32},[105,151521,151522,151524,151526,151528,151531,151533,151535,151537,151539,151541,151543],{"class":107,"line":2590},[105,151523,149466],{"class":115},[105,151525,161],{"class":111},[105,151527,149870],{"class":115},[105,151529,151530],{"class":220},"\"001\"",[105,151532,12427],{"class":115},[105,151534,149873],{"class":220},[105,151536,12427],{"class":115},[105,151538,766],{"class":164},[105,151540,12427],{"class":115},[105,151542,1105],{"class":164},[105,151544,122],{"class":115},[105,151546,151547,151549],{"class":107,"line":2595},[105,151548,30400],{"class":164},[105,151550,151551],{"class":115},"(student.is_passed())\n",[105,151553,151554,151556],{"class":107,"line":2601},[105,151555,30400],{"class":164},[105,151557,151558],{"class":115},"(student.to_dict())\n",[14,151560,151561,101003,151564,151567],{},[102,151562,151563],{},"to_dict()",[102,151565,151566],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[47,151569,151571],{"id":151570},"_1116-易错点","11.16 易错点",[59,151573,151574,151580,151586,151591,151594,151597],{},[62,151575,151576,151577,28370],{},"类名推荐使用大驼峰，如 ",[102,151578,151579],{},"StudentManager",[62,151581,151582,151583,151585],{},"方法第一个参数必须写 ",[102,151584,30808],{},"，调用时不用传。",[62,151587,151588,151590],{},[102,151589,30814],{}," 不是普通方法，它在创建对象时自动执行。",[62,151592,151593],{},"私有属性不是绝对安全，只是约定和名称改写。",[62,151595,151596],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[62,151598,151599],{},"类中方法太多时，说明职责可能过重。",[47,151601,151603],{"id":151602},"_1117-本章练习","11.17 本章练习",[59,151605,151606,151612,151618,151623,151636],{},[62,151607,151608,151609,151611],{},"定义 ",[102,151610,149553],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[62,151613,151608,151614,151617],{},[102,151615,151616],{},"Account"," 类，实现存款、取款、查询余额。",[62,151619,151608,151620,151622],{},[102,151621,17218],{}," 类，计算圆的周长和面积。",[62,151624,151608,151625,328,151628,151631,151632,151635],{},[102,151626,151627],{},"Dog",[102,151629,151630],{},"Cat"," 类，并用同一个函数调用它们的 ",[102,151633,151634],{},"speak()"," 方法。",[62,151637,104351,151638,151640,151641,28370],{},[102,151639,151124],{}," 定义一个商品类 ",[102,151642,151643],{},"Product",[5118,151645,151646],{},"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":28,"depth":28,"links":151648},[151649,151650,151651,151652,151653,151654,151656,151657,151658,151659,151660,151661,151662,151666,151667,151668,151669],{"id":149317,"depth":28,"text":149318},{"id":149500,"depth":28,"text":149501},{"id":149564,"depth":28,"text":149565},{"id":149641,"depth":28,"text":149642},{"id":149740,"depth":28,"text":149741},{"id":149904,"depth":28,"text":151655},"11.6 str",{"id":150030,"depth":28,"text":150031},{"id":150296,"depth":28,"text":150297},{"id":150410,"depth":28,"text":150411},{"id":150565,"depth":28,"text":150566},{"id":150689,"depth":28,"text":150690},{"id":150805,"depth":28,"text":150806},{"id":150954,"depth":28,"text":150955,"children":151663},[151664,151665],{"id":150958,"depth":1171,"text":150959},{"id":151040,"depth":1171,"text":151041},{"id":151118,"depth":28,"text":151119},{"id":151233,"depth":28,"text":151234},{"id":151570,"depth":28,"text":151571},{"id":151602,"depth":28,"text":151603},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149309,"description":23369},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151676,"title":151677,"body":151678,"description":23369,"extension":30,"meta":154991,"navigation":32,"path":154992,"seo":154993,"stem":154994,"__hash__":154995},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151679,"toc":154967},[151680,151683,151687,151690,151693,151722,151725,151733,151737,151741,151744,151767,151770,151776,151780,153226,153229,153250,153254,153257,153269,153272,153456,153459,153585,153588,153592,153596,153732,153736,153822,153826,153908,153912,153949,153953,154142,154146,154149,154379,154383,154386,154567,154570,154574,154577,154583,154586,154612,154616,154619,154633,154636,154661,154664,154678,154681,154698,154701,154718,154721,154738,154742,154768,154772,154795,154799,154802,154804,154810,154812,154833,154836,154842,154848,154852,154855,154931,154934,154938,154964],[10,151681,151677],{"id":151682},"_12-综合案例与复习路线",[47,151684,151686],{"id":151685},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151688,151689],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151691,151692],{},"一个合格的入门综合项目最好覆盖：",[59,151694,151695,151698,151701,151704,151707,151710,151713,151716,151719],{},[62,151696,151697],{},"输入输出。",[62,151699,151700],{},"判断和循环。",[62,151702,151703],{},"函数拆分。",[62,151705,151706],{},"列表、字典等容器。",[62,151708,151709],{},"文件持久化。",[62,151711,151712],{},"异常处理。",[62,151714,151715],{},"模块拆分。",[62,151717,151718],{},"可选：面向对象。",[62,151720,151721],{},"可选：数据可视化。",[14,151723,151724],{},"本章整理两个方向：",[59,151726,151727,151730],{},[62,151728,151729],{},"学生管理系统。",[62,151731,151732],{},"销售数据统计和可视化。",[47,151734,151736],{"id":151735},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[76,151738,151740],{"id":151739},"_1221-需求","12.2.1 需求",[14,151742,151743],{},"实现一个命令行学生管理系统：",[59,151745,151746,151749,151752,151755,151758,151761,151764],{},[62,151747,151748],{},"添加学生。",[62,151750,151751],{},"删除学生。",[62,151753,151754],{},"修改学生。",[62,151756,151757],{},"查询学生。",[62,151759,151760],{},"显示所有学生。",[62,151762,151763],{},"保存到 JSON 文件。",[62,151765,151766],{},"程序启动时自动读取 JSON 文件。",[14,151768,151769],{},"学生字段：",[96,151771,151774],{"className":151772,"code":151773,"language":5179,"meta":22},[5177],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[102,151775,151773],{"__ignoreMap":22},[47,151777,151779],{"id":151778},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[96,151781,151783],{"className":30363,"code":151782,"language":30365,"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",[102,151784,151785,151791,151801,151805,151819,151823,151827,151836,151848,151854,151858,151864,151895,151905,151912,151923,151929,151933,151937,151947,151978,152004,152008,152012,152021,152032,152043,152054,152065,152076,152087,152098,152102,152106,152116,152128,152144,152151,152158,152162,152166,152176,152184,152191,152204,152214,152225,152229,152233,152242,152250,152256,152268,152276,152287,152291,152295,152304,152320,152324,152331,152342,152347,152351,152367,152382,152397,152401,152406,152414,152422,152430,152438,152442,152447,152458,152462,152466,152475,152490,152500,152504,152516,152527,152531,152535,152540,152544,152555,152559,152563,152572,152587,152595,152599,152611,152621,152625,152629,152644,152657,152670,152674,152687,152699,152711,152715,152719,152730,152734,152738,152747,152762,152770,152774,152786,152796,152800,152804,152809,152813,152817,152827,152833,152855,152874,152893,152912,152917,152921,152925,152934,152942,152953,152957,152961,152987,152997,153002,153006,153010,153018,153028,153032,153040,153045,153061,153065,153079,153084,153098,153103,153116,153121,153134,153139,153152,153157,153170,153181,153185,153191,153202,153206,153210,153222],{"__ignoreMap":22},[105,151786,151787,151789],{"class":107,"line":108},[105,151788,30377],{"class":111},[105,151790,147076],{"class":115},[105,151792,151793,151795,151797,151799],{"class":107,"line":28},[105,151794,30722],{"class":111},[105,151796,108296],{"class":115},[105,151798,30377],{"class":111},[105,151800,108301],{"class":115},[105,151802,151803],{"class":107,"line":1171},[105,151804,2391],{"emptyLinePlaceholder":32},[105,151806,151807,151810,151812,151814,151817],{"class":107,"line":1186},[105,151808,151809],{"class":164},"DATA_FILE",[105,151811,13556],{"class":111},[105,151813,108530],{"class":115},[105,151815,151816],{"class":220},"\"students.json\"",[105,151818,122],{"class":115},[105,151820,151821],{"class":107,"line":1192},[105,151822,2391],{"emptyLinePlaceholder":32},[105,151824,151825],{"class":107,"line":1206},[105,151826,2391],{"emptyLinePlaceholder":32},[105,151828,151829,151831,151834],{"class":107,"line":1212},[105,151830,31932],{"class":111},[105,151832,151833],{"class":1954}," load_students",[105,151835,31938],{"class":115},[105,151837,151838,151840,151842,151845],{"class":107,"line":1303},[105,151839,3092],{"class":111},[105,151841,38915],{"class":111},[105,151843,151844],{"class":164}," DATA_FILE",[105,151846,151847],{"class":115},".exists():\n",[105,151849,151850,151852],{"class":107,"line":1309},[105,151851,14744],{"class":111},[105,151853,51823],{"class":115},[105,151855,151856],{"class":107,"line":1321},[105,151857,2391],{"emptyLinePlaceholder":32},[105,151859,151860,151862],{"class":107,"line":1603},[105,151861,125769],{"class":111},[105,151863,3730],{"class":115},[105,151865,151866,151869,151871,151873,151875,151877,151879,151881,151883,151885,151887,151889,151891,151893],{"class":107,"line":1608},[105,151867,151868],{"class":111},"        with",[105,151870,146776],{"class":164},[105,151872,116],{"class":115},[105,151874,151809],{"class":164},[105,151876,12427],{"class":115},[105,151878,146786],{"class":220},[105,151880,12427],{"class":115},[105,151882,146791],{"class":5208},[105,151884,161],{"class":111},[105,151886,146796],{"class":220},[105,151888,13706],{"class":115},[105,151890,31368],{"class":111},[105,151892,148138],{"class":5208},[105,151894,3730],{"class":115},[105,151896,151897,151899,151901,151903],{"class":107,"line":1614},[105,151898,15724],{"class":111},[105,151900,148149],{"class":115},[105,151902,45339],{"class":5208},[105,151904,122],{"class":115},[105,151906,151907,151909],{"class":107,"line":1619},[105,151908,125797],{"class":111},[105,151910,151911],{"class":115}," json.JSONDecodeError:\n",[105,151913,151914,151916,151918,151921],{"class":107,"line":1633},[105,151915,32436],{"class":164},[105,151917,116],{"class":115},[105,151919,151920],{"class":220},"\"数据文件格式错误，已使用空数据启动\"",[105,151922,122],{"class":115},[105,151924,151925,151927],{"class":107,"line":1638},[105,151926,14744],{"class":111},[105,151928,51823],{"class":115},[105,151930,151931],{"class":107,"line":1644},[105,151932,2391],{"emptyLinePlaceholder":32},[105,151934,151935],{"class":107,"line":1665},[105,151936,2391],{"emptyLinePlaceholder":32},[105,151938,151939,151941,151944],{"class":107,"line":1670},[105,151940,31932],{"class":111},[105,151942,151943],{"class":1954}," save_students",[105,151945,151946],{"class":115},"(students):\n",[105,151948,151949,151951,151953,151955,151957,151959,151962,151964,151966,151968,151970,151972,151974,151976],{"class":107,"line":1684},[105,151950,34163],{"class":111},[105,151952,146776],{"class":164},[105,151954,116],{"class":115},[105,151956,151809],{"class":164},[105,151958,12427],{"class":115},[105,151960,151961],{"class":220},"\"w\"",[105,151963,12427],{"class":115},[105,151965,146791],{"class":5208},[105,151967,161],{"class":111},[105,151969,146796],{"class":220},[105,151971,13706],{"class":115},[105,151973,31368],{"class":111},[105,151975,148138],{"class":5208},[105,151977,3730],{"class":115},[105,151979,151980,151983,151985,151987,151989,151991,151993,151995,151998,152000,152002],{"class":107,"line":1689},[105,151981,151982],{"class":115},"        json.dump(students, ",[105,151984,45339],{"class":5208},[105,151986,12427],{"class":115},[105,151988,147122],{"class":5208},[105,151990,161],{"class":111},[105,151992,33972],{"class":164},[105,151994,12427],{"class":115},[105,151996,151997],{"class":5208},"indent",[105,151999,161],{"class":111},[105,152001,193],{"class":164},[105,152003,122],{"class":115},[105,152005,152006],{"class":107,"line":1718},[105,152007,2391],{"emptyLinePlaceholder":32},[105,152009,152010],{"class":107,"line":1723},[105,152011,2391],{"emptyLinePlaceholder":32},[105,152013,152014,152016,152019],{"class":107,"line":1740},[105,152015,31932],{"class":111},[105,152017,152018],{"class":1954}," show_menu",[105,152020,31938],{"class":115},[105,152022,152023,152025,152027,152030],{"class":107,"line":1745},[105,152024,31284],{"class":164},[105,152026,116],{"class":115},[105,152028,152029],{"class":220},"\"====== 学生管理系统 ======\"",[105,152031,122],{"class":115},[105,152033,152034,152036,152038,152041],{"class":107,"line":1750},[105,152035,31284],{"class":164},[105,152037,116],{"class":115},[105,152039,152040],{"class":220},"\"1. 添加学生\"",[105,152042,122],{"class":115},[105,152044,152045,152047,152049,152052],{"class":107,"line":1755},[105,152046,31284],{"class":164},[105,152048,116],{"class":115},[105,152050,152051],{"class":220},"\"2. 删除学生\"",[105,152053,122],{"class":115},[105,152055,152056,152058,152060,152063],{"class":107,"line":1769},[105,152057,31284],{"class":164},[105,152059,116],{"class":115},[105,152061,152062],{"class":220},"\"3. 修改学生\"",[105,152064,122],{"class":115},[105,152066,152067,152069,152071,152074],{"class":107,"line":1774},[105,152068,31284],{"class":164},[105,152070,116],{"class":115},[105,152072,152073],{"class":220},"\"4. 查询学生\"",[105,152075,122],{"class":115},[105,152077,152078,152080,152082,152085],{"class":107,"line":2568},[105,152079,31284],{"class":164},[105,152081,116],{"class":115},[105,152083,152084],{"class":220},"\"5. 显示所有学生\"",[105,152086,122],{"class":115},[105,152088,152089,152091,152093,152096],{"class":107,"line":2582},[105,152090,31284],{"class":164},[105,152092,116],{"class":115},[105,152094,152095],{"class":220},"\"0. 退出系统\"",[105,152097,122],{"class":115},[105,152099,152100],{"class":107,"line":2590},[105,152101,2391],{"emptyLinePlaceholder":32},[105,152103,152104],{"class":107,"line":2595},[105,152105,2391],{"emptyLinePlaceholder":32},[105,152107,152108,152110,152113],{"class":107,"line":2601},[105,152109,31932],{"class":111},[105,152111,152112],{"class":1954}," find_student",[105,152114,152115],{"class":115},"(students, student_id):\n",[105,152117,152118,152120,152123,152125],{"class":107,"line":2607},[105,152119,3192],{"class":111},[105,152121,152122],{"class":115}," student ",[105,152124,26028],{"class":111},[105,152126,152127],{"class":115}," students:\n",[105,152129,152130,152132,152135,152137,152139,152141],{"class":107,"line":2612},[105,152131,2488],{"class":111},[105,152133,152134],{"class":115}," student[",[105,152136,151432],{"class":220},[105,152138,4434],{"class":115},[105,152140,2940],{"class":111},[105,152142,152143],{"class":115}," student_id:\n",[105,152145,152146,152148],{"class":107,"line":7940},[105,152147,15724],{"class":111},[105,152149,152150],{"class":115}," student\n",[105,152152,152153,152155],{"class":107,"line":7964},[105,152154,4081],{"class":111},[105,152156,152157],{"class":164}," None\n",[105,152159,152160],{"class":107,"line":7969},[105,152161,2391],{"emptyLinePlaceholder":32},[105,152163,152164],{"class":107,"line":7975},[105,152165,2391],{"emptyLinePlaceholder":32},[105,152167,152168,152170,152173],{"class":107,"line":8002},[105,152169,31932],{"class":111},[105,152171,152172],{"class":1954}," input_int",[105,152174,152175],{"class":115},"(prompt):\n",[105,152177,152178,152180,152182],{"class":107,"line":8007},[105,152179,2242],{"class":111},[105,152181,95277],{"class":164},[105,152183,3730],{"class":115},[105,152185,152186,152189],{"class":107,"line":8013},[105,152187,152188],{"class":111},"        try",[105,152190,3730],{"class":115},[105,152192,152193,152195,152197,152199,152201],{"class":107,"line":8025},[105,152194,15724],{"class":111},[105,152196,2373],{"class":164},[105,152198,116],{"class":115},[105,152200,53806],{"class":164},[105,152202,152203],{"class":115},"(prompt))\n",[105,152205,152206,152209,152212],{"class":107,"line":8037},[105,152207,152208],{"class":111},"        except",[105,152210,152211],{"class":164}," ValueError",[105,152213,3730],{"class":115},[105,152215,152216,152218,152220,152223],{"class":107,"line":8049},[105,152217,34635],{"class":164},[105,152219,116],{"class":115},[105,152221,152222],{"class":220},"\"请输入整数\"",[105,152224,122],{"class":115},[105,152226,152227],{"class":107,"line":9708},[105,152228,2391],{"emptyLinePlaceholder":32},[105,152230,152231],{"class":107,"line":9733},[105,152232,2391],{"emptyLinePlaceholder":32},[105,152234,152235,152237,152240],{"class":107,"line":9756},[105,152236,31932],{"class":111},[105,152238,152239],{"class":1954}," input_float",[105,152241,152175],{"class":115},[105,152243,152244,152246,152248],{"class":107,"line":9780},[105,152245,2242],{"class":111},[105,152247,95277],{"class":164},[105,152249,3730],{"class":115},[105,152251,152252,152254],{"class":107,"line":9785},[105,152253,152188],{"class":111},[105,152255,3730],{"class":115},[105,152257,152258,152260,152262,152264,152266],{"class":107,"line":9790},[105,152259,15724],{"class":111},[105,152261,109782],{"class":164},[105,152263,116],{"class":115},[105,152265,53806],{"class":164},[105,152267,152203],{"class":115},[105,152269,152270,152272,152274],{"class":107,"line":9795},[105,152271,152208],{"class":111},[105,152273,152211],{"class":164},[105,152275,3730],{"class":115},[105,152277,152278,152280,152282,152285],{"class":107,"line":9804},[105,152279,34635],{"class":164},[105,152281,116],{"class":115},[105,152283,152284],{"class":220},"\"请输入数字\"",[105,152286,122],{"class":115},[105,152288,152289],{"class":107,"line":9809},[105,152290,2391],{"emptyLinePlaceholder":32},[105,152292,152293],{"class":107,"line":9815},[105,152294,2391],{"emptyLinePlaceholder":32},[105,152296,152297,152299,152302],{"class":107,"line":9836},[105,152298,31932],{"class":111},[105,152300,152301],{"class":1954}," add_student",[105,152303,151946],{"class":115},[105,152305,152306,152309,152311,152313,152315,152318],{"class":107,"line":9842},[105,152307,152308],{"class":115},"    student_id ",[105,152310,161],{"class":111},[105,152312,60590],{"class":164},[105,152314,116],{"class":115},[105,152316,152317],{"class":220},"\"请输入学号:\"",[105,152319,122],{"class":115},[105,152321,152322],{"class":107,"line":9856},[105,152323,2391],{"emptyLinePlaceholder":32},[105,152325,152326,152328],{"class":107,"line":9862},[105,152327,3092],{"class":111},[105,152329,152330],{"class":115}," find_student(students, student_id):\n",[105,152332,152333,152335,152337,152340],{"class":107,"line":9889},[105,152334,32436],{"class":164},[105,152336,116],{"class":115},[105,152338,152339],{"class":220},"\"学号已存在\"",[105,152341,122],{"class":115},[105,152343,152344],{"class":107,"line":9898},[105,152345,152346],{"class":111},"        return\n",[105,152348,152349],{"class":107,"line":9904},[105,152350,2391],{"emptyLinePlaceholder":32},[105,152352,152353,152356,152358,152360,152362,152365],{"class":107,"line":9912},[105,152354,152355],{"class":115},"    name ",[105,152357,161],{"class":111},[105,152359,60590],{"class":164},[105,152361,116],{"class":115},[105,152363,152364],{"class":220},"\"请输入姓名:\"",[105,152366,122],{"class":115},[105,152368,152369,152372,152374,152377,152380],{"class":107,"line":9917},[105,152370,152371],{"class":115},"    age ",[105,152373,161],{"class":111},[105,152375,152376],{"class":115}," input_int(",[105,152378,152379],{"class":220},"\"请输入年龄:\"",[105,152381,122],{"class":115},[105,152383,152384,152387,152389,152392,152395],{"class":107,"line":16596},[105,152385,152386],{"class":115},"    score ",[105,152388,161],{"class":111},[105,152390,152391],{"class":115}," input_float(",[105,152393,152394],{"class":220},"\"请输入成绩:\"",[105,152396,122],{"class":115},[105,152398,152399],{"class":107,"line":16602},[105,152400,2391],{"emptyLinePlaceholder":32},[105,152402,152403],{"class":107,"line":16625},[105,152404,152405],{"class":115},"    students.append({\n",[105,152407,152408,152411],{"class":107,"line":16631},[105,152409,152410],{"class":220},"        \"student_id\"",[105,152412,152413],{"class":115},": student_id,\n",[105,152415,152416,152419],{"class":107,"line":16654},[105,152417,152418],{"class":220},"        \"name\"",[105,152420,152421],{"class":115},": name,\n",[105,152423,152424,152427],{"class":107,"line":16668},[105,152425,152426],{"class":220},"        \"age\"",[105,152428,152429],{"class":115},": age,\n",[105,152431,152432,152435],{"class":107,"line":16688},[105,152433,152434],{"class":220},"        \"score\"",[105,152436,152437],{"class":115},": score,\n",[105,152439,152440],{"class":107,"line":16694},[105,152441,33446],{"class":115},[105,152443,152444],{"class":107,"line":16705},[105,152445,152446],{"class":115},"    save_students(students)\n",[105,152448,152449,152451,152453,152456],{"class":107,"line":16728},[105,152450,31284],{"class":164},[105,152452,116],{"class":115},[105,152454,152455],{"class":220},"\"添加成功\"",[105,152457,122],{"class":115},[105,152459,152460],{"class":107,"line":16750},[105,152461,2391],{"emptyLinePlaceholder":32},[105,152463,152464],{"class":107,"line":16755},[105,152465,2391],{"emptyLinePlaceholder":32},[105,152467,152468,152470,152473],{"class":107,"line":16761},[105,152469,31932],{"class":111},[105,152471,152472],{"class":1954}," delete_student",[105,152474,151946],{"class":115},[105,152476,152477,152479,152481,152483,152485,152488],{"class":107,"line":16775},[105,152478,152308],{"class":115},[105,152480,161],{"class":111},[105,152482,60590],{"class":164},[105,152484,116],{"class":115},[105,152486,152487],{"class":220},"\"请输入要删除的学号:\"",[105,152489,122],{"class":115},[105,152491,152492,152495,152497],{"class":107,"line":16788},[105,152493,152494],{"class":115},"    student ",[105,152496,161],{"class":111},[105,152498,152499],{"class":115}," find_student(students, student_id)\n",[105,152501,152502],{"class":107,"line":16793},[105,152503,2391],{"emptyLinePlaceholder":32},[105,152505,152506,152508,152510,152512,152514],{"class":107,"line":16807},[105,152507,3092],{"class":111},[105,152509,152122],{"class":115},[105,152511,38912],{"class":111},[105,152513,38918],{"class":164},[105,152515,3730],{"class":115},[105,152517,152518,152520,152522,152525],{"class":107,"line":16812},[105,152519,32436],{"class":164},[105,152521,116],{"class":115},[105,152523,152524],{"class":220},"\"学生不存在\"",[105,152526,122],{"class":115},[105,152528,152529],{"class":107,"line":16818},[105,152530,152346],{"class":111},[105,152532,152533],{"class":107,"line":16823},[105,152534,2391],{"emptyLinePlaceholder":32},[105,152536,152537],{"class":107,"line":16837},[105,152538,152539],{"class":115},"    students.remove(student)\n",[105,152541,152542],{"class":107,"line":16842},[105,152543,152446],{"class":115},[105,152545,152546,152548,152550,152553],{"class":107,"line":16847},[105,152547,31284],{"class":164},[105,152549,116],{"class":115},[105,152551,152552],{"class":220},"\"删除成功\"",[105,152554,122],{"class":115},[105,152556,152557],{"class":107,"line":16861},[105,152558,2391],{"emptyLinePlaceholder":32},[105,152560,152561],{"class":107,"line":16873},[105,152562,2391],{"emptyLinePlaceholder":32},[105,152564,152565,152567,152570],{"class":107,"line":16878},[105,152566,31932],{"class":111},[105,152568,152569],{"class":1954}," update_student",[105,152571,151946],{"class":115},[105,152573,152574,152576,152578,152580,152582,152585],{"class":107,"line":16891},[105,152575,152308],{"class":115},[105,152577,161],{"class":111},[105,152579,60590],{"class":164},[105,152581,116],{"class":115},[105,152583,152584],{"class":220},"\"请输入要修改的学号:\"",[105,152586,122],{"class":115},[105,152588,152589,152591,152593],{"class":107,"line":16896},[105,152590,152494],{"class":115},[105,152592,161],{"class":111},[105,152594,152499],{"class":115},[105,152596,152597],{"class":107,"line":16901},[105,152598,2391],{"emptyLinePlaceholder":32},[105,152600,152601,152603,152605,152607,152609],{"class":107,"line":16906},[105,152602,3092],{"class":111},[105,152604,152122],{"class":115},[105,152606,38912],{"class":111},[105,152608,38918],{"class":164},[105,152610,3730],{"class":115},[105,152612,152613,152615,152617,152619],{"class":107,"line":16919},[105,152614,32436],{"class":164},[105,152616,116],{"class":115},[105,152618,152524],{"class":220},[105,152620,122],{"class":115},[105,152622,152623],{"class":107,"line":16924},[105,152624,152346],{"class":111},[105,152626,152627],{"class":107,"line":32618},[105,152628,2391],{"emptyLinePlaceholder":32},[105,152630,152631,152633,152635,152637,152639,152642],{"class":107,"line":32624},[105,152632,152355],{"class":115},[105,152634,161],{"class":111},[105,152636,60590],{"class":164},[105,152638,116],{"class":115},[105,152640,152641],{"class":220},"\"请输入新姓名:\"",[105,152643,122],{"class":115},[105,152645,152646,152648,152650,152652,152655],{"class":107,"line":32630},[105,152647,152371],{"class":115},[105,152649,161],{"class":111},[105,152651,152376],{"class":115},[105,152653,152654],{"class":220},"\"请输入新年龄:\"",[105,152656,122],{"class":115},[105,152658,152659,152661,152663,152665,152668],{"class":107,"line":32636},[105,152660,152386],{"class":115},[105,152662,161],{"class":111},[105,152664,152391],{"class":115},[105,152666,152667],{"class":220},"\"请输入新成绩:\"",[105,152669,122],{"class":115},[105,152671,152672],{"class":107,"line":32642},[105,152673,2391],{"emptyLinePlaceholder":32},[105,152675,152676,152679,152681,152683,152685],{"class":107,"line":32653},[105,152677,152678],{"class":115},"    student[",[105,152680,62664],{"class":220},[105,152682,4434],{"class":115},[105,152684,161],{"class":111},[105,152686,149780],{"class":115},[105,152688,152689,152691,152693,152695,152697],{"class":107,"line":32659},[105,152690,152678],{"class":115},[105,152692,69109],{"class":220},[105,152694,4434],{"class":115},[105,152696,161],{"class":111},[105,152698,149792],{"class":115},[105,152700,152701,152703,152705,152707,152709],{"class":107,"line":32679},[105,152702,152678],{"class":115},[105,152704,151457],{"class":220},[105,152706,4434],{"class":115},[105,152708,161],{"class":111},[105,152710,1570],{"class":115},[105,152712,152713],{"class":107,"line":32685},[105,152714,2391],{"emptyLinePlaceholder":32},[105,152716,152717],{"class":107,"line":32696},[105,152718,152446],{"class":115},[105,152720,152721,152723,152725,152728],{"class":107,"line":32702},[105,152722,31284],{"class":164},[105,152724,116],{"class":115},[105,152726,152727],{"class":220},"\"修改成功\"",[105,152729,122],{"class":115},[105,152731,152732],{"class":107,"line":32708},[105,152733,2391],{"emptyLinePlaceholder":32},[105,152735,152736],{"class":107,"line":32714},[105,152737,2391],{"emptyLinePlaceholder":32},[105,152739,152740,152742,152745],{"class":107,"line":32720},[105,152741,31932],{"class":111},[105,152743,152744],{"class":1954}," query_student",[105,152746,151946],{"class":115},[105,152748,152749,152751,152753,152755,152757,152760],{"class":107,"line":32726},[105,152750,152308],{"class":115},[105,152752,161],{"class":111},[105,152754,60590],{"class":164},[105,152756,116],{"class":115},[105,152758,152759],{"class":220},"\"请输入要查询的学号:\"",[105,152761,122],{"class":115},[105,152763,152764,152766,152768],{"class":107,"line":32732},[105,152765,152494],{"class":115},[105,152767,161],{"class":111},[105,152769,152499],{"class":115},[105,152771,152772],{"class":107,"line":32738},[105,152773,2391],{"emptyLinePlaceholder":32},[105,152775,152776,152778,152780,152782,152784],{"class":107,"line":32758},[105,152777,3092],{"class":111},[105,152779,152122],{"class":115},[105,152781,38912],{"class":111},[105,152783,38918],{"class":164},[105,152785,3730],{"class":115},[105,152787,152788,152790,152792,152794],{"class":107,"line":32764},[105,152789,32436],{"class":164},[105,152791,116],{"class":115},[105,152793,152524],{"class":220},[105,152795,122],{"class":115},[105,152797,152798],{"class":107,"line":32780},[105,152799,152346],{"class":111},[105,152801,152802],{"class":107,"line":32786},[105,152803,2391],{"emptyLinePlaceholder":32},[105,152805,152806],{"class":107,"line":32800},[105,152807,152808],{"class":115},"    print_student(student)\n",[105,152810,152811],{"class":107,"line":32806},[105,152812,2391],{"emptyLinePlaceholder":32},[105,152814,152815],{"class":107,"line":32821},[105,152816,2391],{"emptyLinePlaceholder":32},[105,152818,152819,152821,152824],{"class":107,"line":32827},[105,152820,31932],{"class":111},[105,152822,152823],{"class":1954}," print_student",[105,152825,152826],{"class":115},"(student):\n",[105,152828,152829,152831],{"class":107,"line":32836},[105,152830,31284],{"class":164},[105,152832,151424],{"class":115},[105,152834,152835,152838,152840,152842,152845,152848,152850,152853],{"class":107,"line":32842},[105,152836,152837],{"class":111},"        f",[105,152839,367],{"class":220},[105,152841,1012],{"class":164},[105,152843,152844],{"class":115},"student[",[105,152846,152847],{"class":220},"'student_id'",[105,152849,1056],{"class":115},[105,152851,152852],{"class":164},"}\\t",[105,152854,25118],{"class":220},[105,152856,152857,152859,152861,152863,152865,152868,152870,152872],{"class":107,"line":32851},[105,152858,152837],{"class":111},[105,152860,367],{"class":220},[105,152862,1012],{"class":164},[105,152864,152844],{"class":115},[105,152866,152867],{"class":220},"'name'",[105,152869,1056],{"class":115},[105,152871,152852],{"class":164},[105,152873,25118],{"class":220},[105,152875,152876,152878,152880,152882,152884,152887,152889,152891],{"class":107,"line":32857},[105,152877,152837],{"class":111},[105,152879,367],{"class":220},[105,152881,1012],{"class":164},[105,152883,152844],{"class":115},[105,152885,152886],{"class":220},"'age'",[105,152888,1056],{"class":115},[105,152890,152852],{"class":164},[105,152892,25118],{"class":220},[105,152894,152895,152897,152899,152901,152903,152906,152908,152910],{"class":107,"line":32863},[105,152896,152837],{"class":111},[105,152898,367],{"class":220},[105,152900,1012],{"class":164},[105,152902,152844],{"class":115},[105,152904,152905],{"class":220},"'score'",[105,152907,1056],{"class":115},[105,152909,1062],{"class":164},[105,152911,25118],{"class":220},[105,152913,152914],{"class":107,"line":32872},[105,152915,152916],{"class":115},"    )\n",[105,152918,152919],{"class":107,"line":32878},[105,152920,2391],{"emptyLinePlaceholder":32},[105,152922,152923],{"class":107,"line":32889},[105,152924,2391],{"emptyLinePlaceholder":32},[105,152926,152927,152929,152932],{"class":107,"line":32895},[105,152928,31932],{"class":111},[105,152930,152931],{"class":1954}," show_all_students",[105,152933,151946],{"class":115},[105,152935,152936,152938,152940],{"class":107,"line":32914},[105,152937,3092],{"class":111},[105,152939,38915],{"class":111},[105,152941,152127],{"class":115},[105,152943,152944,152946,152948,152951],{"class":107,"line":32920},[105,152945,32436],{"class":164},[105,152947,116],{"class":115},[105,152949,152950],{"class":220},"\"暂无学生\"",[105,152952,122],{"class":115},[105,152954,152955],{"class":107,"line":32931},[105,152956,152346],{"class":111},[105,152958,152959],{"class":107,"line":32937},[105,152960,2391],{"emptyLinePlaceholder":32},[105,152962,152963,152965,152967,152970,152972,152975,152977,152980,152982,152985],{"class":107,"line":32957},[105,152964,31284],{"class":164},[105,152966,116],{"class":115},[105,152968,152969],{"class":220},"\"学号",[105,152971,1222],{"class":164},[105,152973,152974],{"class":220},"姓名",[105,152976,1222],{"class":164},[105,152978,152979],{"class":220},"年龄",[105,152981,1222],{"class":164},[105,152983,152984],{"class":220},"成绩\"",[105,152986,122],{"class":115},[105,152988,152989,152991,152993,152995],{"class":107,"line":32973},[105,152990,3192],{"class":111},[105,152992,152122],{"class":115},[105,152994,26028],{"class":111},[105,152996,152127],{"class":115},[105,152998,152999],{"class":107,"line":32979},[105,153000,153001],{"class":115},"        print_student(student)\n",[105,153003,153004],{"class":107,"line":32993},[105,153005,2391],{"emptyLinePlaceholder":32},[105,153007,153008],{"class":107,"line":32999},[105,153009,2391],{"emptyLinePlaceholder":32},[105,153011,153012,153014,153016],{"class":107,"line":33005},[105,153013,31932],{"class":111},[105,153015,1964],{"class":1954},[105,153017,31938],{"class":115},[105,153019,153020,153023,153025],{"class":107,"line":33016},[105,153021,153022],{"class":115},"    students ",[105,153024,161],{"class":111},[105,153026,153027],{"class":115}," load_students()\n",[105,153029,153030],{"class":107,"line":33022},[105,153031,2391],{"emptyLinePlaceholder":32},[105,153033,153034,153036,153038],{"class":107,"line":33028},[105,153035,2242],{"class":111},[105,153037,95277],{"class":164},[105,153039,3730],{"class":115},[105,153041,153042],{"class":107,"line":33038},[105,153043,153044],{"class":115},"        show_menu()\n",[105,153046,153047,153050,153052,153054,153056,153059],{"class":107,"line":33044},[105,153048,153049],{"class":115},"        choice ",[105,153051,161],{"class":111},[105,153053,60590],{"class":164},[105,153055,116],{"class":115},[105,153057,153058],{"class":220},"\"请输入操作:\"",[105,153060,122],{"class":115},[105,153062,153063],{"class":107,"line":33055},[105,153064,2391],{"emptyLinePlaceholder":32},[105,153066,153067,153069,153072,153074,153077],{"class":107,"line":33061},[105,153068,2488],{"class":111},[105,153070,153071],{"class":115}," choice ",[105,153073,2940],{"class":111},[105,153075,153076],{"class":220}," \"1\"",[105,153078,3730],{"class":115},[105,153080,153081],{"class":107,"line":33071},[105,153082,153083],{"class":115},"            add_student(students)\n",[105,153085,153086,153089,153091,153093,153096],{"class":107,"line":33076},[105,153087,153088],{"class":111},"        elif",[105,153090,153071],{"class":115},[105,153092,2940],{"class":111},[105,153094,153095],{"class":220}," \"2\"",[105,153097,3730],{"class":115},[105,153099,153100],{"class":107,"line":33082},[105,153101,153102],{"class":115},"            delete_student(students)\n",[105,153104,153105,153107,153109,153111,153114],{"class":107,"line":33131},[105,153106,153088],{"class":111},[105,153108,153071],{"class":115},[105,153110,2940],{"class":111},[105,153112,153113],{"class":220}," \"3\"",[105,153115,3730],{"class":115},[105,153117,153118],{"class":107,"line":33178},[105,153119,153120],{"class":115},"            update_student(students)\n",[105,153122,153123,153125,153127,153129,153132],{"class":107,"line":33183},[105,153124,153088],{"class":111},[105,153126,153071],{"class":115},[105,153128,2940],{"class":111},[105,153130,153131],{"class":220}," \"4\"",[105,153133,3730],{"class":115},[105,153135,153136],{"class":107,"line":33189},[105,153137,153138],{"class":115},"            query_student(students)\n",[105,153140,153141,153143,153145,153147,153150],{"class":107,"line":33208},[105,153142,153088],{"class":111},[105,153144,153071],{"class":115},[105,153146,2940],{"class":111},[105,153148,153149],{"class":220}," \"5\"",[105,153151,3730],{"class":115},[105,153153,153154],{"class":107,"line":33214},[105,153155,153156],{"class":115},"            show_all_students(students)\n",[105,153158,153159,153161,153163,153165,153168],{"class":107,"line":33234},[105,153160,153088],{"class":111},[105,153162,153071],{"class":115},[105,153164,2940],{"class":111},[105,153166,153167],{"class":220}," \"0\"",[105,153169,3730],{"class":115},[105,153171,153172,153174,153176,153179],{"class":107,"line":33240},[105,153173,34635],{"class":164},[105,153175,116],{"class":115},[105,153177,153178],{"class":220},"\"退出系统\"",[105,153180,122],{"class":115},[105,153182,153183],{"class":107,"line":33246},[105,153184,115083],{"class":111},[105,153186,153187,153189],{"class":107,"line":33256},[105,153188,2525],{"class":111},[105,153190,3730],{"class":115},[105,153192,153193,153195,153197,153200],{"class":107,"line":33261},[105,153194,34635],{"class":164},[105,153196,116],{"class":115},[105,153198,153199],{"class":220},"\"输入错误\"",[105,153201,122],{"class":115},[105,153203,153204],{"class":107,"line":33267},[105,153205,2391],{"emptyLinePlaceholder":32},[105,153207,153208],{"class":107,"line":33283},[105,153209,2391],{"emptyLinePlaceholder":32},[105,153211,153212,153214,153216,153218,153220],{"class":107,"line":33328},[105,153213,1522],{"class":111},[105,153215,31205],{"class":164},[105,153217,101544],{"class":111},[105,153219,101547],{"class":220},[105,153221,3730],{"class":115},[105,153223,153224],{"class":107,"line":33334},[105,153225,101554],{"class":115},[14,153227,153228],{},"这个项目串联了：",[59,153230,153231,153234,153237,153240,153243,153245],{},[62,153232,153233],{},"菜单循环。",[62,153235,153236],{},"函数封装。",[62,153238,153239],{},"列表字典。",[62,153241,153242],{},"JSON 读写。",[62,153244,151712],{},[62,153246,153247,28370],{},[102,153248,153249],{},"if __name__ == \"__main__\"",[47,153251,153253],{"id":153252},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153255,153256],{},"可以进一步拆成两个类：",[59,153258,153259,153264],{},[62,153260,153261,153263],{},[102,153262,149553],{},"：表示单个学生。",[62,153265,153266,153268],{},[102,153267,151579],{},"：负责学生增删改查和文件保存。",[14,153270,153271],{},"示意代码：",[96,153273,153275],{"className":30363,"code":153274,"language":30365,"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",[102,153276,153277,153287,153291,153295,153299,153307,153314,153320,153326,153332,153336,153344,153350,153360,153370,153380,153390,153394,153398,153404,153412,153420,153428,153436,153444,153452],{"__ignoreMap":22},[105,153278,153279,153281,153283,153285],{"class":107,"line":108},[105,153280,30722],{"class":111},[105,153282,151137],{"class":115},[105,153284,30377],{"class":111},[105,153286,151142],{"class":115},[105,153288,153289],{"class":107,"line":28},[105,153290,2391],{"emptyLinePlaceholder":32},[105,153292,153293],{"class":107,"line":1171},[105,153294,2391],{"emptyLinePlaceholder":32},[105,153296,153297],{"class":107,"line":1186},[105,153298,151155],{"class":1954},[105,153300,153301,153303,153305],{"class":107,"line":1192},[105,153302,14686],{"class":111},[105,153304,7890],{"class":1954},[105,153306,3730],{"class":115},[105,153308,153309,153312],{"class":107,"line":1206},[105,153310,153311],{"class":115},"    student_id: ",[105,153313,151171],{"class":164},[105,153315,153316,153318],{"class":107,"line":1212},[105,153317,151168],{"class":115},[105,153319,151171],{"class":164},[105,153321,153322,153324],{"class":107,"line":1303},[105,153323,151176],{"class":115},[105,153325,151179],{"class":164},[105,153327,153328,153330],{"class":107,"line":1309},[105,153329,151184],{"class":115},[105,153331,151187],{"class":164},[105,153333,153334],{"class":107,"line":1321},[105,153335,2391],{"emptyLinePlaceholder":32},[105,153337,153338,153340,153342],{"class":107,"line":1603},[105,153339,30786],{"class":111},[105,153341,151335],{"class":1954},[105,153343,30792],{"class":115},[105,153345,153346,153348],{"class":107,"line":1608},[105,153347,14744],{"class":111},[105,153349,15564],{"class":115},[105,153351,153352,153354,153356,153358],{"class":107,"line":1614},[105,153353,151348],{"class":220},[105,153355,51422],{"class":115},[105,153357,30808],{"class":164},[105,153359,151355],{"class":115},[105,153361,153362,153364,153366,153368],{"class":107,"line":1619},[105,153363,151360],{"class":220},[105,153365,51422],{"class":115},[105,153367,30808],{"class":164},[105,153369,151367],{"class":115},[105,153371,153372,153374,153376,153378],{"class":107,"line":1633},[105,153373,151372],{"class":220},[105,153375,51422],{"class":115},[105,153377,30808],{"class":164},[105,153379,151379],{"class":115},[105,153381,153382,153384,153386,153388],{"class":107,"line":1638},[105,153383,151384],{"class":220},[105,153385,51422],{"class":115},[105,153387,30808],{"class":164},[105,153389,151391],{"class":115},[105,153391,153392],{"class":107,"line":1644},[105,153393,2520],{"class":115},[105,153395,153396],{"class":107,"line":1665},[105,153397,2391],{"emptyLinePlaceholder":32},[105,153399,153400,153402],{"class":107,"line":1670},[105,153401,150999],{"class":1954},[105,153403,151002],{"class":164},[105,153405,153406,153408,153410],{"class":107,"line":1684},[105,153407,30786],{"class":111},[105,153409,151412],{"class":1954},[105,153411,151415],{"class":115},[105,153413,153414,153416,153418],{"class":107,"line":1689},[105,153415,14744],{"class":111},[105,153417,151019],{"class":164},[105,153419,151424],{"class":115},[105,153421,153422,153424,153426],{"class":107,"line":1718},[105,153423,151429],{"class":115},[105,153425,151432],{"class":220},[105,153427,87821],{"class":115},[105,153429,153430,153432,153434],{"class":107,"line":1723},[105,153431,151429],{"class":115},[105,153433,62664],{"class":220},[105,153435,87821],{"class":115},[105,153437,153438,153440,153442],{"class":107,"line":1740},[105,153439,151429],{"class":115},[105,153441,69109],{"class":220},[105,153443,87821],{"class":115},[105,153445,153446,153448,153450],{"class":107,"line":1745},[105,153447,151429],{"class":115},[105,153449,151457],{"class":220},[105,153451,87821],{"class":115},[105,153453,153454],{"class":107,"line":1750},[105,153455,38111],{"class":115},[14,153457,153458],{},"管理器示意：",[96,153460,153462],{"className":30363,"code":153461,"language":30365,"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",[102,153463,153464,153473,153481,153492,153496,153506,153519,153530,153537,153543,153547,153556,153565,153571,153578],{"__ignoreMap":22},[105,153465,153466,153468,153471],{"class":107,"line":108},[105,153467,14686],{"class":111},[105,153469,153470],{"class":1954}," StudentManager",[105,153472,3730],{"class":115},[105,153474,153475,153477,153479],{"class":107,"line":28},[105,153476,30786],{"class":111},[105,153478,30789],{"class":164},[105,153480,30792],{"class":115},[105,153482,153483,153485,153488,153490],{"class":107,"line":1171},[105,153484,30830],{"class":164},[105,153486,153487],{"class":115},".students ",[105,153489,161],{"class":111},[105,153491,51823],{"class":115},[105,153493,153494],{"class":107,"line":1186},[105,153495,2391],{"emptyLinePlaceholder":32},[105,153497,153498,153500,153503],{"class":107,"line":1192},[105,153499,30786],{"class":111},[105,153501,153502],{"class":1954}," find_by_id",[105,153504,153505],{"class":115},"(self, student_id):\n",[105,153507,153508,153510,153512,153514,153516],{"class":107,"line":1206},[105,153509,3394],{"class":111},[105,153511,152122],{"class":115},[105,153513,26028],{"class":111},[105,153515,38858],{"class":164},[105,153517,153518],{"class":115},".students:\n",[105,153520,153521,153523,153526,153528],{"class":107,"line":1212},[105,153522,4633],{"class":111},[105,153524,153525],{"class":115}," student.student_id ",[105,153527,2940],{"class":111},[105,153529,152143],{"class":115},[105,153531,153532,153535],{"class":107,"line":1303},[105,153533,153534],{"class":111},"                return",[105,153536,152150],{"class":115},[105,153538,153539,153541],{"class":107,"line":1309},[105,153540,14744],{"class":111},[105,153542,152157],{"class":164},[105,153544,153545],{"class":107,"line":1321},[105,153546,2391],{"emptyLinePlaceholder":32},[105,153548,153549,153551,153553],{"class":107,"line":1603},[105,153550,30786],{"class":111},[105,153552,5201],{"class":1954},[105,153554,153555],{"class":115},"(self, student):\n",[105,153557,153558,153560,153562],{"class":107,"line":1608},[105,153559,2488],{"class":111},[105,153561,38858],{"class":164},[105,153563,153564],{"class":115},".find_by_id(student.student_id):\n",[105,153566,153567,153569],{"class":107,"line":1614},[105,153568,15724],{"class":111},[105,153570,125792],{"class":164},[105,153572,153573,153575],{"class":107,"line":1619},[105,153574,30830],{"class":164},[105,153576,153577],{"class":115},".students.append(student)\n",[105,153579,153580,153582],{"class":107,"line":1633},[105,153581,14744],{"class":111},[105,153583,153584],{"class":164}," True\n",[14,153586,153587],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[47,153589,153591],{"id":153590},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[76,153593,153595],{"id":153594},"_1251-数据结构","12.5.1 数据结构",[96,153597,153599],{"className":30363,"code":153598,"language":30365,"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",[102,153600,153601,153609,153640,153670,153699,153728],{"__ignoreMap":22},[105,153602,153603,153605,153607],{"class":107,"line":108},[105,153604,148450],{"class":115},[105,153606,161],{"class":111},[105,153608,55432],{"class":115},[105,153610,153611,153613,153615,153617,153619,153621,153624,153626,153629,153631,153633,153635,153638],{"class":107,"line":28},[105,153612,148370],{"class":115},[105,153614,147982],{"class":220},[105,153616,51422],{"class":115},[105,153618,148593],{"class":220},[105,153620,12427],{"class":115},[105,153622,153623],{"class":220},"\"category\"",[105,153625,51422],{"class":115},[105,153627,153628],{"class":220},"\"手机\"",[105,153630,12427],{"class":115},[105,153632,84069],{"class":220},[105,153634,51422],{"class":115},[105,153636,153637],{"class":164},"12000",[105,153639,4921],{"class":115},[105,153641,153642,153644,153646,153648,153650,153652,153654,153656,153659,153661,153663,153665,153668],{"class":107,"line":1171},[105,153643,148370],{"class":115},[105,153645,147982],{"class":220},[105,153647,51422],{"class":115},[105,153649,148593],{"class":220},[105,153651,12427],{"class":115},[105,153653,153623],{"class":220},[105,153655,51422],{"class":115},[105,153657,153658],{"class":220},"\"电脑\"",[105,153660,12427],{"class":115},[105,153662,84069],{"class":220},[105,153664,51422],{"class":115},[105,153666,153667],{"class":164},"18000",[105,153669,4921],{"class":115},[105,153671,153672,153674,153676,153678,153680,153682,153684,153686,153688,153690,153692,153694,153697],{"class":107,"line":1186},[105,153673,148370],{"class":115},[105,153675,147982],{"class":220},[105,153677,51422],{"class":115},[105,153679,148614],{"class":220},[105,153681,12427],{"class":115},[105,153683,153623],{"class":220},[105,153685,51422],{"class":115},[105,153687,153628],{"class":220},[105,153689,12427],{"class":115},[105,153691,84069],{"class":220},[105,153693,51422],{"class":115},[105,153695,153696],{"class":164},"15000",[105,153698,4921],{"class":115},[105,153700,153701,153703,153705,153707,153709,153711,153713,153715,153717,153719,153721,153723,153726],{"class":107,"line":1192},[105,153702,148370],{"class":115},[105,153704,147982],{"class":220},[105,153706,51422],{"class":115},[105,153708,148614],{"class":220},[105,153710,12427],{"class":115},[105,153712,153623],{"class":220},[105,153714,51422],{"class":115},[105,153716,153658],{"class":220},[105,153718,12427],{"class":115},[105,153720,84069],{"class":220},[105,153722,51422],{"class":115},[105,153724,153725],{"class":164},"16000",[105,153727,4921],{"class":115},[105,153729,153730],{"class":107,"line":1206},[105,153731,33231],{"class":115},[76,153733,153735],{"id":153734},"_1252-按日期统计","12.5.2 按日期统计",[96,153737,153739],{"className":30363,"code":153738,"language":30365,"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",[102,153740,153741,153750,153754,153765,153779,153792,153811,153815],{"__ignoreMap":22},[105,153742,153743,153746,153748],{"class":107,"line":108},[105,153744,153745],{"class":115},"daily_total ",[105,153747,161],{"class":111},[105,153749,87853],{"class":115},[105,153751,153752],{"class":107,"line":28},[105,153753,2391],{"emptyLinePlaceholder":32},[105,153755,153756,153758,153760,153762],{"class":107,"line":1171},[105,153757,3016],{"class":111},[105,153759,148194],{"class":115},[105,153761,26028],{"class":111},[105,153763,153764],{"class":115}," sales:\n",[105,153766,153767,153770,153772,153775,153777],{"class":107,"line":1186},[105,153768,153769],{"class":115},"    date ",[105,153771,161],{"class":111},[105,153773,153774],{"class":115}," item[",[105,153776,147982],{"class":220},[105,153778,33231],{"class":115},[105,153780,153781,153784,153786,153788,153790],{"class":107,"line":1192},[105,153782,153783],{"class":115},"    amount ",[105,153785,161],{"class":111},[105,153787,153774],{"class":115},[105,153789,84069],{"class":220},[105,153791,33231],{"class":115},[105,153793,153794,153797,153799,153802,153804,153806,153808],{"class":107,"line":1206},[105,153795,153796],{"class":115},"    daily_total[date] ",[105,153798,161],{"class":111},[105,153800,153801],{"class":115}," daily_total.get(date, ",[105,153803,307],{"class":164},[105,153805,13706],{"class":115},[105,153807,597],{"class":111},[105,153809,153810],{"class":115}," amount\n",[105,153812,153813],{"class":107,"line":1212},[105,153814,2391],{"emptyLinePlaceholder":32},[105,153816,153817,153819],{"class":107,"line":1303},[105,153818,30400],{"class":164},[105,153820,153821],{"class":115},"(daily_total)\n",[76,153823,153825],{"id":153824},"_1253-按类别统计","12.5.3 按类别统计",[96,153827,153829],{"className":30363,"code":153828,"language":30365,"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",[102,153830,153831,153840,153844,153854,153867,153879,153897,153901],{"__ignoreMap":22},[105,153832,153833,153836,153838],{"class":107,"line":108},[105,153834,153835],{"class":115},"category_total ",[105,153837,161],{"class":111},[105,153839,87853],{"class":115},[105,153841,153842],{"class":107,"line":28},[105,153843,2391],{"emptyLinePlaceholder":32},[105,153845,153846,153848,153850,153852],{"class":107,"line":1171},[105,153847,3016],{"class":111},[105,153849,148194],{"class":115},[105,153851,26028],{"class":111},[105,153853,153764],{"class":115},[105,153855,153856,153859,153861,153863,153865],{"class":107,"line":1186},[105,153857,153858],{"class":115},"    category ",[105,153860,161],{"class":111},[105,153862,153774],{"class":115},[105,153864,153623],{"class":220},[105,153866,33231],{"class":115},[105,153868,153869,153871,153873,153875,153877],{"class":107,"line":1192},[105,153870,153783],{"class":115},[105,153872,161],{"class":111},[105,153874,153774],{"class":115},[105,153876,84069],{"class":220},[105,153878,33231],{"class":115},[105,153880,153881,153884,153886,153889,153891,153893,153895],{"class":107,"line":1206},[105,153882,153883],{"class":115},"    category_total[category] ",[105,153885,161],{"class":111},[105,153887,153888],{"class":115}," category_total.get(category, ",[105,153890,307],{"class":164},[105,153892,13706],{"class":115},[105,153894,597],{"class":111},[105,153896,153810],{"class":115},[105,153898,153899],{"class":107,"line":1212},[105,153900,2391],{"emptyLinePlaceholder":32},[105,153902,153903,153905],{"class":107,"line":1303},[105,153904,30400],{"class":164},[105,153906,153907],{"class":115},"(category_total)\n",[76,153909,153911],{"id":153910},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[96,153913,153915],{"className":30363,"code":153914,"language":30365,"meta":22,"style":22},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[102,153916,153917,153942],{"__ignoreMap":22},[105,153918,153919,153922,153924,153926,153929,153932,153935,153938,153940],{"class":107,"line":108},[105,153920,153921],{"class":115},"top_date, top_amount ",[105,153923,161],{"class":111},[105,153925,5943],{"class":164},[105,153927,153928],{"class":115},"(daily_total.items(), ",[105,153930,153931],{"class":5208},"key",[105,153933,153934],{"class":111},"=lambda",[105,153936,153937],{"class":115}," item: item[",[105,153939,333],{"class":164},[105,153941,4648],{"class":115},[105,153943,153944,153946],{"class":107,"line":28},[105,153945,30400],{"class":164},[105,153947,153948],{"class":115},"(top_date, top_amount)\n",[47,153950,153952],{"id":153951},"_126-绘制柱状图","12.6 绘制柱状图",[96,153954,153956],{"className":30363,"code":153955,"language":30365,"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",[102,153957,153958,153972,153983,153987,153995,154007,154019,154030,154034,154038,154048,154059,154073,154078,154095,154112,154128,154132],{"__ignoreMap":22},[105,153959,153960,153962,153964,153966,153968,153970],{"class":107,"line":108},[105,153961,30722],{"class":111},[105,153963,147364],{"class":115},[105,153965,30377],{"class":111},[105,153967,147369],{"class":115},[105,153969,31368],{"class":111},[105,153971,147374],{"class":115},[105,153973,153974,153976,153978,153980],{"class":107,"line":28},[105,153975,30722],{"class":111},[105,153977,147223],{"class":115},[105,153979,30377],{"class":111},[105,153981,153982],{"class":115}," Bar\n",[105,153984,153985],{"class":107,"line":1171},[105,153986,2391],{"emptyLinePlaceholder":32},[105,153988,153989,153991,153993],{"class":107,"line":1186},[105,153990,153835],{"class":115},[105,153992,161],{"class":111},[105,153994,15564],{"class":115},[105,153996,153997,154000,154002,154005],{"class":107,"line":1192},[105,153998,153999],{"class":220},"    \"手机\"",[105,154001,51422],{"class":115},[105,154003,154004],{"class":164},"27000",[105,154006,31451],{"class":115},[105,154008,154009,154012,154014,154017],{"class":107,"line":1206},[105,154010,154011],{"class":220},"    \"电脑\"",[105,154013,51422],{"class":115},[105,154015,154016],{"class":164},"34000",[105,154018,31451],{"class":115},[105,154020,154021,154024,154026,154028],{"class":107,"line":1212},[105,154022,154023],{"class":220},"    \"耳机\"",[105,154025,51422],{"class":115},[105,154027,124384],{"class":164},[105,154029,31451],{"class":115},[105,154031,154032],{"class":107,"line":1303},[105,154033,1556],{"class":115},[105,154035,154036],{"class":107,"line":1309},[105,154037,2391],{"emptyLinePlaceholder":32},[105,154039,154040,154043,154045],{"class":107,"line":1321},[105,154041,154042],{"class":115},"bar ",[105,154044,161],{"class":111},[105,154046,154047],{"class":115}," Bar()\n",[105,154049,154050,154053,154056],{"class":107,"line":1603},[105,154051,154052],{"class":115},"bar.add_xaxis(",[105,154054,154055],{"class":164},"list",[105,154057,154058],{"class":115},"(category_total.keys()))\n",[105,154060,154061,154064,154066,154068,154070],{"class":107,"line":1608},[105,154062,154063],{"class":115},"bar.add_yaxis(",[105,154065,147280],{"class":220},[105,154067,12427],{"class":115},[105,154069,154055],{"class":164},[105,154071,154072],{"class":115},"(category_total.values()))\n",[105,154074,154075],{"class":107,"line":1614},[105,154076,154077],{"class":115},"bar.set_global_opts(\n",[105,154079,154080,154082,154084,154086,154088,154090,154093],{"class":107,"line":1619},[105,154081,147458],{"class":5208},[105,154083,161],{"class":111},[105,154085,147463],{"class":115},[105,154087,51392],{"class":5208},[105,154089,161],{"class":111},[105,154091,154092],{"class":220},"\"品类销售额\"",[105,154094,38032],{"class":115},[105,154096,154097,154099,154101,154103,154105,154107,154110],{"class":107,"line":1633},[105,154098,147477],{"class":5208},[105,154100,161],{"class":111},[105,154102,147482],{"class":115},[105,154104,79795],{"class":5208},[105,154106,161],{"class":111},[105,154108,154109],{"class":220},"\"品类\"",[105,154111,38032],{"class":115},[105,154113,154114,154116,154118,154120,154122,154124,154126],{"class":107,"line":1638},[105,154115,147496],{"class":5208},[105,154117,161],{"class":111},[105,154119,147482],{"class":115},[105,154121,79795],{"class":5208},[105,154123,161],{"class":111},[105,154125,147280],{"class":220},[105,154127,38032],{"class":115},[105,154129,154130],{"class":107,"line":1644},[105,154131,122],{"class":115},[105,154133,154134,154137,154140],{"class":107,"line":1665},[105,154135,154136],{"class":115},"bar.render(",[105,154138,154139],{"class":220},"\"category_sales.html\"",[105,154141,122],{"class":115},[47,154143,154145],{"id":154144},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154147,154148],{},"时间线适合展示不同日期、月份、年份的数据变化。",[96,154150,154152],{"className":30363,"code":154151,"language":30365,"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",[102,154153,154154,154168,154179,154183,154191,154215,154238,154263,154267,154271,154281,154285,154296,154305,154315,154329,154360,154365,154369],{"__ignoreMap":22},[105,154155,154156,154158,154160,154162,154164,154166],{"class":107,"line":108},[105,154157,30722],{"class":111},[105,154159,147364],{"class":115},[105,154161,30377],{"class":111},[105,154163,147369],{"class":115},[105,154165,31368],{"class":111},[105,154167,147374],{"class":115},[105,154169,154170,154172,154174,154176],{"class":107,"line":28},[105,154171,30722],{"class":111},[105,154173,147223],{"class":115},[105,154175,30377],{"class":111},[105,154177,154178],{"class":115}," Bar, Timeline\n",[105,154180,154181],{"class":107,"line":1171},[105,154182,2391],{"emptyLinePlaceholder":32},[105,154184,154185,154187,154189],{"class":107,"line":1186},[105,154186,101643],{"class":115},[105,154188,161],{"class":111},[105,154190,15564],{"class":115},[105,154192,154193,154196,154199,154201,154203,154205,154207,154209,154211,154213],{"class":107,"line":1192},[105,154194,154195],{"class":220},"    \"2024-10-01\"",[105,154197,154198],{"class":115},": {",[105,154200,153628],{"class":220},[105,154202,51422],{"class":115},[105,154204,153637],{"class":164},[105,154206,12427],{"class":115},[105,154208,153658],{"class":220},[105,154210,51422],{"class":115},[105,154212,153667],{"class":164},[105,154214,4921],{"class":115},[105,154216,154217,154220,154222,154224,154226,154228,154230,154232,154234,154236],{"class":107,"line":1206},[105,154218,154219],{"class":220},"    \"2024-10-02\"",[105,154221,154198],{"class":115},[105,154223,153628],{"class":220},[105,154225,51422],{"class":115},[105,154227,153696],{"class":164},[105,154229,12427],{"class":115},[105,154231,153658],{"class":220},[105,154233,51422],{"class":115},[105,154235,153725],{"class":164},[105,154237,4921],{"class":115},[105,154239,154240,154243,154245,154247,154249,154252,154254,154256,154258,154261],{"class":107,"line":1212},[105,154241,154242],{"class":220},"    \"2024-10-03\"",[105,154244,154198],{"class":115},[105,154246,153628],{"class":220},[105,154248,51422],{"class":115},[105,154250,154251],{"class":164},"17000",[105,154253,12427],{"class":115},[105,154255,153658],{"class":220},[105,154257,51422],{"class":115},[105,154259,154260],{"class":164},"19000",[105,154262,4921],{"class":115},[105,154264,154265],{"class":107,"line":1303},[105,154266,1556],{"class":115},[105,154268,154269],{"class":107,"line":1309},[105,154270,2391],{"emptyLinePlaceholder":32},[105,154272,154273,154276,154278],{"class":107,"line":1321},[105,154274,154275],{"class":115},"timeline ",[105,154277,161],{"class":111},[105,154279,154280],{"class":115}," Timeline()\n",[105,154282,154283],{"class":107,"line":1603},[105,154284,2391],{"emptyLinePlaceholder":32},[105,154286,154287,154289,154292,154294],{"class":107,"line":1608},[105,154288,3016],{"class":111},[105,154290,154291],{"class":115}," date, category_data ",[105,154293,26028],{"class":111},[105,154295,149133],{"class":115},[105,154297,154298,154301,154303],{"class":107,"line":1614},[105,154299,154300],{"class":115},"    bar ",[105,154302,161],{"class":111},[105,154304,154047],{"class":115},[105,154306,154307,154310,154312],{"class":107,"line":1619},[105,154308,154309],{"class":115},"    bar.add_xaxis(",[105,154311,154055],{"class":164},[105,154313,154314],{"class":115},"(category_data.keys()))\n",[105,154316,154317,154320,154322,154324,154326],{"class":107,"line":1633},[105,154318,154319],{"class":115},"    bar.add_yaxis(",[105,154321,147280],{"class":220},[105,154323,12427],{"class":115},[105,154325,154055],{"class":164},[105,154327,154328],{"class":115},"(category_data.values()))\n",[105,154330,154331,154334,154337,154339,154341,154343,154345,154347,154349,154351,154353,154355,154358],{"class":107,"line":1638},[105,154332,154333],{"class":115},"    bar.set_global_opts(",[105,154335,154336],{"class":5208},"title_opts",[105,154338,161],{"class":111},[105,154340,147463],{"class":115},[105,154342,51392],{"class":5208},[105,154344,161],{"class":111},[105,154346,168],{"class":111},[105,154348,367],{"class":220},[105,154350,1012],{"class":164},[105,154352,73911],{"class":115},[105,154354,1062],{"class":164},[105,154356,154357],{"class":220},"销售额\"",[105,154359,30482],{"class":115},[105,154361,154362],{"class":107,"line":1644},[105,154363,154364],{"class":115},"    timeline.add(bar, date)\n",[105,154366,154367],{"class":107,"line":1665},[105,154368,2391],{"emptyLinePlaceholder":32},[105,154370,154371,154374,154377],{"class":107,"line":1670},[105,154372,154373],{"class":115},"timeline.render(",[105,154375,154376],{"class":220},"\"timeline_sales.html\"",[105,154378,122],{"class":115},[47,154380,154382],{"id":154381},"_128-绘制地图","12.8 绘制地图",[14,154384,154385],{},"地图适合展示地区数据。",[96,154387,154389],{"className":30363,"code":154388,"language":30365,"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",[102,154390,154391,154405,154416,154420,154428,154441,154453,154466,154479,154483,154487,154497,154512,154517,154534,154553,154557],{"__ignoreMap":22},[105,154392,154393,154395,154397,154399,154401,154403],{"class":107,"line":108},[105,154394,30722],{"class":111},[105,154396,147364],{"class":115},[105,154398,30377],{"class":111},[105,154400,147369],{"class":115},[105,154402,31368],{"class":111},[105,154404,147374],{"class":115},[105,154406,154407,154409,154411,154413],{"class":107,"line":28},[105,154408,30722],{"class":111},[105,154410,147223],{"class":115},[105,154412,30377],{"class":111},[105,154414,154415],{"class":115}," Map\n",[105,154417,154418],{"class":107,"line":1171},[105,154419,2391],{"emptyLinePlaceholder":32},[105,154421,154422,154424,154426],{"class":107,"line":1186},[105,154423,101643],{"class":115},[105,154425,161],{"class":111},[105,154427,55432],{"class":115},[105,154429,154430,154433,154435,154437,154439],{"class":107,"line":1192},[105,154431,154432],{"class":115},"    (",[105,154434,69254],{"class":220},[105,154436,12427],{"class":115},[105,154438,933],{"class":164},[105,154440,38032],{"class":115},[105,154442,154443,154445,154447,154449,154451],{"class":107,"line":1206},[105,154444,154432],{"class":115},[105,154446,69274],{"class":220},[105,154448,12427],{"class":115},[105,154450,147297],{"class":164},[105,154452,38032],{"class":115},[105,154454,154455,154457,154460,154462,154464],{"class":107,"line":1212},[105,154456,154432],{"class":115},[105,154458,154459],{"class":220},"\"广东\"",[105,154461,12427],{"class":115},[105,154463,1713],{"class":164},[105,154465,38032],{"class":115},[105,154467,154468,154470,154473,154475,154477],{"class":107,"line":1303},[105,154469,154432],{"class":115},[105,154471,154472],{"class":220},"\"浙江\"",[105,154474,12427],{"class":115},[105,154476,147302],{"class":164},[105,154478,38032],{"class":115},[105,154480,154481],{"class":107,"line":1309},[105,154482,33231],{"class":115},[105,154484,154485],{"class":107,"line":1321},[105,154486,2391],{"emptyLinePlaceholder":32},[105,154488,154489,154492,154494],{"class":107,"line":1603},[105,154490,154491],{"class":115},"map_chart ",[105,154493,161],{"class":111},[105,154495,154496],{"class":115}," Map()\n",[105,154498,154499,154502,154504,154507,154510],{"class":107,"line":1608},[105,154500,154501],{"class":115},"map_chart.add(",[105,154503,147280],{"class":220},[105,154505,154506],{"class":115},", data, ",[105,154508,154509],{"class":220},"\"china\"",[105,154511,122],{"class":115},[105,154513,154514],{"class":107,"line":1614},[105,154515,154516],{"class":115},"map_chart.set_global_opts(\n",[105,154518,154519,154521,154523,154525,154527,154529,154532],{"class":107,"line":1619},[105,154520,147458],{"class":5208},[105,154522,161],{"class":111},[105,154524,147463],{"class":115},[105,154526,51392],{"class":5208},[105,154528,161],{"class":111},[105,154530,154531],{"class":220},"\"地区销售额\"",[105,154533,38032],{"class":115},[105,154535,154536,154539,154541,154544,154547,154549,154551],{"class":107,"line":1633},[105,154537,154538],{"class":5208},"    visualmap_opts",[105,154540,161],{"class":111},[105,154542,154543],{"class":115},"opts.VisualMapOpts(",[105,154545,154546],{"class":5208},"max_",[105,154548,161],{"class":111},[105,154550,1713],{"class":164},[105,154552,38032],{"class":115},[105,154554,154555],{"class":107,"line":1638},[105,154556,122],{"class":115},[105,154558,154559,154562,154565],{"class":107,"line":1644},[105,154560,154561],{"class":115},"map_chart.render(",[105,154563,154564],{"class":220},"\"map_sales.html\"",[105,154566,122],{"class":115},[14,154568,154569],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[47,154571,154573],{"id":154572},"_129-项目拆分建议","12.9 项目拆分建议",[14,154575,154576],{},"当代码超过一个文件时，可以这样组织：",[96,154578,154581],{"className":154579,"code":154580,"language":5179,"meta":22},[5177],"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",[102,154582,154580],{"__ignoreMap":22},[14,154584,154585],{},"职责：",[59,154587,154588,154594,154600,154606],{},[62,154589,154590,154593],{},[102,154591,154592],{},"main.py","：程序入口。",[62,154595,154596,154599],{},[102,154597,154598],{},"file_utils.py","：读写 JSON。",[62,154601,154602,154605],{},[102,154603,154604],{},"sales_service.py","：统计销售数据。",[62,154607,154608,154611],{},[102,154609,154610],{},"chart_builder.py","：生成图表。",[47,154613,154615],{"id":154614},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154617,154618],{},"语法基础：",[59,154620,154621,154624,154627,154630],{},[62,154622,154623],{},"会写变量、注释、输入输出。",[62,154625,154626],{},"会使用 int、float、str、bool。",[62,154628,154629],{},"会做类型转换。",[62,154631,154632],{},"会使用 f-string 格式化输出。",[14,154634,154635],{},"流程控制：",[59,154637,154638,154644,154650,154658],{},[62,154639,154640,154641,28370],{},"会写 ",[102,154642,154643],{},"if elif else",[62,154645,154640,154646,101003,154648,28370],{},[102,154647,108648],{},[102,154649,3016],{},[62,154651,154652,154653,101003,154655,28370],{},"理解 ",[102,154654,2044],{},[102,154656,154657],{},"continue",[62,154659,154660],{},"能写嵌套循环。",[14,154662,154663],{},"函数：",[59,154665,154666,154669,154672,154675],{},[62,154667,154668],{},"会定义和调用函数。",[62,154670,154671],{},"理解参数和返回值。",[62,154673,154674],{},"知道局部变量和全局变量。",[62,154676,154677],{},"会使用默认参数、关键字参数、不定长参数。",[14,154679,154680],{},"容器：",[59,154682,154683,154686,154689,154692,154695],{},[62,154684,154685],{},"会使用列表增删改查。",[62,154687,154688],{},"会遍历列表、字典。",[62,154690,154691],{},"会使用切片。",[62,154693,154694],{},"会用集合去重。",[62,154696,154697],{},"会处理列表嵌套字典。",[14,154699,154700],{},"文件和模块：",[59,154702,154703,154706,154709,154712,154715],{},[62,154704,154705],{},"会读写文本文件。",[62,154707,154708],{},"会读写 JSON。",[62,154710,154711],{},"会捕获常见异常。",[62,154713,154714],{},"会导入模块和第三方包。",[62,154716,154717],{},"会创建简单包结构。",[14,154719,154720],{},"项目能力：",[59,154722,154723,154726,154729,154732,154735],{},[62,154724,154725],{},"能把代码拆成函数。",[62,154727,154728],{},"能把数据保存到文件。",[62,154730,154731],{},"能处理用户输入错误。",[62,154733,154734],{},"能写一个完整菜单程序。",[62,154736,154737],{},"能用 pyecharts 生成图表。",[47,154739,154741],{"id":154740},"_1211-推荐练习顺序","12.11 推荐练习顺序",[59,154743,154744,154747,154750,154753,154756,154759,154762,154765],{},[62,154745,154746],{},"猜数字游戏。",[62,154748,154749],{},"ATM 菜单程序。",[62,154751,154752],{},"学生成绩统计。",[62,154754,154755],{},"学生管理系统函数版。",[62,154757,154758],{},"学生管理系统文件持久化版。",[62,154760,154761],{},"学生管理系统面向对象版。",[62,154763,154764],{},"销售数据统计。",[62,154766,154767],{},"销售数据可视化。",[47,154769,154771],{"id":154770},"_1212-常见学习误区","12.12 常见学习误区",[59,154773,154774,154777,154780,154783,154786,154789,154792],{},[62,154775,154776],{},"只看视频不敲代码。",[62,154778,154779],{},"一报错就复制错误去搜，不先读报错位置。",[62,154781,154782],{},"变量名随便写，后续自己看不懂。",[62,154784,154785],{},"所有代码都写在一个文件一个函数里。",[62,154787,154788],{},"不保存练习代码，复习时没有材料。",[62,154790,154791],{},"还没掌握列表字典就急着学框架。",[62,154793,154794],{},"不会读官方文档，只依赖教程。",[47,154796,154798],{"id":154797},"_1213-如何读报错","12.13 如何读报错",[14,154800,154801],{},"报错通常从下往上看最后几行。",[14,154803,15127],{},[96,154805,154808],{"className":154806,"code":154807,"language":5179,"meta":22},[5177],"ValueError: invalid literal for int() with base 10: 'abc'\n",[102,154809,154807],{"__ignoreMap":22},[14,154811,24584],{},[59,154813,154814,154820,154830],{},[62,154815,154816,154817,28370],{},"异常类型是 ",[102,154818,154819],{},"ValueError",[62,154821,107330,154822,154825,154826,154829],{},[102,154823,154824],{},"int()"," 无法把 ",[102,154827,154828],{},"'abc'"," 转成整数。",[62,154831,154832],{},"应该检查输入内容或增加异常处理。",[14,154834,154835],{},"再看文件名和行号：",[96,154837,154840],{"className":154838,"code":154839,"language":5179,"meta":22},[5177],"File \"main.py\", line 10, in \u003Cmodule>\n",[102,154841,154839],{"__ignoreMap":22},[14,154843,154844,154845,154847],{},"表示错误发生在 ",[102,154846,154592],{}," 第 10 行。",[47,154849,154851],{"id":154850},"_1214-后续学习方向","12.14 后续学习方向",[14,154853,154854],{},"Python 基础完成后，可以按兴趣选择方向：",[59,154856,154857,154869,154878,154890,154901,154910,154920],{},[62,154858,154859,154860,328,154863,328,154866,28370],{},"自动化办公：",[102,154861,154862],{},"openpyxl",[102,154864,154865],{},"python-docx",[102,154867,154868],{},"pdfplumber",[62,154870,154871,154872,328,154874,328,154876,28370],{},"数据分析：",[102,154873,100611],{},[102,154875,146170],{},[102,154877,146178],{},[62,154879,154880,154881,328,154884,328,154887,28370],{},"Web 后端：",[102,154882,154883],{},"Flask",[102,154885,154886],{},"FastAPI",[102,154888,154889],{},"Django",[62,154891,154892,154893,328,154895,328,154898,28370],{},"爬虫：",[102,154894,146155],{},[102,154896,154897],{},"BeautifulSoup",[102,154899,154900],{},"Scrapy",[62,154902,154903,154904,328,154906,154909],{},"测试开发：",[102,154905,146202],{},[102,154907,154908],{},"selenium","、接口测试。",[62,154911,154912,154913,328,154915,328,154917,28370],{},"人工智能：",[102,154914,100611],{},[102,154916,146170],{},[102,154918,154919],{},"pytorch",[62,154921,154922,154923,328,154925,328,154928,28370],{},"运维脚本：",[102,154924,145771],{},[102,154926,154927],{},"subprocess",[102,154929,154930],{},"paramiko",[14,154932,154933],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[47,154935,154937],{"id":154936},"_1215-结课练习","12.15 结课练习",[59,154939,154940,154943,154946,154949,154952,154955,154958,154961],{},[62,154941,154942],{},"完成函数版学生管理系统。",[62,154944,154945],{},"给学生管理系统增加 JSON 持久化。",[62,154947,154948],{},"给学生管理系统增加异常处理。",[62,154950,154951],{},"把学生管理系统改成面向对象版。",[62,154953,154954],{},"使用 pyecharts 绘制学生成绩柱状图。",[62,154956,154957],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[62,154959,154960],{},"按品类统计销售额并绘制柱状图。",[62,154962,154963],{},"写一份自己的 Python 学习路线图。",[5118,154965,154966],{},"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":28,"depth":28,"links":154968},[154969,154970,154973,154974,154975,154981,154982,154983,154984,154985,154986,154987,154988,154989,154990],{"id":151685,"depth":28,"text":151686},{"id":151735,"depth":28,"text":151736,"children":154971},[154972],{"id":151739,"depth":1171,"text":151740},{"id":151778,"depth":28,"text":151779},{"id":153252,"depth":28,"text":153253},{"id":153590,"depth":28,"text":153591,"children":154976},[154977,154978,154979,154980],{"id":153594,"depth":1171,"text":153595},{"id":153734,"depth":1171,"text":153735},{"id":153824,"depth":1171,"text":153825},{"id":153910,"depth":1171,"text":153911},{"id":153951,"depth":28,"text":153952},{"id":154144,"depth":28,"text":154145},{"id":154381,"depth":28,"text":154382},{"id":154572,"depth":28,"text":154573},{"id":154614,"depth":28,"text":154615},{"id":154740,"depth":28,"text":154741},{"id":154770,"depth":28,"text":154771},{"id":154797,"depth":28,"text":154798},{"id":154850,"depth":28,"text":154851},{"id":154936,"depth":28,"text":154937},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151677,"description":23369},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154997,"title":154998,"body":154999,"description":23369,"extension":30,"meta":157468,"navigation":32,"path":157469,"seo":157470,"stem":157471,"__hash__":157472},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155000,"toc":157443},[155001,155004,155008,155011,155014,155034,155037,155060,155063,155066,155088,155091,155113,155117,155120,155160,155163,155284,155288,155291,155331,155334,155358,155361,155365,155368,155382,155415,155418,155453,155456,155479,155482,155515,155518,155520,155526,155601,155604,155610,155627,155667,155671,155674,155720,155722,155760,155763,155798,155801,155836,155839,155871,155874,155893,155897,155901,156014,156016,156091,156095,156141,156144,156170,156179,156183,156186,156249,156257,156285,156289,156329,156394,156398,156401,156440,156443,156488,156491,156552,156556,156583,156586,156614,156617,156621,156625,156690,156693,156731,156734,156766,156770,156869,156873,156876,156949,156952,157000,157004,157010,157050,157053,157100,157103,157152,157156,157158,157172,157174,157355,157359,157386,157406,157413,157417,157434,157440],[10,155002,154998],{"id":155003},"_2-基础语法变量与字符串",[47,155005,155007],{"id":155006},"_21-注释","2.1 注释",[14,155009,155010],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155012,155013],{},"单行注释：",[96,155015,155017],{"className":30363,"code":155016,"language":30365,"meta":22,"style":22},"# 这是单行注释\nprint(\"hello\")\n",[102,155018,155019,155024],{"__ignoreMap":22},[105,155020,155021],{"class":107,"line":108},[105,155022,155023],{"class":174},"# 这是单行注释\n",[105,155025,155026,155028,155030,155032],{"class":107,"line":28},[105,155027,30400],{"class":164},[105,155029,116],{"class":115},[105,155031,5836],{"class":220},[105,155033,122],{"class":115},[14,155035,155036],{},"多行说明常用三引号：",[96,155038,155040],{"className":30363,"code":155039,"language":30365,"meta":22,"style":22},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[102,155041,155042,155046,155051,155056],{"__ignoreMap":22},[105,155043,155044],{"class":107,"line":108},[105,155045,95683],{"class":220},[105,155047,155048],{"class":107,"line":28},[105,155049,155050],{"class":220},"这是多行说明。\n",[105,155052,155053],{"class":107,"line":1171},[105,155054,155055],{"class":220},"常用于文件顶部说明、函数说明等。\n",[105,155057,155058],{"class":107,"line":1186},[105,155059,95683],{"class":220},[14,155061,155062],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155064,155065],{},"不好：",[96,155067,155069],{"className":30363,"code":155068,"language":30365,"meta":22,"style":22},"# age 加 1\nage = age + 1\n",[102,155070,155071,155076],{"__ignoreMap":22},[105,155072,155073],{"class":107,"line":108},[105,155074,155075],{"class":174},"# age 加 1\n",[105,155077,155078,155080,155082,155084,155086],{"class":107,"line":28},[105,155079,146531],{"class":115},[105,155081,161],{"class":111},[105,155083,15699],{"class":115},[105,155085,597],{"class":111},[105,155087,55684],{"class":164},[14,155089,155090],{},"较好：",[96,155092,155094],{"className":30363,"code":155093,"language":30365,"meta":22,"style":22},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[102,155095,155096,155101],{"__ignoreMap":22},[105,155097,155098],{"class":107,"line":108},[105,155099,155100],{"class":174},"# 用户过完生日后，年龄增加一岁\n",[105,155102,155103,155105,155107,155109,155111],{"class":107,"line":28},[105,155104,146531],{"class":115},[105,155106,161],{"class":111},[105,155108,15699],{"class":115},[105,155110,597],{"class":111},[105,155112,55684],{"class":164},[47,155114,155116],{"id":155115},"_22-字面量","2.2 字面量",[14,155118,155119],{},"字面量就是代码中直接写出来的数据。",[96,155121,155123],{"className":30363,"code":155122,"language":30365,"meta":22,"style":22},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[102,155124,155125,155132,155139,155146,155153],{"__ignoreMap":22},[105,155126,155127,155129],{"class":107,"line":108},[105,155128,427],{"class":164},[105,155130,155131],{"class":174},"          # 整数\n",[105,155133,155134,155136],{"class":107,"line":28},[105,155135,165],{"class":164},[105,155137,155138],{"class":174},"         # 小数\n",[105,155140,155141,155143],{"class":107,"line":1171},[105,155142,5836],{"class":220},[105,155144,155145],{"class":174},"      # 字符串\n",[105,155147,155148,155150],{"class":107,"line":1186},[105,155149,31461],{"class":164},[105,155151,155152],{"class":174},"         # 布尔值\n",[105,155154,155155,155157],{"class":107,"line":1192},[105,155156,95671],{"class":164},[105,155158,155159],{"class":174},"         # 空值\n",[14,155161,155162],{},"常见字面量类型：",[253,155164,155165,155175],{},[256,155166,155167],{},[259,155168,155169,155171,155173],{},[262,155170,23730],{},[262,155172,27477],{},[262,155174,25854],{},[300,155176,155177,155188,155199,155210,155222,155234,155246,155259,155271],{},[259,155178,155179,155181,155185],{},[305,155180,119],{},[305,155182,155183],{},[102,155184,427],{},[305,155186,155187],{},"整数",[259,155189,155190,155192,155196],{},[305,155191,155],{},[305,155193,155194],{},[102,155195,165],{},[305,155197,155198],{},"浮点数",[259,155200,155201,155203,155207],{},[305,155202,1291],{},[305,155204,155205],{},[102,155206,5836],{},[305,155208,155209],{},"字符串",[259,155211,155212,155214,155220],{},[305,155213,1346],{},[305,155215,155216,328,155218],{},[102,155217,31461],{},[102,155219,33972],{},[305,155221,66000],{},[259,155223,155224,155227,155231],{},[305,155225,155226],{},"NoneType",[305,155228,155229],{},[102,155230,95671],{},[305,155232,155233],{},"空值",[259,155235,155236,155238,155243],{},[305,155237,154055],{},[305,155239,155240],{},[102,155241,155242],{},"[1, 2, 3]",[305,155244,155245],{},"列表",[259,155247,155248,155251,155256],{},[305,155249,155250],{},"tuple",[305,155252,155253],{},[102,155254,155255],{},"(1, 2, 3)",[305,155257,155258],{},"元组",[259,155260,155261,155263,155268],{},[305,155262,114531],{},[305,155264,155265],{},[102,155266,155267],{},"{\"name\": \"张三\"}",[305,155269,155270],{},"字典",[259,155272,155273,155276,155281],{},[305,155274,155275],{},"set",[305,155277,155278],{},[102,155279,155280],{},"{1, 2, 3}",[305,155282,155283],{},"集合",[47,155285,155287],{"id":155286},"_23-变量","2.3 变量",[14,155289,155290],{},"变量是保存数据的名字。",[96,155292,155294],{"className":30363,"code":155293,"language":30365,"meta":22,"style":22},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[102,155295,155296,155304,155312,155322],{"__ignoreMap":22},[105,155297,155298,155300,155302],{"class":107,"line":108},[105,155299,146521],{"class":115},[105,155301,161],{"class":111},[105,155303,149338],{"class":220},[105,155305,155306,155308,155310],{"class":107,"line":28},[105,155307,146531],{"class":115},[105,155309,161],{"class":111},[105,155311,146536],{"class":164},[105,155313,155314,155317,155319],{"class":107,"line":1171},[105,155315,155316],{"class":115},"height ",[105,155318,161],{"class":111},[105,155320,155321],{"class":164}," 1.75\n",[105,155323,155324,155327,155329],{"class":107,"line":1186},[105,155325,155326],{"class":115},"is_student ",[105,155328,161],{"class":111},[105,155330,153584],{"class":164},[14,155332,155333],{},"Python 的变量不需要提前声明类型：",[96,155335,155337],{"className":30363,"code":155336,"language":30365,"meta":22,"style":22},"score = 100\nscore = \"满分\"\n",[102,155338,155339,155349],{"__ignoreMap":22},[105,155340,155341,155344,155346],{"class":107,"line":108},[105,155342,155343],{"class":115},"score ",[105,155345,161],{"class":111},[105,155347,155348],{"class":164}," 100\n",[105,155350,155351,155353,155355],{"class":107,"line":28},[105,155352,155343],{"class":115},[105,155354,161],{"class":111},[105,155356,155357],{"class":220}," \"满分\"\n",[14,155359,155360],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[47,155362,155364],{"id":155363},"_24-变量命名规则","2.4 变量命名规则",[14,155366,155367],{},"硬性规则：",[59,155369,155370,155373,155376,155379],{},[62,155371,155372],{},"只能由字母、数字、下划线组成。",[62,155374,155375],{},"不能以数字开头。",[62,155377,155378],{},"不能使用 Python 关键字。",[62,155380,155381],{},"区分大小写。",[96,155383,155385],{"className":30363,"code":155384,"language":30365,"meta":22,"style":22},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[102,155386,155387,155396,155405],{"__ignoreMap":22},[105,155388,155389,155392,155394],{"class":107,"line":108},[105,155390,155391],{"class":115},"user_name ",[105,155393,161],{"class":111},[105,155395,146526],{"class":220},[105,155397,155398,155401,155403],{"class":107,"line":28},[105,155399,155400],{"class":115},"age2 ",[105,155402,161],{"class":111},[105,155404,146536],{"class":164},[105,155406,155407,155410,155412],{"class":107,"line":1171},[105,155408,155409],{"class":115},"_token ",[105,155411,161],{"class":111},[105,155413,155414],{"class":220}," \"abc\"\n",[14,155416,155417],{},"错误写法：",[96,155419,155421],{"className":30363,"code":155420,"language":30365,"meta":22,"style":22},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[102,155422,155423,155432,155444],{"__ignoreMap":22},[105,155424,155425,155428,155430],{"class":107,"line":108},[105,155426,155427],{"class":77388},"2age",[105,155429,13556],{"class":111},[105,155431,146536],{"class":164},[105,155433,155434,155436,155438,155440,155442],{"class":107,"line":28},[105,155435,131569],{"class":115},[105,155437,648],{"class":111},[105,155439,146521],{"class":115},[105,155441,161],{"class":111},[105,155443,146526],{"class":220},[105,155445,155446,155448,155450],{"class":107,"line":1171},[105,155447,14686],{"class":111},[105,155449,13556],{"class":111},[105,155451,155452],{"class":220}," \"一班\"\n",[14,155454,155455],{},"查看关键字：",[96,155457,155459],{"className":30363,"code":155458,"language":30365,"meta":22,"style":22},"import keyword\n\nprint(keyword.kwlist)\n",[102,155460,155461,155468,155472],{"__ignoreMap":22},[105,155462,155463,155465],{"class":107,"line":108},[105,155464,30377],{"class":111},[105,155466,155467],{"class":115}," keyword\n",[105,155469,155470],{"class":107,"line":28},[105,155471,2391],{"emptyLinePlaceholder":32},[105,155473,155474,155476],{"class":107,"line":1171},[105,155475,30400],{"class":164},[105,155477,155478],{"class":115},"(keyword.kwlist)\n",[14,155480,155481],{},"推荐命名风格：",[96,155483,155485],{"className":30363,"code":155484,"language":30365,"meta":22,"style":22},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[102,155486,155487,155496,155506],{"__ignoreMap":22},[105,155488,155489,155492,155494],{"class":107,"line":108},[105,155490,155491],{"class":115},"student_name ",[105,155493,161],{"class":111},[105,155495,149338],{"class":220},[105,155497,155498,155501,155503],{"class":107,"line":28},[105,155499,155500],{"class":115},"total_price ",[105,155502,161],{"class":111},[105,155504,155505],{"class":164}," 99.8\n",[105,155507,155508,155511,155513],{"class":107,"line":1171},[105,155509,155510],{"class":115},"is_finished ",[105,155512,161],{"class":111},[105,155514,125792],{"class":164},[14,155516,155517],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[47,155519,50717],{"id":50716},[14,155521,104351,155522,155525],{},[102,155523,155524],{},"type()"," 查看数据类型：",[96,155527,155529],{"className":30363,"code":155528,"language":30365,"meta":22,"style":22},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[102,155530,155531,155545,155559,155573,155587],{"__ignoreMap":22},[105,155532,155533,155535,155537,155539,155541,155543],{"class":107,"line":108},[105,155534,30400],{"class":164},[105,155536,116],{"class":115},[105,155538,103092],{"class":164},[105,155540,116],{"class":115},[105,155542,427],{"class":164},[105,155544,30482],{"class":115},[105,155546,155547,155549,155551,155553,155555,155557],{"class":107,"line":28},[105,155548,30400],{"class":164},[105,155550,116],{"class":115},[105,155552,103092],{"class":164},[105,155554,116],{"class":115},[105,155556,165],{"class":164},[105,155558,30482],{"class":115},[105,155560,155561,155563,155565,155567,155569,155571],{"class":107,"line":1171},[105,155562,30400],{"class":164},[105,155564,116],{"class":115},[105,155566,103092],{"class":164},[105,155568,116],{"class":115},[105,155570,5836],{"class":220},[105,155572,30482],{"class":115},[105,155574,155575,155577,155579,155581,155583,155585],{"class":107,"line":1186},[105,155576,30400],{"class":164},[105,155578,116],{"class":115},[105,155580,103092],{"class":164},[105,155582,116],{"class":115},[105,155584,31461],{"class":164},[105,155586,30482],{"class":115},[105,155588,155589,155591,155593,155595,155597,155599],{"class":107,"line":1192},[105,155590,30400],{"class":164},[105,155592,116],{"class":115},[105,155594,103092],{"class":164},[105,155596,116],{"class":115},[105,155598,95671],{"class":164},[105,155600,30482],{"class":115},[14,155602,155603],{},"输出类似：",[96,155605,155608],{"className":155606,"code":155607,"language":5179,"meta":22},[5177],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[102,155609,155607],{"__ignoreMap":22},[14,155611,9017,155612,107268,155614,155616,155617,155619,155620,21492,155622,155619,155624,155626],{},[102,155613,1346],{},[102,155615,119],{}," 的子类，",[102,155618,31461],{}," 可以当作 ",[102,155621,333],{},[102,155623,33972],{},[102,155625,307],{},"，但业务代码中不要滥用。",[96,155628,155630],{"className":30363,"code":155629,"language":30365,"meta":22,"style":22},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[102,155631,155632,155650],{"__ignoreMap":22},[105,155633,155634,155636,155638,155640,155642,155644,155647],{"class":107,"line":108},[105,155635,30400],{"class":164},[105,155637,116],{"class":115},[105,155639,31461],{"class":164},[105,155641,45551],{"class":111},[105,155643,25103],{"class":164},[105,155645,155646],{"class":115},")   ",[105,155648,155649],{"class":174},"# 2\n",[105,155651,155652,155654,155656,155658,155660,155662,155664],{"class":107,"line":28},[105,155653,30400],{"class":164},[105,155655,116],{"class":115},[105,155657,33972],{"class":164},[105,155659,45551],{"class":111},[105,155661,25103],{"class":164},[105,155663,45793],{"class":115},[105,155665,155666],{"class":174},"# 1\n",[47,155668,155670],{"id":155669},"_26-类型转换","2.6 类型转换",[14,155672,155673],{},"常用转换函数：",[96,155675,155677],{"className":30363,"code":155676,"language":30365,"meta":22,"style":22},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[102,155678,155679,155689,155700,155710],{"__ignoreMap":22},[105,155680,155681,155683,155685,155687],{"class":107,"line":108},[105,155682,119],{"class":164},[105,155684,116],{"class":115},[105,155686,54301],{"class":220},[105,155688,122],{"class":115},[105,155690,155691,155693,155695,155698],{"class":107,"line":28},[105,155692,155],{"class":164},[105,155694,116],{"class":115},[105,155696,155697],{"class":220},"\"3.14\"",[105,155699,122],{"class":115},[105,155701,155702,155704,155706,155708],{"class":107,"line":1171},[105,155703,1291],{"class":164},[105,155705,116],{"class":115},[105,155707,427],{"class":164},[105,155709,122],{"class":115},[105,155711,155712,155714,155716,155718],{"class":107,"line":1186},[105,155713,1346],{"class":164},[105,155715,116],{"class":115},[105,155717,333],{"class":164},[105,155719,122],{"class":115},[14,155721,15127],{},[96,155723,155725],{"className":30363,"code":155724,"language":30365,"meta":22,"style":22},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[102,155726,155727,155736,155747],{"__ignoreMap":22},[105,155728,155729,155731,155733],{"class":107,"line":108},[105,155730,146531],{"class":115},[105,155732,161],{"class":111},[105,155734,155735],{"class":220}," \"18\"\n",[105,155737,155738,155740,155742,155744],{"class":107,"line":28},[105,155739,146531],{"class":115},[105,155741,161],{"class":111},[105,155743,2373],{"class":164},[105,155745,155746],{"class":115},"(age)\n",[105,155748,155749,155751,155754,155756,155758],{"class":107,"line":1171},[105,155750,30400],{"class":164},[105,155752,155753],{"class":115},"(age ",[105,155755,597],{"class":111},[105,155757,25103],{"class":164},[105,155759,122],{"class":115},[14,155761,155762],{},"输入得到的内容永远是字符串：",[96,155764,155766],{"className":30363,"code":155765,"language":30365,"meta":22,"style":22},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[102,155767,155768,155784],{"__ignoreMap":22},[105,155769,155770,155773,155775,155777,155779,155782],{"class":107,"line":108},[105,155771,155772],{"class":115},"num ",[105,155774,161],{"class":111},[105,155776,60590],{"class":164},[105,155778,116],{"class":115},[105,155780,155781],{"class":220},"\"请输入数字:\"",[105,155783,122],{"class":115},[105,155785,155786,155788,155790,155792,155795],{"class":107,"line":28},[105,155787,30400],{"class":164},[105,155789,116],{"class":115},[105,155791,103092],{"class":164},[105,155793,155794],{"class":115},"(num))  ",[105,155796,155797],{"class":174},"# str\n",[14,155799,155800],{},"如果要做数学运算，必须转换：",[96,155802,155804],{"className":30363,"code":155803,"language":30365,"meta":22,"style":22},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[102,155805,155806,155824],{"__ignoreMap":22},[105,155807,155808,155810,155812,155814,155816,155818,155820,155822],{"class":107,"line":108},[105,155809,155772],{"class":115},[105,155811,161],{"class":111},[105,155813,2373],{"class":164},[105,155815,116],{"class":115},[105,155817,53806],{"class":164},[105,155819,116],{"class":115},[105,155821,155781],{"class":220},[105,155823,30482],{"class":115},[105,155825,155826,155828,155830,155832,155834],{"class":107,"line":28},[105,155827,30400],{"class":164},[105,155829,45604],{"class":115},[105,155831,597],{"class":111},[105,155833,2029],{"class":164},[105,155835,122],{"class":115},[14,155837,155838],{},"常见错误：",[96,155840,155842],{"className":30363,"code":155841,"language":30365,"meta":22,"style":22},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[102,155843,155844,155857],{"__ignoreMap":22},[105,155845,155846,155848,155850,155852,155854],{"class":107,"line":108},[105,155847,119],{"class":164},[105,155849,116],{"class":115},[105,155851,155697],{"class":220},[105,155853,155646],{"class":115},[105,155855,155856],{"class":174},"# 错误\n",[105,155858,155859,155861,155863,155866,155869],{"class":107,"line":28},[105,155860,119],{"class":164},[105,155862,116],{"class":115},[105,155864,155865],{"class":220},"\"abc\"",[105,155867,155868],{"class":115},")    ",[105,155870,155856],{"class":174},[14,155872,155873],{},"正确写法：",[96,155875,155877],{"className":30363,"code":155876,"language":30365,"meta":22,"style":22},"num = float(\"3.14\")\n",[102,155878,155879],{"__ignoreMap":22},[105,155880,155881,155883,155885,155887,155889,155891],{"class":107,"line":108},[105,155882,155772],{"class":115},[105,155884,161],{"class":111},[105,155886,109782],{"class":164},[105,155888,116],{"class":115},[105,155890,155697],{"class":220},[105,155892,122],{"class":115},[47,155894,155896],{"id":155895},"_27-运算符","2.7 运算符",[76,155898,155900],{"id":155899},"_271-算术运算符","2.7.1 算术运算符",[253,155902,155903,155914],{},[256,155904,155905],{},[259,155906,155907,155910,155912],{},[262,155908,155909],{},"运算符",[262,155911,25854],{},[262,155913,27477],{},[300,155915,155916,155930,155944,155958,155972,155986,156000],{},[259,155917,155918,155922,155925],{},[305,155919,155920],{},[102,155921,597],{},[305,155923,155924],{},"加法",[305,155926,155927],{},[102,155928,155929],{},"1 + 2",[259,155931,155932,155936,155939],{},[305,155933,155934],{},[102,155935,648],{},[305,155937,155938],{},"减法",[305,155940,155941],{},[102,155942,155943],{},"5 - 3",[259,155945,155946,155950,155953],{},[305,155947,155948],{},[102,155949,571],{},[305,155951,155952],{},"乘法",[305,155954,155955],{},[102,155956,155957],{},"2 * 3",[259,155959,155960,155964,155967],{},[305,155961,155962],{},[102,155963,700],{},[305,155965,155966],{},"除法，结果是浮点数",[305,155968,155969],{},[102,155970,155971],{},"5 \u002F 2",[259,155973,155974,155978,155981],{},[305,155975,155976],{},[102,155977,33314],{},[305,155979,155980],{},"整除",[305,155982,155983],{},[102,155984,155985],{},"5 \u002F\u002F 2",[259,155987,155988,155992,155995],{},[305,155989,155990],{},[102,155991,444],{},[305,155993,155994],{},"取余",[305,155996,155997],{},[102,155998,155999],{},"5 % 2",[259,156001,156002,156006,156009],{},[305,156003,156004],{},[102,156005,10653],{},[305,156007,156008],{},"幂运算",[305,156010,156011],{},[102,156012,156013],{},"2 ** 3",[14,156015,15127],{},[96,156017,156019],{"className":30363,"code":156018,"language":30365,"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",[102,156020,156021,156039,156056,156073],{"__ignoreMap":22},[105,156022,156023,156025,156027,156029,156032,156034,156036],{"class":107,"line":108},[105,156024,30400],{"class":164},[105,156026,116],{"class":115},[105,156028,435],{"class":164},[105,156030,156031],{"class":111}," \u002F",[105,156033,14747],{"class":164},[105,156035,155646],{"class":115},[105,156037,156038],{"class":174},"# 2.5\n",[105,156040,156041,156043,156045,156047,156050,156052,156054],{"class":107,"line":28},[105,156042,30400],{"class":164},[105,156044,116],{"class":115},[105,156046,435],{"class":164},[105,156048,156049],{"class":111}," \u002F\u002F",[105,156051,14747],{"class":164},[105,156053,45793],{"class":115},[105,156055,155649],{"class":174},[105,156057,156058,156060,156062,156064,156067,156069,156071],{"class":107,"line":1171},[105,156059,30400],{"class":164},[105,156061,116],{"class":115},[105,156063,435],{"class":164},[105,156065,156066],{"class":111}," %",[105,156068,14747],{"class":164},[105,156070,155646],{"class":115},[105,156072,155666],{"class":174},[105,156074,156075,156077,156079,156081,156084,156086,156088],{"class":107,"line":1186},[105,156076,30400],{"class":164},[105,156078,116],{"class":115},[105,156080,193],{"class":164},[105,156082,156083],{"class":111}," **",[105,156085,78055],{"class":164},[105,156087,45793],{"class":115},[105,156089,156090],{"class":174},"# 8\n",[76,156092,156094],{"id":156093},"_272-赋值运算符","2.7.2 赋值运算符",[96,156096,156098],{"className":30363,"code":156097,"language":30365,"meta":22,"style":22},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[102,156099,156100,156108,156116,156124,156132],{"__ignoreMap":22},[105,156101,156102,156104,156106],{"class":107,"line":108},[105,156103,155772],{"class":115},[105,156105,161],{"class":111},[105,156107,58413],{"class":164},[105,156109,156110,156112,156114],{"class":107,"line":28},[105,156111,155772],{"class":115},[105,156113,9469],{"class":111},[105,156115,54412],{"class":164},[105,156117,156118,156120,156122],{"class":107,"line":1171},[105,156119,155772],{"class":115},[105,156121,150237],{"class":111},[105,156123,47708],{"class":164},[105,156125,156126,156128,156130],{"class":107,"line":1186},[105,156127,155772],{"class":115},[105,156129,137133],{"class":111},[105,156131,120021],{"class":164},[105,156133,156134,156136,156139],{"class":107,"line":1192},[105,156135,155772],{"class":115},[105,156137,156138],{"class":111},"\u002F=",[105,156140,47708],{"class":164},[14,156142,156143],{},"等价关系：",[96,156145,156147],{"className":30363,"code":156146,"language":30365,"meta":22,"style":22},"num += 1\nnum = num + 1\n",[102,156148,156149,156157],{"__ignoreMap":22},[105,156150,156151,156153,156155],{"class":107,"line":108},[105,156152,155772],{"class":115},[105,156154,9469],{"class":111},[105,156156,55684],{"class":164},[105,156158,156159,156161,156163,156166,156168],{"class":107,"line":28},[105,156160,155772],{"class":115},[105,156162,161],{"class":111},[105,156164,156165],{"class":115}," num ",[105,156167,597],{"class":111},[105,156169,55684],{"class":164},[14,156171,156172,156173,101003,156176,28370],{},"Python 没有 ",[102,156174,156175],{},"num++",[102,156177,156178],{},"num--",[76,156180,156182],{"id":156181},"_273-比较运算符","2.7.3 比较运算符",[14,156184,156185],{},"比较运算结果是布尔值。",[96,156187,156189],{"className":30363,"code":156188,"language":30365,"meta":22,"style":22},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[102,156190,156191,156205,156220,156234],{"__ignoreMap":22},[105,156192,156193,156195,156197,156199,156201,156203],{"class":107,"line":108},[105,156194,30400],{"class":164},[105,156196,116],{"class":115},[105,156198,562],{"class":164},[105,156200,26207],{"class":111},[105,156202,2139],{"class":164},[105,156204,122],{"class":115},[105,156206,156207,156209,156211,156213,156216,156218],{"class":107,"line":28},[105,156208,30400],{"class":164},[105,156210,116],{"class":115},[105,156212,562],{"class":164},[105,156214,156215],{"class":111}," >=",[105,156217,2029],{"class":164},[105,156219,122],{"class":115},[105,156221,156222,156224,156226,156228,156230,156232],{"class":107,"line":1171},[105,156223,30400],{"class":164},[105,156225,116],{"class":115},[105,156227,562],{"class":164},[105,156229,101544],{"class":111},[105,156231,2074],{"class":164},[105,156233,122],{"class":115},[105,156235,156236,156238,156240,156242,156245,156247],{"class":107,"line":1186},[105,156237,30400],{"class":164},[105,156239,116],{"class":115},[105,156241,562],{"class":164},[105,156243,156244],{"class":111}," !=",[105,156246,2074],{"class":164},[105,156248,122],{"class":115},[14,156250,156251,156252,156254,156255,28370],{},"注意：判断相等用 ",[102,156253,2940],{},"，赋值用 ",[102,156256,161],{},[96,156258,156260],{"className":30363,"code":156259,"language":30365,"meta":22,"style":22},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[102,156261,156262,156274],{"__ignoreMap":22},[105,156263,156264,156266,156268,156271],{"class":107,"line":108},[105,156265,146531],{"class":115},[105,156267,161],{"class":111},[105,156269,156270],{"class":164}," 18",[105,156272,156273],{"class":174},"       # 赋值\n",[105,156275,156276,156278,156280,156282],{"class":107,"line":28},[105,156277,146531],{"class":115},[105,156279,2940],{"class":111},[105,156281,156270],{"class":164},[105,156283,156284],{"class":174},"      # 判断是否相等\n",[76,156286,156288],{"id":156287},"_274-逻辑运算符","2.7.4 逻辑运算符",[253,156290,156291,156299],{},[256,156292,156293],{},[259,156294,156295,156297],{},[262,156296,155909],{},[262,156298,25854],{},[300,156300,156301,156310,156319],{},[259,156302,156303,156307],{},[305,156304,156305],{},[102,156306,30447],{},[305,156308,156309],{},"并且",[259,156311,156312,156316],{},[305,156313,156314],{},[102,156315,115075],{},[305,156317,156318],{},"或者",[259,156320,156321,156326],{},[305,156322,156323],{},[102,156324,156325],{},"not",[305,156327,156328],{},"取反",[96,156330,156332],{"className":30363,"code":156331,"language":30365,"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",[102,156333,156334,156342,156351,156355,156370,156384],{"__ignoreMap":22},[105,156335,156336,156338,156340],{"class":107,"line":108},[105,156337,146531],{"class":115},[105,156339,161],{"class":111},[105,156341,88050],{"class":164},[105,156343,156344,156347,156349],{"class":107,"line":28},[105,156345,156346],{"class":115},"has_ticket ",[105,156348,161],{"class":111},[105,156350,153584],{"class":164},[105,156352,156353],{"class":107,"line":1171},[105,156354,2391],{"emptyLinePlaceholder":32},[105,156356,156357,156359,156361,156363,156365,156367],{"class":107,"line":1186},[105,156358,30400],{"class":164},[105,156360,155753],{"class":115},[105,156362,1701],{"class":111},[105,156364,156270],{"class":164},[105,156366,120414],{"class":111},[105,156368,156369],{"class":115}," has_ticket)\n",[105,156371,156372,156374,156376,156378,156380,156382],{"class":107,"line":1192},[105,156373,30400],{"class":164},[105,156375,155753],{"class":115},[105,156377,1026],{"class":111},[105,156379,156270],{"class":164},[105,156381,114186],{"class":111},[105,156383,156369],{"class":115},[105,156385,156386,156388,156390,156392],{"class":107,"line":1206},[105,156387,30400],{"class":164},[105,156389,116],{"class":115},[105,156391,156325],{"class":111},[105,156393,156369],{"class":115},[47,156395,156397],{"id":156396},"_28-字符串定义","2.8 字符串定义",[14,156399,156400],{},"三种常见写法：",[96,156402,156404],{"className":30363,"code":156403,"language":30365,"meta":22,"style":22},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[102,156405,156406,156416,156425,156435],{"__ignoreMap":22},[105,156407,156408,156411,156413],{"class":107,"line":108},[105,156409,156410],{"class":115},"name1 ",[105,156412,161],{"class":111},[105,156414,156415],{"class":220}," '小明'\n",[105,156417,156418,156421,156423],{"class":107,"line":28},[105,156419,156420],{"class":115},"name2 ",[105,156422,161],{"class":111},[105,156424,149338],{"class":220},[105,156426,156427,156430,156432],{"class":107,"line":1171},[105,156428,156429],{"class":115},"text ",[105,156431,161],{"class":111},[105,156433,156434],{"class":220}," \"\"\"这是多行字符串\n",[105,156436,156437],{"class":107,"line":1186},[105,156438,156439],{"class":220},"可以换行\"\"\"\n",[14,156441,156442],{},"字符串中包含引号：",[96,156444,156446],{"className":30363,"code":156445,"language":30365,"meta":22,"style":22},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[102,156447,156448,156458,156468],{"__ignoreMap":22},[105,156449,156450,156453,156455],{"class":107,"line":108},[105,156451,156452],{"class":115},"msg ",[105,156454,161],{"class":111},[105,156456,156457],{"class":220}," \"他说:'你好'\"\n",[105,156459,156460,156463,156465],{"class":107,"line":28},[105,156461,156462],{"class":115},"msg2 ",[105,156464,161],{"class":111},[105,156466,156467],{"class":220}," '他说:\"你好\"'\n",[105,156469,156470,156473,156475,156478,156481,156484,156486],{"class":107,"line":1171},[105,156471,156472],{"class":115},"msg3 ",[105,156474,161],{"class":111},[105,156476,156477],{"class":220}," \"他说:",[105,156479,156480],{"class":164},"\\\"",[105,156482,156483],{"class":220},"你好",[105,156485,156480],{"class":164},[105,156487,25118],{"class":220},[14,156489,156490],{},"常见转义字符：",[253,156492,156493,156502],{},[256,156494,156495],{},[259,156496,156497,156500],{},[262,156498,156499],{},"写法",[262,156501,100685],{},[300,156503,156504,156514,156523,156533,156542],{},[259,156505,156506,156511],{},[305,156507,156508],{},[102,156509,156510],{},"\\n",[305,156512,156513],{},"换行",[259,156515,156516,156520],{},[305,156517,156518],{},[102,156519,1222],{},[305,156521,156522],{},"制表符",[259,156524,156525,156530],{},[305,156526,156527],{},[102,156528,156529],{},"\\\\",[305,156531,156532],{},"反斜杠",[259,156534,156535,156539],{},[305,156536,156537],{},[102,156538,156480],{},[305,156540,156541],{},"双引号",[259,156543,156544,156549],{},[305,156545,156546],{},[102,156547,156548],{},"\\'",[305,156550,156551],{},"单引号",[47,156553,156555],{"id":156554},"_29-字符串拼接","2.9 字符串拼接",[96,156557,156559],{"className":30363,"code":156558,"language":30365,"meta":22,"style":22},"name = \"小明\"\nprint(\"你好，\" + name)\n",[102,156560,156561,156569],{"__ignoreMap":22},[105,156562,156563,156565,156567],{"class":107,"line":108},[105,156564,146521],{"class":115},[105,156566,161],{"class":111},[105,156568,149338],{"class":220},[105,156570,156571,156573,156575,156578,156580],{"class":107,"line":28},[105,156572,30400],{"class":164},[105,156574,116],{"class":115},[105,156576,156577],{"class":220},"\"你好，\"",[105,156579,45551],{"class":111},[105,156581,156582],{"class":115}," name)\n",[14,156584,156585],{},"字符串只能和字符串拼接：",[96,156587,156589],{"className":30363,"code":156588,"language":30365,"meta":22,"style":22},"age = 18\nprint(\"年龄:\" + str(age))\n",[102,156590,156591,156599],{"__ignoreMap":22},[105,156592,156593,156595,156597],{"class":107,"line":108},[105,156594,146531],{"class":115},[105,156596,161],{"class":111},[105,156598,146536],{"class":164},[105,156600,156601,156603,156605,156607,156609,156611],{"class":107,"line":28},[105,156602,30400],{"class":164},[105,156604,116],{"class":115},[105,156606,146502],{"class":220},[105,156608,45551],{"class":111},[105,156610,73904],{"class":164},[105,156612,156613],{"class":115},"(age))\n",[14,156615,156616],{},"更推荐使用格式化字符串。",[47,156618,156620],{"id":156619},"_210-字符串格式化","2.10 字符串格式化",[76,156622,156624],{"id":156623},"_2101-百分号格式化","2.10.1 百分号格式化",[96,156626,156628],{"className":30363,"code":156627,"language":30365,"meta":22,"style":22},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[102,156629,156630,156638,156646,156655,156659],{"__ignoreMap":22},[105,156631,156632,156634,156636],{"class":107,"line":108},[105,156633,146521],{"class":115},[105,156635,161],{"class":111},[105,156637,149338],{"class":220},[105,156639,156640,156642,156644],{"class":107,"line":28},[105,156641,146531],{"class":115},[105,156643,161],{"class":111},[105,156645,146536],{"class":164},[105,156647,156648,156650,156652],{"class":107,"line":1171},[105,156649,155343],{"class":115},[105,156651,161],{"class":111},[105,156653,156654],{"class":164}," 95.5\n",[105,156656,156657],{"class":107,"line":1186},[105,156658,2391],{"emptyLinePlaceholder":32},[105,156660,156661,156663,156665,156668,156671,156674,156677,156680,156683,156685,156687],{"class":107,"line":1192},[105,156662,30400],{"class":164},[105,156664,116],{"class":115},[105,156666,156667],{"class":220},"\"姓名:",[105,156669,156670],{"class":164},"%s",[105,156672,156673],{"class":220}," 年龄:",[105,156675,156676],{"class":164},"%d",[105,156678,156679],{"class":220}," 分数:",[105,156681,156682],{"class":164},"%.1f",[105,156684,367],{"class":220},[105,156686,156066],{"class":111},[105,156688,156689],{"class":115}," (name, age, score))\n",[14,156691,156692],{},"常用占位符：",[253,156694,156695,156704],{},[256,156696,156697],{},[259,156698,156699,156702],{},[262,156700,156701],{},"占位符",[262,156703,25854],{},[300,156705,156706,156714,156722],{},[259,156707,156708,156712],{},[305,156709,156710],{},[102,156711,156670],{},[305,156713,155209],{},[259,156715,156716,156720],{},[305,156717,156718],{},[102,156719,156676],{},[305,156721,155187],{},[259,156723,156724,156729],{},[305,156725,156726],{},[102,156727,156728],{},"%f",[305,156730,155198],{},[14,156732,156733],{},"精度控制：",[96,156735,156737],{"className":30363,"code":156736,"language":30365,"meta":22,"style":22},"price = 12.3456\nprint(\"%.2f\" % price)\n",[102,156738,156739,156748],{"__ignoreMap":22},[105,156740,156741,156743,156745],{"class":107,"line":108},[105,156742,146666],{"class":115},[105,156744,161],{"class":111},[105,156746,156747],{"class":164}," 12.3456\n",[105,156749,156750,156752,156754,156756,156759,156761,156763],{"class":107,"line":28},[105,156751,30400],{"class":164},[105,156753,116],{"class":115},[105,156755,367],{"class":220},[105,156757,156758],{"class":164},"%.2f",[105,156760,367],{"class":220},[105,156762,156066],{"class":111},[105,156764,156765],{"class":115}," price)\n",[76,156767,156769],{"id":156768},"_2102-format方法","2.10.2 format方法",[96,156771,156773],{"className":30363,"code":156772,"language":30365,"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",[102,156774,156775,156783,156791,156795,156814,156834],{"__ignoreMap":22},[105,156776,156777,156779,156781],{"class":107,"line":108},[105,156778,146521],{"class":115},[105,156780,161],{"class":111},[105,156782,149338],{"class":220},[105,156784,156785,156787,156789],{"class":107,"line":28},[105,156786,146531],{"class":115},[105,156788,161],{"class":111},[105,156790,146536],{"class":164},[105,156792,156793],{"class":107,"line":1171},[105,156794,2391],{"emptyLinePlaceholder":32},[105,156796,156797,156799,156801,156803,156805,156807,156809,156811],{"class":107,"line":1186},[105,156798,30400],{"class":164},[105,156800,116],{"class":115},[105,156802,156667],{"class":220},[105,156804,32444],{"class":164},[105,156806,156673],{"class":220},[105,156808,32444],{"class":164},[105,156810,367],{"class":220},[105,156812,156813],{"class":115},".format(name, age))\n",[105,156815,156816,156818,156820,156822,156825,156827,156830,156832],{"class":107,"line":1192},[105,156817,30400],{"class":164},[105,156819,116],{"class":115},[105,156821,156667],{"class":220},[105,156823,156824],{"class":164},"{0}",[105,156826,156673],{"class":220},[105,156828,156829],{"class":164},"{1}",[105,156831,367],{"class":220},[105,156833,156813],{"class":115},[105,156835,156836,156838,156840,156842,156845,156847,156850,156852,156855,156857,156859,156862,156864,156866],{"class":107,"line":1206},[105,156837,30400],{"class":164},[105,156839,116],{"class":115},[105,156841,156667],{"class":220},[105,156843,156844],{"class":164},"{name}",[105,156846,156673],{"class":220},[105,156848,156849],{"class":164},"{age}",[105,156851,367],{"class":220},[105,156853,156854],{"class":115},".format(",[105,156856,79795],{"class":5208},[105,156858,161],{"class":111},[105,156860,156861],{"class":115},"name, ",[105,156863,70206],{"class":5208},[105,156865,161],{"class":111},[105,156867,156868],{"class":115},"age))\n",[76,156870,156872],{"id":156871},"_2103-f-string","2.10.3 f-string",[14,156874,156875],{},"推荐写法：",[96,156877,156879],{"className":30363,"code":156878,"language":30365,"meta":22,"style":22},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[102,156880,156881,156889,156897,156905,156909],{"__ignoreMap":22},[105,156882,156883,156885,156887],{"class":107,"line":108},[105,156884,146521],{"class":115},[105,156886,161],{"class":111},[105,156888,149338],{"class":220},[105,156890,156891,156893,156895],{"class":107,"line":28},[105,156892,146531],{"class":115},[105,156894,161],{"class":111},[105,156896,146536],{"class":164},[105,156898,156899,156901,156903],{"class":107,"line":1171},[105,156900,155343],{"class":115},[105,156902,161],{"class":111},[105,156904,156654],{"class":164},[105,156906,156907],{"class":107,"line":1186},[105,156908,2391],{"emptyLinePlaceholder":32},[105,156910,156911,156913,156915,156917,156919,156921,156923,156925,156927,156929,156931,156933,156935,156937,156940,156943,156945,156947],{"class":107,"line":1192},[105,156912,30400],{"class":164},[105,156914,116],{"class":115},[105,156916,168],{"class":111},[105,156918,156667],{"class":220},[105,156920,1012],{"class":164},[105,156922,79795],{"class":115},[105,156924,1062],{"class":164},[105,156926,156673],{"class":220},[105,156928,1012],{"class":164},[105,156930,70206],{"class":115},[105,156932,1062],{"class":164},[105,156934,156679],{"class":220},[105,156936,1012],{"class":164},[105,156938,156939],{"class":115},"score",[105,156941,156942],{"class":111},":.1f",[105,156944,1062],{"class":164},[105,156946,367],{"class":220},[105,156948,122],{"class":115},[14,156950,156951],{},"表达式也可以放进去：",[96,156953,156955],{"className":30363,"code":156954,"language":30365,"meta":22,"style":22},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[102,156956,156957,156965,156973],{"__ignoreMap":22},[105,156958,156959,156961,156963],{"class":107,"line":108},[105,156960,146666],{"class":115},[105,156962,161],{"class":111},[105,156964,146671],{"class":164},[105,156966,156967,156969,156971],{"class":107,"line":28},[105,156968,146676],{"class":115},[105,156970,161],{"class":111},[105,156972,54412],{"class":164},[105,156974,156975,156977,156979,156981,156984,156986,156988,156990,156993,156995,156998],{"class":107,"line":1171},[105,156976,30400],{"class":164},[105,156978,116],{"class":115},[105,156980,168],{"class":111},[105,156982,156983],{"class":220},"\"总价:",[105,156985,1012],{"class":164},[105,156987,146666],{"class":115},[105,156989,571],{"class":111},[105,156991,156992],{"class":115}," count",[105,156994,1062],{"class":164},[105,156996,156997],{"class":220},"元\"",[105,156999,122],{"class":115},[47,157001,157003],{"id":157002},"_211-input输入","2.11 input输入",[14,157005,157006,157009],{},[102,157007,157008],{},"input()"," 会暂停程序，等待用户输入。",[96,157011,157013],{"className":30363,"code":157012,"language":30365,"meta":22,"style":22},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[102,157014,157015,157029],{"__ignoreMap":22},[105,157016,157017,157019,157021,157023,157025,157027],{"class":107,"line":108},[105,157018,146521],{"class":115},[105,157020,161],{"class":111},[105,157022,60590],{"class":164},[105,157024,116],{"class":115},[105,157026,152364],{"class":220},[105,157028,122],{"class":115},[105,157030,157031,157033,157035,157037,157040,157042,157044,157046,157048],{"class":107,"line":28},[105,157032,30400],{"class":164},[105,157034,116],{"class":115},[105,157036,168],{"class":111},[105,157038,157039],{"class":220},"\"你好，",[105,157041,1012],{"class":164},[105,157043,79795],{"class":115},[105,157045,1062],{"class":164},[105,157047,367],{"class":220},[105,157049,122],{"class":115},[14,157051,157052],{},"输入整数：",[96,157054,157056],{"className":30363,"code":157055,"language":30365,"meta":22,"style":22},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[102,157057,157058,157076],{"__ignoreMap":22},[105,157059,157060,157062,157064,157066,157068,157070,157072,157074],{"class":107,"line":108},[105,157061,146531],{"class":115},[105,157063,161],{"class":111},[105,157065,2373],{"class":164},[105,157067,116],{"class":115},[105,157069,53806],{"class":164},[105,157071,116],{"class":115},[105,157073,152379],{"class":220},[105,157075,30482],{"class":115},[105,157077,157078,157080,157082,157084,157087,157089,157091,157093,157096,157098],{"class":107,"line":28},[105,157079,30400],{"class":164},[105,157081,116],{"class":115},[105,157083,168],{"class":111},[105,157085,157086],{"class":220},"\"明年你",[105,157088,1012],{"class":164},[105,157090,146531],{"class":115},[105,157092,597],{"class":111},[105,157094,157095],{"class":164}," 1}",[105,157097,149389],{"class":220},[105,157099,122],{"class":115},[14,157101,157102],{},"输入小数：",[96,157104,157106],{"className":30363,"code":157105,"language":30365,"meta":22,"style":22},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[102,157107,157108,157127],{"__ignoreMap":22},[105,157109,157110,157112,157114,157116,157118,157120,157122,157125],{"class":107,"line":108},[105,157111,155316],{"class":115},[105,157113,161],{"class":111},[105,157115,109782],{"class":164},[105,157117,116],{"class":115},[105,157119,53806],{"class":164},[105,157121,116],{"class":115},[105,157123,157124],{"class":220},"\"请输入身高:\"",[105,157126,30482],{"class":115},[105,157128,157129,157131,157133,157135,157138,157140,157142,157145,157147,157150],{"class":107,"line":28},[105,157130,30400],{"class":164},[105,157132,116],{"class":115},[105,157134,168],{"class":111},[105,157136,157137],{"class":220},"\"身高:",[105,157139,1012],{"class":164},[105,157141,24966],{"class":115},[105,157143,157144],{"class":111},":.2f",[105,157146,1062],{"class":164},[105,157148,157149],{"class":220},"米\"",[105,157151,122],{"class":115},[47,157153,157155],{"id":157154},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157157,123277],{},[59,157159,157160,157163,157166,157169],{},[62,157161,157162],{},"输入商品单价。",[62,157164,157165],{},"输入购买数量。",[62,157167,157168],{},"输入折扣，例如 0.8 表示八折。",[62,157170,157171],{},"输出最终金额，保留两位小数。",[14,157173,10027],{},[96,157175,157177],{"className":30363,"code":157176,"language":30365,"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",[102,157178,157179,157198,157217,157237,157241,157261,157265,157288,157309,157331],{"__ignoreMap":22},[105,157180,157181,157183,157185,157187,157189,157191,157193,157196],{"class":107,"line":108},[105,157182,146666],{"class":115},[105,157184,161],{"class":111},[105,157186,109782],{"class":164},[105,157188,116],{"class":115},[105,157190,53806],{"class":164},[105,157192,116],{"class":115},[105,157194,157195],{"class":220},"\"请输入商品单价:\"",[105,157197,30482],{"class":115},[105,157199,157200,157202,157204,157206,157208,157210,157212,157215],{"class":107,"line":28},[105,157201,146676],{"class":115},[105,157203,161],{"class":111},[105,157205,2373],{"class":164},[105,157207,116],{"class":115},[105,157209,53806],{"class":164},[105,157211,116],{"class":115},[105,157213,157214],{"class":220},"\"请输入购买数量:\"",[105,157216,30482],{"class":115},[105,157218,157219,157222,157224,157226,157228,157230,157232,157235],{"class":107,"line":1171},[105,157220,157221],{"class":115},"discount ",[105,157223,161],{"class":111},[105,157225,109782],{"class":164},[105,157227,116],{"class":115},[105,157229,53806],{"class":164},[105,157231,116],{"class":115},[105,157233,157234],{"class":220},"\"请输入折扣:\"",[105,157236,30482],{"class":115},[105,157238,157239],{"class":107,"line":1186},[105,157240,2391],{"emptyLinePlaceholder":32},[105,157242,157243,157246,157248,157251,157253,157256,157258],{"class":107,"line":1192},[105,157244,157245],{"class":115},"total ",[105,157247,161],{"class":111},[105,157249,157250],{"class":115}," price ",[105,157252,571],{"class":111},[105,157254,157255],{"class":115}," count ",[105,157257,571],{"class":111},[105,157259,157260],{"class":115}," discount\n",[105,157262,157263],{"class":107,"line":1206},[105,157264,2391],{"emptyLinePlaceholder":32},[105,157266,157267,157269,157271,157273,157276,157278,157280,157282,157284,157286],{"class":107,"line":1212},[105,157268,30400],{"class":164},[105,157270,116],{"class":115},[105,157272,168],{"class":111},[105,157274,157275],{"class":220},"\"商品单价:",[105,157277,1012],{"class":164},[105,157279,79800],{"class":115},[105,157281,157144],{"class":111},[105,157283,1062],{"class":164},[105,157285,367],{"class":220},[105,157287,122],{"class":115},[105,157289,157290,157292,157294,157296,157299,157301,157303,157305,157307],{"class":107,"line":1303},[105,157291,30400],{"class":164},[105,157293,116],{"class":115},[105,157295,168],{"class":111},[105,157297,157298],{"class":220},"\"购买数量:",[105,157300,1012],{"class":164},[105,157302,84419],{"class":115},[105,157304,1062],{"class":164},[105,157306,367],{"class":220},[105,157308,122],{"class":115},[105,157310,157311,157313,157315,157317,157320,157322,157325,157327,157329],{"class":107,"line":1309},[105,157312,30400],{"class":164},[105,157314,116],{"class":115},[105,157316,168],{"class":111},[105,157318,157319],{"class":220},"\"折扣:",[105,157321,1012],{"class":164},[105,157323,157324],{"class":115},"discount",[105,157326,1062],{"class":164},[105,157328,367],{"class":220},[105,157330,122],{"class":115},[105,157332,157333,157335,157337,157339,157342,157344,157347,157349,157351,157353],{"class":107,"line":1321},[105,157334,30400],{"class":164},[105,157336,116],{"class":115},[105,157338,168],{"class":111},[105,157340,157341],{"class":220},"\"应付金额:",[105,157343,1012],{"class":164},[105,157345,157346],{"class":115},"total",[105,157348,157144],{"class":111},[105,157350,1062],{"class":164},[105,157352,156997],{"class":220},[105,157354,122],{"class":115},[47,157356,157358],{"id":157357},"_213-易错点","2.13 易错点",[59,157360,157361,157366,157372,157380,157383],{},[62,157362,157363,157365],{},[102,157364,157008],{}," 的结果是字符串，做运算前要转换。",[62,157367,157368,157369,28370],{},"字符串拼接时，数字要先 ",[102,157370,157371],{},"str()",[62,157373,157374,157376,157377,157379],{},[102,157375,161],{}," 是赋值，",[102,157378,2940],{}," 是比较。",[62,157381,157382],{},"Python 没有自增自减运算符。",[62,157384,157385],{},"浮点数计算可能有精度误差：",[96,157387,157389],{"className":30363,"code":157388,"language":30365,"meta":22,"style":22},"print(0.1 + 0.2)\n",[102,157390,157391],{"__ignoreMap":22},[105,157392,157393,157395,157397,157399,157401,157404],{"class":107,"line":108},[105,157394,30400],{"class":164},[105,157396,116],{"class":115},[105,157398,86195],{"class":164},[105,157400,45551],{"class":111},[105,157402,157403],{"class":164}," 0.2",[105,157405,122],{"class":115},[14,157407,157408,157409,157412],{},"金额计算如果要求严格，可以后续学习 ",[102,157410,157411],{},"decimal"," 模块。",[47,157414,157416],{"id":157415},"_214-本章练习","2.14 本章练习",[59,157418,157419,157422,157425,157428,157431],{},[62,157420,157421],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[62,157423,157424],{},"输入圆的半径，计算面积，保留两位小数。",[62,157426,157427],{},"输入工资和奖金，计算总收入。",[62,157429,157430],{},"输入摄氏温度，转换为华氏温度。",[62,157432,157433],{},"写一个 BMI 计算程序：",[96,157435,157438],{"className":157436,"code":157437,"language":5179,"meta":22},[5177],"BMI = 体重kg \u002F 身高m ** 2\n",[102,157439,157437],{"__ignoreMap":22},[5118,157441,157442],{},"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":28,"depth":28,"links":157444},[157445,157446,157447,157448,157449,157450,157451,157457,157458,157459,157464,157465,157466,157467],{"id":155006,"depth":28,"text":155007},{"id":155115,"depth":28,"text":155116},{"id":155286,"depth":28,"text":155287},{"id":155363,"depth":28,"text":155364},{"id":50716,"depth":28,"text":50717},{"id":155669,"depth":28,"text":155670},{"id":155895,"depth":28,"text":155896,"children":157452},[157453,157454,157455,157456],{"id":155899,"depth":1171,"text":155900},{"id":156093,"depth":1171,"text":156094},{"id":156181,"depth":1171,"text":156182},{"id":156287,"depth":1171,"text":156288},{"id":156396,"depth":28,"text":156397},{"id":156554,"depth":28,"text":156555},{"id":156619,"depth":28,"text":156620,"children":157460},[157461,157462,157463],{"id":156623,"depth":1171,"text":156624},{"id":156768,"depth":1171,"text":156769},{"id":156871,"depth":1171,"text":156872},{"id":157002,"depth":28,"text":157003},{"id":157154,"depth":28,"text":157155},{"id":157357,"depth":28,"text":157358},{"id":157415,"depth":28,"text":157416},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":154998,"description":23369},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157474,"title":157475,"body":157476,"description":23369,"extension":30,"meta":159112,"navigation":32,"path":159113,"seo":159114,"stem":159115,"__hash__":159116},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157477,"toc":159093},[157478,157481,157485,157488,157503,157506,157534,157538,157588,157590,157606,157609,157635,157638,157642,157709,157712,157728,157732,157735,157853,157856,157863,157912,157918,157922,157925,158038,158041,158045,158049,158052,158102,158106,158109,158159,158163,158166,158204,158208,158211,158257,158260,158295,158299,158304,158307,158353,158355,158422,158426,158432,158543,158552,158556,158558,158569,158571,158737,158741,158743,158757,158759,158973,158977,158996,159013,159016,159062,159066,159090],[10,157479,157475],{"id":157480},"_3-判断语句",[47,157482,157484],{"id":157483},"_31-布尔值","3.1 布尔值",[14,157486,157487],{},"判断语句依赖布尔值：",[96,157489,157491],{"className":30363,"code":157490,"language":30365,"meta":22,"style":22},"True\nFalse\n",[102,157492,157493,157498],{"__ignoreMap":22},[105,157494,157495],{"class":107,"line":108},[105,157496,157497],{"class":164},"True\n",[105,157499,157500],{"class":107,"line":28},[105,157501,157502],{"class":164},"False\n",[14,157504,157505],{},"比较表达式会产生布尔值：",[96,157507,157509],{"className":30363,"code":157508,"language":30365,"meta":22,"style":22},"age = 18\nprint(age >= 18)  # True\n",[102,157510,157511,157519],{"__ignoreMap":22},[105,157512,157513,157515,157517],{"class":107,"line":108},[105,157514,146531],{"class":115},[105,157516,161],{"class":111},[105,157518,146536],{"class":164},[105,157520,157521,157523,157525,157527,157529,157531],{"class":107,"line":28},[105,157522,30400],{"class":164},[105,157524,155753],{"class":115},[105,157526,1701],{"class":111},[105,157528,156270],{"class":164},[105,157530,45793],{"class":115},[105,157532,157533],{"class":174},"# True\n",[47,157535,157537],{"id":157536},"_32-if基础语法","3.2 if基础语法",[96,157539,157541],{"className":30363,"code":157540,"language":30365,"meta":22,"style":22},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[102,157542,157543,157561,157565,157577],{"__ignoreMap":22},[105,157544,157545,157547,157549,157551,157553,157555,157557,157559],{"class":107,"line":108},[105,157546,146531],{"class":115},[105,157548,161],{"class":111},[105,157550,2373],{"class":164},[105,157552,116],{"class":115},[105,157554,53806],{"class":164},[105,157556,116],{"class":115},[105,157558,152379],{"class":220},[105,157560,30482],{"class":115},[105,157562,157563],{"class":107,"line":28},[105,157564,2391],{"emptyLinePlaceholder":32},[105,157566,157567,157569,157571,157573,157575],{"class":107,"line":1171},[105,157568,1522],{"class":111},[105,157570,15699],{"class":115},[105,157572,1701],{"class":111},[105,157574,156270],{"class":164},[105,157576,3730],{"class":115},[105,157578,157579,157581,157583,157586],{"class":107,"line":1186},[105,157580,31284],{"class":164},[105,157582,116],{"class":115},[105,157584,157585],{"class":220},"\"可以进入网吧\"",[105,157587,122],{"class":115},[14,157589,9017],{},[59,157591,157592,157597,157600,157603],{},[62,157593,157594,157596],{},[102,157595,1522],{}," 后面是条件表达式。",[62,157598,157599],{},"条件后面必须写冒号。",[62,157601,157602],{},"条件成立时执行缩进代码块。",[62,157604,157605],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157607,157608],{},"错误示例：",[96,157610,157612],{"className":30363,"code":157611,"language":30365,"meta":22,"style":22},"if age >= 18\n    print(\"可以进入\")\n",[102,157613,157614,157624],{"__ignoreMap":22},[105,157615,157616,157618,157620,157622],{"class":107,"line":108},[105,157617,1522],{"class":111},[105,157619,15699],{"class":115},[105,157621,1701],{"class":111},[105,157623,146536],{"class":164},[105,157625,157626,157628,157630,157633],{"class":107,"line":28},[105,157627,31284],{"class":164},[105,157629,116],{"class":115},[105,157631,157632],{"class":220},"\"可以进入\"",[105,157634,122],{"class":115},[14,157636,157637],{},"缺少冒号。",[47,157639,157641],{"id":157640},"_33-if-else","3.3 if else",[96,157643,157645],{"className":30363,"code":157644,"language":30365,"meta":22,"style":22},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[102,157646,157647,157665,157669,157681,157692,157698],{"__ignoreMap":22},[105,157648,157649,157651,157653,157655,157657,157659,157661,157663],{"class":107,"line":108},[105,157650,146531],{"class":115},[105,157652,161],{"class":111},[105,157654,2373],{"class":164},[105,157656,116],{"class":115},[105,157658,53806],{"class":164},[105,157660,116],{"class":115},[105,157662,152379],{"class":220},[105,157664,30482],{"class":115},[105,157666,157667],{"class":107,"line":28},[105,157668,2391],{"emptyLinePlaceholder":32},[105,157670,157671,157673,157675,157677,157679],{"class":107,"line":1171},[105,157672,1522],{"class":111},[105,157674,15699],{"class":115},[105,157676,1701],{"class":111},[105,157678,156270],{"class":164},[105,157680,3730],{"class":115},[105,157682,157683,157685,157687,157690],{"class":107,"line":1186},[105,157684,31284],{"class":164},[105,157686,116],{"class":115},[105,157688,157689],{"class":220},"\"成年人\"",[105,157691,122],{"class":115},[105,157693,157694,157696],{"class":107,"line":1192},[105,157695,1692],{"class":111},[105,157697,3730],{"class":115},[105,157699,157700,157702,157704,157707],{"class":107,"line":1206},[105,157701,31284],{"class":164},[105,157703,116],{"class":115},[105,157705,157706],{"class":220},"\"未成年人\"",[105,157708,122],{"class":115},[14,157710,157711],{},"执行逻辑：",[59,157713,157714,157720,157725],{},[62,157715,157716,157717,157719],{},"条件成立，执行 ",[102,157718,1522],{}," 代码块。",[62,157721,157722,157723,157719],{},"条件不成立，执行 ",[102,157724,1692],{},[62,157726,157727],{},"两个代码块只会执行其中一个。",[47,157729,157731],{"id":157730},"_34-if-elif-else","3.4 if elif else",[14,157733,157734],{},"多条件判断：",[96,157736,157738],{"className":30363,"code":157737,"language":30365,"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",[102,157739,157740,157758,157762,157776,157787,157801,157812,157825,157836,157842],{"__ignoreMap":22},[105,157741,157742,157744,157746,157748,157750,157752,157754,157756],{"class":107,"line":108},[105,157743,155343],{"class":115},[105,157745,161],{"class":111},[105,157747,2373],{"class":164},[105,157749,116],{"class":115},[105,157751,53806],{"class":164},[105,157753,116],{"class":115},[105,157755,152394],{"class":220},[105,157757,30482],{"class":115},[105,157759,157760],{"class":107,"line":28},[105,157761,2391],{"emptyLinePlaceholder":32},[105,157763,157764,157766,157769,157771,157774],{"class":107,"line":1171},[105,157765,1522],{"class":111},[105,157767,157768],{"class":115}," score ",[105,157770,1701],{"class":111},[105,157772,157773],{"class":164}," 90",[105,157775,3730],{"class":115},[105,157777,157778,157780,157782,157785],{"class":107,"line":1186},[105,157779,31284],{"class":164},[105,157781,116],{"class":115},[105,157783,157784],{"class":220},"\"优秀\"",[105,157786,122],{"class":115},[105,157788,157789,157792,157794,157796,157799],{"class":107,"line":1192},[105,157790,157791],{"class":111},"elif",[105,157793,157768],{"class":115},[105,157795,1701],{"class":111},[105,157797,157798],{"class":164}," 80",[105,157800,3730],{"class":115},[105,157802,157803,157805,157807,157810],{"class":107,"line":1206},[105,157804,31284],{"class":164},[105,157806,116],{"class":115},[105,157808,157809],{"class":220},"\"良好\"",[105,157811,122],{"class":115},[105,157813,157814,157816,157818,157820,157823],{"class":107,"line":1212},[105,157815,157791],{"class":111},[105,157817,157768],{"class":115},[105,157819,1701],{"class":111},[105,157821,157822],{"class":164}," 60",[105,157824,3730],{"class":115},[105,157826,157827,157829,157831,157834],{"class":107,"line":1303},[105,157828,31284],{"class":164},[105,157830,116],{"class":115},[105,157832,157833],{"class":220},"\"及格\"",[105,157835,122],{"class":115},[105,157837,157838,157840],{"class":107,"line":1309},[105,157839,1692],{"class":111},[105,157841,3730],{"class":115},[105,157843,157844,157846,157848,157851],{"class":107,"line":1321},[105,157845,31284],{"class":164},[105,157847,116],{"class":115},[105,157849,157850],{"class":220},"\"不及格\"",[105,157852,122],{"class":115},[14,157854,157855],{},"注意判断顺序很重要。",[14,157857,157858,157859,157862],{},"如果把 ",[102,157860,157861],{},"score >= 60"," 放在最前面：",[96,157864,157866],{"className":30363,"code":157865,"language":30365,"meta":22,"style":22},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[102,157867,157868,157880,157890,157902],{"__ignoreMap":22},[105,157869,157870,157872,157874,157876,157878],{"class":107,"line":108},[105,157871,1522],{"class":111},[105,157873,157768],{"class":115},[105,157875,1701],{"class":111},[105,157877,157822],{"class":164},[105,157879,3730],{"class":115},[105,157881,157882,157884,157886,157888],{"class":107,"line":28},[105,157883,31284],{"class":164},[105,157885,116],{"class":115},[105,157887,157833],{"class":220},[105,157889,122],{"class":115},[105,157891,157892,157894,157896,157898,157900],{"class":107,"line":1171},[105,157893,157791],{"class":111},[105,157895,157768],{"class":115},[105,157897,1701],{"class":111},[105,157899,157773],{"class":164},[105,157901,3730],{"class":115},[105,157903,157904,157906,157908,157910],{"class":107,"line":1186},[105,157905,31284],{"class":164},[105,157907,116],{"class":115},[105,157909,157784],{"class":220},[105,157911,122],{"class":115},[14,157913,157914,157915,157917],{},"成绩 95 会先满足 ",[102,157916,157861],{},"，后面的优秀分支就不会执行。",[47,157919,157921],{"id":157920},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157923,157924],{},"嵌套判断就是在一个判断内部再写判断。",[96,157926,157928],{"className":30363,"code":157927,"language":30365,"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",[102,157929,157930,157948,157963,157967,157979,157993,158003,158010,158021,158027],{"__ignoreMap":22},[105,157931,157932,157934,157936,157938,157940,157942,157944,157946],{"class":107,"line":108},[105,157933,146531],{"class":115},[105,157935,161],{"class":111},[105,157937,2373],{"class":164},[105,157939,116],{"class":115},[105,157941,53806],{"class":164},[105,157943,116],{"class":115},[105,157945,152379],{"class":220},[105,157947,30482],{"class":115},[105,157949,157950,157952,157954,157956,157958,157961],{"class":107,"line":28},[105,157951,156346],{"class":115},[105,157953,161],{"class":111},[105,157955,60590],{"class":164},[105,157957,116],{"class":115},[105,157959,157960],{"class":220},"\"是否有票(y\u002Fn):\"",[105,157962,122],{"class":115},[105,157964,157965],{"class":107,"line":1171},[105,157966,2391],{"emptyLinePlaceholder":32},[105,157968,157969,157971,157973,157975,157977],{"class":107,"line":1186},[105,157970,1522],{"class":111},[105,157972,15699],{"class":115},[105,157974,1701],{"class":111},[105,157976,156270],{"class":164},[105,157978,3730],{"class":115},[105,157980,157981,157983,157986,157988,157991],{"class":107,"line":1192},[105,157982,3092],{"class":111},[105,157984,157985],{"class":115}," has_ticket ",[105,157987,2940],{"class":111},[105,157989,157990],{"class":220}," \"y\"",[105,157992,3730],{"class":115},[105,157994,157995,157997,157999,158001],{"class":107,"line":1206},[105,157996,32436],{"class":164},[105,157998,116],{"class":115},[105,158000,157632],{"class":220},[105,158002,122],{"class":115},[105,158004,158005,158008],{"class":107,"line":1212},[105,158006,158007],{"class":111},"    else",[105,158009,3730],{"class":115},[105,158011,158012,158014,158016,158019],{"class":107,"line":1303},[105,158013,32436],{"class":164},[105,158015,116],{"class":115},[105,158017,158018],{"class":220},"\"请先买票\"",[105,158020,122],{"class":115},[105,158022,158023,158025],{"class":107,"line":1309},[105,158024,1692],{"class":111},[105,158026,3730],{"class":115},[105,158028,158029,158031,158033,158036],{"class":107,"line":1321},[105,158030,31284],{"class":164},[105,158032,116],{"class":115},[105,158034,158035],{"class":220},"\"未成年人禁止进入\"",[105,158037,122],{"class":115},[14,158039,158040],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[47,158042,158044],{"id":158043},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[76,158046,158048],{"id":158047},"_361-and","3.6.1 and",[14,158050,158051],{},"两个条件都成立才成立。",[96,158053,158055],{"className":30363,"code":158054,"language":30365,"meta":22,"style":22},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[102,158056,158057,158065,158073,158077,158092],{"__ignoreMap":22},[105,158058,158059,158061,158063],{"class":107,"line":108},[105,158060,146531],{"class":115},[105,158062,161],{"class":111},[105,158064,88050],{"class":164},[105,158066,158067,158069,158071],{"class":107,"line":28},[105,158068,156346],{"class":115},[105,158070,161],{"class":111},[105,158072,153584],{"class":164},[105,158074,158075],{"class":107,"line":1171},[105,158076,2391],{"emptyLinePlaceholder":32},[105,158078,158079,158081,158083,158085,158087,158089],{"class":107,"line":1186},[105,158080,1522],{"class":111},[105,158082,15699],{"class":115},[105,158084,1701],{"class":111},[105,158086,156270],{"class":164},[105,158088,120414],{"class":111},[105,158090,158091],{"class":115}," has_ticket:\n",[105,158093,158094,158096,158098,158100],{"class":107,"line":1192},[105,158095,31284],{"class":164},[105,158097,116],{"class":115},[105,158099,157632],{"class":220},[105,158101,122],{"class":115},[76,158103,158105],{"id":158104},"_362-or","3.6.2 or",[14,158107,158108],{},"只要一个条件成立就成立。",[96,158110,158112],{"className":30363,"code":158111,"language":30365,"meta":22,"style":22},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[102,158113,158114,158123,158132,158136,158148],{"__ignoreMap":22},[105,158115,158116,158119,158121],{"class":107,"line":108},[105,158117,158118],{"class":115},"is_vip ",[105,158120,161],{"class":111},[105,158122,125792],{"class":164},[105,158124,158125,158128,158130],{"class":107,"line":28},[105,158126,158127],{"class":115},"coupon ",[105,158129,161],{"class":111},[105,158131,153584],{"class":164},[105,158133,158134],{"class":107,"line":1171},[105,158135,2391],{"emptyLinePlaceholder":32},[105,158137,158138,158140,158143,158145],{"class":107,"line":1186},[105,158139,1522],{"class":111},[105,158141,158142],{"class":115}," is_vip ",[105,158144,115075],{"class":111},[105,158146,158147],{"class":115}," coupon:\n",[105,158149,158150,158152,158154,158157],{"class":107,"line":1192},[105,158151,31284],{"class":164},[105,158153,116],{"class":115},[105,158155,158156],{"class":220},"\"可以享受优惠\"",[105,158158,122],{"class":115},[76,158160,158162],{"id":158161},"_363-not","3.6.3 not",[14,158164,158165],{},"取反。",[96,158167,158169],{"className":30363,"code":158168,"language":30365,"meta":22,"style":22},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[102,158170,158171,158180,158184,158193],{"__ignoreMap":22},[105,158172,158173,158176,158178],{"class":107,"line":108},[105,158174,158175],{"class":115},"is_closed ",[105,158177,161],{"class":111},[105,158179,125792],{"class":164},[105,158181,158182],{"class":107,"line":28},[105,158183,2391],{"emptyLinePlaceholder":32},[105,158185,158186,158188,158190],{"class":107,"line":1171},[105,158187,1522],{"class":111},[105,158189,38915],{"class":111},[105,158191,158192],{"class":115}," is_closed:\n",[105,158194,158195,158197,158199,158202],{"class":107,"line":1186},[105,158196,31284],{"class":164},[105,158198,116],{"class":115},[105,158200,158201],{"class":220},"\"店铺营业中\"",[105,158203,122],{"class":115},[47,158205,158207],{"id":158206},"_37-链式比较","3.7 链式比较",[14,158209,158210],{},"Python 支持链式比较：",[96,158212,158214],{"className":30363,"code":158213,"language":30365,"meta":22,"style":22},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[102,158215,158216,158225,158229,158246],{"__ignoreMap":22},[105,158217,158218,158220,158222],{"class":107,"line":108},[105,158219,155343],{"class":115},[105,158221,161],{"class":111},[105,158223,158224],{"class":164}," 85\n",[105,158226,158227],{"class":107,"line":28},[105,158228,2391],{"emptyLinePlaceholder":32},[105,158230,158231,158233,158235,158238,158240,158242,158244],{"class":107,"line":1171},[105,158232,1522],{"class":111},[105,158234,4084],{"class":164},[105,158236,158237],{"class":111}," \u003C=",[105,158239,157768],{"class":115},[105,158241,1579],{"class":111},[105,158243,5746],{"class":164},[105,158245,3730],{"class":115},[105,158247,158248,158250,158252,158255],{"class":107,"line":1186},[105,158249,31284],{"class":164},[105,158251,116],{"class":115},[105,158253,158254],{"class":220},"\"成绩合法\"",[105,158256,122],{"class":115},[14,158258,158259],{},"等价于：",[96,158261,158263],{"className":30363,"code":158262,"language":30365,"meta":22,"style":22},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[102,158264,158265,158285],{"__ignoreMap":22},[105,158266,158267,158269,158271,158273,158275,158277,158279,158281,158283],{"class":107,"line":108},[105,158268,1522],{"class":111},[105,158270,157768],{"class":115},[105,158272,1701],{"class":111},[105,158274,4084],{"class":164},[105,158276,120414],{"class":111},[105,158278,157768],{"class":115},[105,158280,1579],{"class":111},[105,158282,5746],{"class":164},[105,158284,3730],{"class":115},[105,158286,158287,158289,158291,158293],{"class":107,"line":28},[105,158288,31284],{"class":164},[105,158290,116],{"class":115},[105,158292,158254],{"class":220},[105,158294,122],{"class":115},[47,158296,158298],{"id":158297},"_38-真值和假值","3.8 真值和假值",[14,158300,116452,158301,158303],{},[102,158302,1522],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158305,158306],{},"假值：",[96,158308,158310],{"className":30363,"code":158309,"language":30365,"meta":22,"style":22},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[102,158311,158312,158316,158321,158325,158329,158334,158338,158342,158347],{"__ignoreMap":22},[105,158313,158314],{"class":107,"line":108},[105,158315,157502],{"class":164},[105,158317,158318],{"class":107,"line":28},[105,158319,158320],{"class":164},"None\n",[105,158322,158323],{"class":107,"line":1171},[105,158324,3076],{"class":164},[105,158326,158327],{"class":107,"line":1186},[105,158328,32327],{"class":164},[105,158330,158331],{"class":107,"line":1192},[105,158332,158333],{"class":220},"\"\"\n",[105,158335,158336],{"class":107,"line":1206},[105,158337,32342],{"class":115},[105,158339,158340],{"class":107,"line":1212},[105,158341,1967],{"class":115},[105,158343,158344],{"class":107,"line":1303},[105,158345,158346],{"class":115},"{}\n",[105,158348,158349,158351],{"class":107,"line":1309},[105,158350,155275],{"class":164},[105,158352,1967],{"class":115},[14,158354,15127],{},[96,158356,158358],{"className":30363,"code":158357,"language":30365,"meta":22,"style":22},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[102,158359,158360,158374,158378,158385,158405,158411],{"__ignoreMap":22},[105,158361,158362,158364,158366,158368,158370,158372],{"class":107,"line":108},[105,158363,146521],{"class":115},[105,158365,161],{"class":111},[105,158367,60590],{"class":164},[105,158369,116],{"class":115},[105,158371,152364],{"class":220},[105,158373,122],{"class":115},[105,158375,158376],{"class":107,"line":28},[105,158377,2391],{"emptyLinePlaceholder":32},[105,158379,158380,158382],{"class":107,"line":1171},[105,158381,1522],{"class":111},[105,158383,158384],{"class":115}," name:\n",[105,158386,158387,158389,158391,158393,158395,158397,158399,158401,158403],{"class":107,"line":1186},[105,158388,31284],{"class":164},[105,158390,116],{"class":115},[105,158392,168],{"class":111},[105,158394,157039],{"class":220},[105,158396,1012],{"class":164},[105,158398,79795],{"class":115},[105,158400,1062],{"class":164},[105,158402,367],{"class":220},[105,158404,122],{"class":115},[105,158406,158407,158409],{"class":107,"line":1192},[105,158408,1692],{"class":111},[105,158410,3730],{"class":115},[105,158412,158413,158415,158417,158420],{"class":107,"line":1206},[105,158414,31284],{"class":164},[105,158416,116],{"class":115},[105,158418,158419],{"class":220},"\"姓名不能为空\"",[105,158421,122],{"class":115},[47,158423,158425],{"id":158424},"_39-match语句","3.9 match语句",[14,158427,158428,158429,158431],{},"Python 3.10 开始支持 ",[102,158430,71250],{},"。它适合处理固定选项。",[96,158433,158435],{"className":30363,"code":158434,"language":30365,"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",[102,158436,158437,158453,158457,158464,158474,158485,158494,158505,158514,158525,158532],{"__ignoreMap":22},[105,158438,158439,158442,158444,158446,158448,158451],{"class":107,"line":108},[105,158440,158441],{"class":115},"command ",[105,158443,161],{"class":111},[105,158445,60590],{"class":164},[105,158447,116],{"class":115},[105,158449,158450],{"class":220},"\"请输入命令:\"",[105,158452,122],{"class":115},[105,158454,158455],{"class":107,"line":28},[105,158456,2391],{"emptyLinePlaceholder":32},[105,158458,158459,158461],{"class":107,"line":1171},[105,158460,71250],{"class":111},[105,158462,158463],{"class":115}," command:\n",[105,158465,158466,158469,158472],{"class":107,"line":1186},[105,158467,158468],{"class":111},"    case",[105,158470,158471],{"class":220}," \"start\"",[105,158473,3730],{"class":115},[105,158475,158476,158478,158480,158483],{"class":107,"line":1192},[105,158477,32436],{"class":164},[105,158479,116],{"class":115},[105,158481,158482],{"class":220},"\"启动\"",[105,158484,122],{"class":115},[105,158486,158487,158489,158492],{"class":107,"line":1206},[105,158488,158468],{"class":111},[105,158490,158491],{"class":220}," \"stop\"",[105,158493,3730],{"class":115},[105,158495,158496,158498,158500,158503],{"class":107,"line":1212},[105,158497,32436],{"class":164},[105,158499,116],{"class":115},[105,158501,158502],{"class":220},"\"停止\"",[105,158504,122],{"class":115},[105,158506,158507,158509,158512],{"class":107,"line":1303},[105,158508,158468],{"class":111},[105,158510,158511],{"class":220}," \"restart\"",[105,158513,3730],{"class":115},[105,158515,158516,158518,158520,158523],{"class":107,"line":1309},[105,158517,32436],{"class":164},[105,158519,116],{"class":115},[105,158521,158522],{"class":220},"\"重启\"",[105,158524,122],{"class":115},[105,158526,158527,158529],{"class":107,"line":1321},[105,158528,158468],{"class":111},[105,158530,158531],{"class":115}," _:\n",[105,158533,158534,158536,158538,158541],{"class":107,"line":1603},[105,158535,32436],{"class":164},[105,158537,116],{"class":115},[105,158539,158540],{"class":220},"\"未知命令\"",[105,158542,122],{"class":115},[14,158544,158545,158546,158548,158549,158551],{},"入门阶段掌握 ",[102,158547,154643],{}," 更重要，",[102,158550,71250],{}," 可以作为补充。",[47,158553,158555],{"id":158554},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158557,123277],{},[59,158559,158560,158563,158566],{},[62,158561,158562],{},"输入成绩。",[62,158564,158565],{},"判断成绩是否合法。",[62,158567,158568],{},"输出等级。",[14,158570,10027],{},[96,158572,158574],{"className":30363,"code":158573,"language":30365,"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",[102,158575,158576,158594,158598,158616,158627,158639,158650,158662,158673,158686,158697,158709,158720,158726],{"__ignoreMap":22},[105,158577,158578,158580,158582,158584,158586,158588,158590,158592],{"class":107,"line":108},[105,158579,155343],{"class":115},[105,158581,161],{"class":111},[105,158583,109782],{"class":164},[105,158585,116],{"class":115},[105,158587,53806],{"class":164},[105,158589,116],{"class":115},[105,158591,152394],{"class":220},[105,158593,30482],{"class":115},[105,158595,158596],{"class":107,"line":28},[105,158597,2391],{"emptyLinePlaceholder":32},[105,158599,158600,158602,158604,158606,158608,158610,158612,158614],{"class":107,"line":1171},[105,158601,1522],{"class":111},[105,158603,38915],{"class":111},[105,158605,4084],{"class":164},[105,158607,158237],{"class":111},[105,158609,157768],{"class":115},[105,158611,1579],{"class":111},[105,158613,5746],{"class":164},[105,158615,3730],{"class":115},[105,158617,158618,158620,158622,158625],{"class":107,"line":1186},[105,158619,31284],{"class":164},[105,158621,116],{"class":115},[105,158623,158624],{"class":220},"\"成绩不合法\"",[105,158626,122],{"class":115},[105,158628,158629,158631,158633,158635,158637],{"class":107,"line":1192},[105,158630,157791],{"class":111},[105,158632,157768],{"class":115},[105,158634,1701],{"class":111},[105,158636,157773],{"class":164},[105,158638,3730],{"class":115},[105,158640,158641,158643,158645,158648],{"class":107,"line":1206},[105,158642,31284],{"class":164},[105,158644,116],{"class":115},[105,158646,158647],{"class":220},"\"等级:A\"",[105,158649,122],{"class":115},[105,158651,158652,158654,158656,158658,158660],{"class":107,"line":1212},[105,158653,157791],{"class":111},[105,158655,157768],{"class":115},[105,158657,1701],{"class":111},[105,158659,157798],{"class":164},[105,158661,3730],{"class":115},[105,158663,158664,158666,158668,158671],{"class":107,"line":1303},[105,158665,31284],{"class":164},[105,158667,116],{"class":115},[105,158669,158670],{"class":220},"\"等级:B\"",[105,158672,122],{"class":115},[105,158674,158675,158677,158679,158681,158684],{"class":107,"line":1309},[105,158676,157791],{"class":111},[105,158678,157768],{"class":115},[105,158680,1701],{"class":111},[105,158682,158683],{"class":164}," 70",[105,158685,3730],{"class":115},[105,158687,158688,158690,158692,158695],{"class":107,"line":1321},[105,158689,31284],{"class":164},[105,158691,116],{"class":115},[105,158693,158694],{"class":220},"\"等级:C\"",[105,158696,122],{"class":115},[105,158698,158699,158701,158703,158705,158707],{"class":107,"line":1603},[105,158700,157791],{"class":111},[105,158702,157768],{"class":115},[105,158704,1701],{"class":111},[105,158706,157822],{"class":164},[105,158708,3730],{"class":115},[105,158710,158711,158713,158715,158718],{"class":107,"line":1608},[105,158712,31284],{"class":164},[105,158714,116],{"class":115},[105,158716,158717],{"class":220},"\"等级:D\"",[105,158719,122],{"class":115},[105,158721,158722,158724],{"class":107,"line":1614},[105,158723,1692],{"class":111},[105,158725,3730],{"class":115},[105,158727,158728,158730,158732,158735],{"class":107,"line":1619},[105,158729,31284],{"class":164},[105,158731,116],{"class":115},[105,158733,158734],{"class":220},"\"等级:E\"",[105,158736,122],{"class":115},[47,158738,158740],{"id":158739},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158742,123277],{},[59,158744,158745,158748,158751,158754],{},[62,158746,158747],{},"输入消费金额。",[62,158749,158750],{},"输入会员等级，普通、银卡、金卡。",[62,158752,158753],{},"普通不打折，银卡 9 折，金卡 8 折。",[62,158755,158756],{},"满 500 再减 50。",[14,158758,10027],{},[96,158760,158762],{"className":30363,"code":158761,"language":30365,"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",[102,158763,158764,158784,158800,158804,158812,158816,158830,158840,158853,158862,158875,158883,158889,158900,158904,158918,158922,158936,158946,158950],{"__ignoreMap":22},[105,158765,158766,158769,158771,158773,158775,158777,158779,158782],{"class":107,"line":108},[105,158767,158768],{"class":115},"amount ",[105,158770,161],{"class":111},[105,158772,109782],{"class":164},[105,158774,116],{"class":115},[105,158776,53806],{"class":164},[105,158778,116],{"class":115},[105,158780,158781],{"class":220},"\"请输入消费金额:\"",[105,158783,30482],{"class":115},[105,158785,158786,158789,158791,158793,158795,158798],{"class":107,"line":28},[105,158787,158788],{"class":115},"level ",[105,158790,161],{"class":111},[105,158792,60590],{"class":164},[105,158794,116],{"class":115},[105,158796,158797],{"class":220},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[105,158799,122],{"class":115},[105,158801,158802],{"class":107,"line":1171},[105,158803,2391],{"emptyLinePlaceholder":32},[105,158805,158806,158808,158810],{"class":107,"line":1186},[105,158807,157221],{"class":115},[105,158809,161],{"class":111},[105,158811,55684],{"class":164},[105,158813,158814],{"class":107,"line":1192},[105,158815,2391],{"emptyLinePlaceholder":32},[105,158817,158818,158820,158823,158825,158828],{"class":107,"line":1206},[105,158819,1522],{"class":111},[105,158821,158822],{"class":115}," level ",[105,158824,2940],{"class":111},[105,158826,158827],{"class":220}," \"银卡\"",[105,158829,3730],{"class":115},[105,158831,158832,158835,158837],{"class":107,"line":1212},[105,158833,158834],{"class":115},"    discount ",[105,158836,161],{"class":111},[105,158838,158839],{"class":164}," 0.9\n",[105,158841,158842,158844,158846,158848,158851],{"class":107,"line":1303},[105,158843,157791],{"class":111},[105,158845,158822],{"class":115},[105,158847,2940],{"class":111},[105,158849,158850],{"class":220}," \"金卡\"",[105,158852,3730],{"class":115},[105,158854,158855,158857,158859],{"class":107,"line":1309},[105,158856,158834],{"class":115},[105,158858,161],{"class":111},[105,158860,158861],{"class":164}," 0.8\n",[105,158863,158864,158866,158868,158870,158873],{"class":107,"line":1321},[105,158865,157791],{"class":111},[105,158867,158822],{"class":115},[105,158869,2940],{"class":111},[105,158871,158872],{"class":220}," \"普通\"",[105,158874,3730],{"class":115},[105,158876,158877,158879,158881],{"class":107,"line":1603},[105,158878,158834],{"class":115},[105,158880,161],{"class":111},[105,158882,55684],{"class":164},[105,158884,158885,158887],{"class":107,"line":1608},[105,158886,1692],{"class":111},[105,158888,3730],{"class":115},[105,158890,158891,158893,158895,158898],{"class":107,"line":1614},[105,158892,31284],{"class":164},[105,158894,116],{"class":115},[105,158896,158897],{"class":220},"\"会员等级输入错误，按普通会员计算\"",[105,158899,122],{"class":115},[105,158901,158902],{"class":107,"line":1619},[105,158903,2391],{"emptyLinePlaceholder":32},[105,158905,158906,158909,158911,158914,158916],{"class":107,"line":1633},[105,158907,158908],{"class":115},"pay ",[105,158910,161],{"class":111},[105,158912,158913],{"class":115}," amount ",[105,158915,571],{"class":111},[105,158917,157260],{"class":115},[105,158919,158920],{"class":107,"line":1638},[105,158921,2391],{"emptyLinePlaceholder":32},[105,158923,158924,158926,158929,158931,158934],{"class":107,"line":1644},[105,158925,1522],{"class":111},[105,158927,158928],{"class":115}," pay ",[105,158930,1701],{"class":111},[105,158932,158933],{"class":164}," 500",[105,158935,3730],{"class":115},[105,158937,158938,158941,158943],{"class":107,"line":1665},[105,158939,158940],{"class":115},"    pay ",[105,158942,150237],{"class":111},[105,158944,158945],{"class":164}," 50\n",[105,158947,158948],{"class":107,"line":1670},[105,158949,2391],{"emptyLinePlaceholder":32},[105,158951,158952,158954,158956,158958,158960,158962,158965,158967,158969,158971],{"class":107,"line":1684},[105,158953,30400],{"class":164},[105,158955,116],{"class":115},[105,158957,168],{"class":111},[105,158959,157341],{"class":220},[105,158961,1012],{"class":164},[105,158963,158964],{"class":115},"pay",[105,158966,157144],{"class":111},[105,158968,1062],{"class":164},[105,158970,156997],{"class":220},[105,158972,122],{"class":115},[47,158974,158976],{"id":158975},"_312-易错点","3.12 易错点",[59,158978,158979,158982,158985,158988,158993],{},[62,158980,158981],{},"冒号不能漏。",[62,158983,158984],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[62,158986,158987],{},"多分支判断要注意顺序。",[62,158989,158990,158991,28370],{},"判断相等用 ",[102,158992,2940],{},[62,158994,158995],{},"字符串比较区分大小写：",[96,158997,158999],{"className":30363,"code":158998,"language":30365,"meta":22,"style":22},"\"Y\" == \"y\"  # False\n",[102,159000,159001],{"__ignoreMap":22},[105,159002,159003,159006,159008,159010],{"class":107,"line":108},[105,159004,159005],{"class":220},"\"Y\"",[105,159007,101544],{"class":111},[105,159009,157990],{"class":220},[105,159011,159012],{"class":174},"  # False\n",[14,159014,159015],{},"可转换后再判断：",[96,159017,159019],{"className":30363,"code":159018,"language":30365,"meta":22,"style":22},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[102,159020,159021,159038,159051],{"__ignoreMap":22},[105,159022,159023,159026,159028,159030,159032,159035],{"class":107,"line":108},[105,159024,159025],{"class":115},"answer ",[105,159027,161],{"class":111},[105,159029,60590],{"class":164},[105,159031,116],{"class":115},[105,159033,159034],{"class":220},"\"是否继续(y\u002Fn):\"",[105,159036,159037],{"class":115},").lower()\n",[105,159039,159040,159042,159045,159047,159049],{"class":107,"line":28},[105,159041,1522],{"class":111},[105,159043,159044],{"class":115}," answer ",[105,159046,2940],{"class":111},[105,159048,157990],{"class":220},[105,159050,3730],{"class":115},[105,159052,159053,159055,159057,159060],{"class":107,"line":1171},[105,159054,31284],{"class":164},[105,159056,116],{"class":115},[105,159058,159059],{"class":220},"\"继续\"",[105,159061,122],{"class":115},[47,159063,159065],{"id":159064},"_313-本章练习","3.13 本章练习",[59,159067,159068,159071,159074,159077,159087],{},[62,159069,159070],{},"输入年龄，判断是否成年。",[62,159072,159073],{},"输入年份，判断是否为闰年。",[62,159075,159076],{},"输入三个数字，输出最大值。",[62,159078,159079,159080,159083,159084,159086],{},"写登录判断：用户名是 ",[102,159081,159082],{},"admin"," 且密码是 ",[102,159085,15076],{}," 才登录成功。",[62,159088,159089],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5118,159091,159092],{},"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":28,"depth":28,"links":159094},[159095,159096,159097,159098,159099,159100,159105,159106,159107,159108,159109,159110,159111],{"id":157483,"depth":28,"text":157484},{"id":157536,"depth":28,"text":157537},{"id":157640,"depth":28,"text":157641},{"id":157730,"depth":28,"text":157731},{"id":157920,"depth":28,"text":157921},{"id":158043,"depth":28,"text":158044,"children":159101},[159102,159103,159104],{"id":158047,"depth":1171,"text":158048},{"id":158104,"depth":1171,"text":158105},{"id":158161,"depth":1171,"text":158162},{"id":158206,"depth":28,"text":158207},{"id":158297,"depth":28,"text":158298},{"id":158424,"depth":28,"text":158425},{"id":158554,"depth":28,"text":158555},{"id":158739,"depth":28,"text":158740},{"id":158975,"depth":28,"text":158976},{"id":159064,"depth":28,"text":159065},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157475,"description":23369},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159118,"title":159119,"body":159120,"description":23369,"extension":30,"meta":160889,"navigation":32,"path":160890,"seo":160891,"stem":160892,"__hash__":160893},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159121,"toc":160869},[159122,159125,159129,159135,159138,159155,159159,159161,159178,159180,159225,159227,159244,159248,159251,159317,159320,159338,159342,159503,159512,159516,159520,159525,159572,159574,159580,159584,159589,159636,159638,159644,159648,159653,159689,159692,159739,159743,159749,159807,159812,159843,159848,159852,159907,159910,159982,159985,160044,160048,160051,160126,160129,160133,160239,160242,160268,160272,160284,160353,160356,160448,160452,160454,160465,160467,160597,160601,160803,160811,160815,160845,160849,160866],[10,159123,159119],{"id":159124},"_4-循环语句",[47,159126,159128],{"id":159127},"_41-为什么需要循环","4.1 为什么需要循环",[14,159130,159131,159132,159134],{},"如果要输出 1 到 100，不应该写 100 行 ",[102,159133,146457],{},"，而应该用循环。",[14,159136,159137],{},"循环适合处理重复任务：",[59,159139,159140,159143,159146,159149,159152],{},[62,159141,159142],{},"重复输出。",[62,159144,159145],{},"重复输入。",[62,159147,159148],{},"遍历数据。",[62,159150,159151],{},"持续执行菜单。",[62,159153,159154],{},"批量处理文件或数据。",[47,159156,159158],{"id":159157},"_42-while循环","4.2 while循环",[14,159160,5173],{},[96,159162,159164],{"className":30363,"code":159163,"language":30365,"meta":22,"style":22},"while 条件:\n    循环体\n",[102,159165,159166,159173],{"__ignoreMap":22},[105,159167,159168,159170],{"class":107,"line":108},[105,159169,108648],{"class":111},[105,159171,159172],{"class":115}," 条件:\n",[105,159174,159175],{"class":107,"line":28},[105,159176,159177],{"class":115},"    循环体\n",[14,159179,15127],{},[96,159181,159183],{"className":30363,"code":159182,"language":30365,"meta":22,"style":22},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[102,159184,159185,159193,159197,159209,159216],{"__ignoreMap":22},[105,159186,159187,159189,159191],{"class":107,"line":108},[105,159188,100133],{"class":115},[105,159190,161],{"class":111},[105,159192,55684],{"class":164},[105,159194,159195],{"class":107,"line":28},[105,159196,2391],{"emptyLinePlaceholder":32},[105,159198,159199,159201,159203,159205,159207],{"class":107,"line":1171},[105,159200,108648],{"class":111},[105,159202,9430],{"class":115},[105,159204,1579],{"class":111},[105,159206,2139],{"class":164},[105,159208,3730],{"class":115},[105,159210,159211,159213],{"class":107,"line":1186},[105,159212,31284],{"class":164},[105,159214,159215],{"class":115},"(i)\n",[105,159217,159218,159221,159223],{"class":107,"line":1192},[105,159219,159220],{"class":115},"    i ",[105,159222,9469],{"class":111},[105,159224,55684],{"class":164},[14,159226,80914],{},[59,159228,159229,159235,159238,159241],{},[62,159230,159231,159232,28370],{},"判断条件 ",[102,159233,159234],{},"i \u003C= 5",[62,159236,159237],{},"条件成立，执行循环体。",[62,159239,159240],{},"执行完后回到条件判断。",[62,159242,159243],{},"条件不成立，退出循环。",[47,159245,159247],{"id":159246},"_43-while累加","4.3 while累加",[14,159249,159250],{},"计算 1 到 100 的和：",[96,159252,159254],{"className":30363,"code":159253,"language":30365,"meta":22,"style":22},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[102,159255,159256,159264,159272,159276,159288,159298,159306,159310],{"__ignoreMap":22},[105,159257,159258,159260,159262],{"class":107,"line":108},[105,159259,100133],{"class":115},[105,159261,161],{"class":111},[105,159263,55684],{"class":164},[105,159265,159266,159268,159270],{"class":107,"line":28},[105,159267,157245],{"class":115},[105,159269,161],{"class":111},[105,159271,47318],{"class":164},[105,159273,159274],{"class":107,"line":1171},[105,159275,2391],{"emptyLinePlaceholder":32},[105,159277,159278,159280,159282,159284,159286],{"class":107,"line":1186},[105,159279,108648],{"class":111},[105,159281,9430],{"class":115},[105,159283,1579],{"class":111},[105,159285,5746],{"class":164},[105,159287,3730],{"class":115},[105,159289,159290,159293,159295],{"class":107,"line":1192},[105,159291,159292],{"class":115},"    total ",[105,159294,9469],{"class":111},[105,159296,159297],{"class":115}," i\n",[105,159299,159300,159302,159304],{"class":107,"line":1206},[105,159301,159220],{"class":115},[105,159303,9469],{"class":111},[105,159305,55684],{"class":164},[105,159307,159308],{"class":107,"line":1212},[105,159309,2391],{"emptyLinePlaceholder":32},[105,159311,159312,159314],{"class":107,"line":1303},[105,159313,30400],{"class":164},[105,159315,159316],{"class":115},"(total)\n",[14,159318,159319],{},"核心思想：",[59,159321,159322,159327,159332],{},[62,159323,159324,159326],{},[102,159325,557],{}," 控制循环次数。",[62,159328,159329,159331],{},[102,159330,157346],{}," 保存累加结果。",[62,159333,159334,159335,159337],{},"每轮循环都要更新 ",[102,159336,557],{},"，否则可能死循环。",[47,159339,159341],{"id":159340},"_44-while猜数字","4.4 while猜数字",[96,159343,159345],{"className":30363,"code":159344,"language":30365,"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",[102,159346,159347,159353,159357,159374,159382,159386,159394,159414,159423,159427,159439,159450,159460,159471,159477,159499],{"__ignoreMap":22},[105,159348,159349,159351],{"class":107,"line":108},[105,159350,30377],{"class":111},[105,159352,45313],{"class":115},[105,159354,159355],{"class":107,"line":28},[105,159356,2391],{"emptyLinePlaceholder":32},[105,159358,159359,159361,159363,159366,159368,159370,159372],{"class":107,"line":1171},[105,159360,159025],{"class":115},[105,159362,161],{"class":111},[105,159364,159365],{"class":115}," random.randint(",[105,159367,333],{"class":164},[105,159369,12427],{"class":115},[105,159371,427],{"class":164},[105,159373,122],{"class":115},[105,159375,159376,159378,159380],{"class":107,"line":1186},[105,159377,146676],{"class":115},[105,159379,161],{"class":111},[105,159381,47318],{"class":164},[105,159383,159384],{"class":107,"line":1192},[105,159385,2391],{"emptyLinePlaceholder":32},[105,159387,159388,159390,159392],{"class":107,"line":1206},[105,159389,108648],{"class":111},[105,159391,95277],{"class":164},[105,159393,3730],{"class":115},[105,159395,159396,159399,159401,159403,159405,159407,159409,159412],{"class":107,"line":1212},[105,159397,159398],{"class":115},"    guess ",[105,159400,161],{"class":111},[105,159402,2373],{"class":164},[105,159404,116],{"class":115},[105,159406,53806],{"class":164},[105,159408,116],{"class":115},[105,159410,159411],{"class":220},"\"请输入1到100之间的数字:\"",[105,159413,30482],{"class":115},[105,159415,159416,159419,159421],{"class":107,"line":1303},[105,159417,159418],{"class":115},"    count ",[105,159420,9469],{"class":111},[105,159422,55684],{"class":164},[105,159424,159425],{"class":107,"line":1309},[105,159426,2391],{"emptyLinePlaceholder":32},[105,159428,159429,159431,159434,159436],{"class":107,"line":1321},[105,159430,3092],{"class":111},[105,159432,159433],{"class":115}," guess ",[105,159435,1076],{"class":111},[105,159437,159438],{"class":115}," answer:\n",[105,159440,159441,159443,159445,159448],{"class":107,"line":1603},[105,159442,32436],{"class":164},[105,159444,116],{"class":115},[105,159446,159447],{"class":220},"\"猜大了\"",[105,159449,122],{"class":115},[105,159451,159452,159454,159456,159458],{"class":107,"line":1608},[105,159453,39278],{"class":111},[105,159455,159433],{"class":115},[105,159457,1026],{"class":111},[105,159459,159438],{"class":115},[105,159461,159462,159464,159466,159469],{"class":107,"line":1614},[105,159463,32436],{"class":164},[105,159465,116],{"class":115},[105,159467,159468],{"class":220},"\"猜小了\"",[105,159470,122],{"class":115},[105,159472,159473,159475],{"class":107,"line":1619},[105,159474,158007],{"class":111},[105,159476,3730],{"class":115},[105,159478,159479,159481,159483,159485,159488,159490,159492,159494,159497],{"class":107,"line":1633},[105,159480,32436],{"class":164},[105,159482,116],{"class":115},[105,159484,168],{"class":111},[105,159486,159487],{"class":220},"\"猜对了，一共猜了",[105,159489,1012],{"class":164},[105,159491,84419],{"class":115},[105,159493,1062],{"class":164},[105,159495,159496],{"class":220},"次\"",[105,159498,122],{"class":115},[105,159500,159501],{"class":107,"line":1638},[105,159502,31612],{"class":111},[14,159504,159505,159508,159509,159511],{},[102,159506,159507],{},"while True"," 表示无限循环，通常配合 ",[102,159510,2044],{}," 使用。",[47,159513,159515],{"id":159514},"_45-break和continue","4.5 break和continue",[76,159517,159519],{"id":159518},"_451-break","4.5.1 break",[14,159521,159522,159524],{},[102,159523,2044],{}," 直接结束整个循环。",[96,159526,159528],{"className":30363,"code":159527,"language":30365,"meta":22,"style":22},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[102,159529,159530,159550,159562,159566],{"__ignoreMap":22},[105,159531,159532,159534,159536,159538,159540,159542,159544,159546,159548],{"class":107,"line":108},[105,159533,3016],{"class":111},[105,159535,9430],{"class":115},[105,159537,26028],{"class":111},[105,159539,32428],{"class":164},[105,159541,116],{"class":115},[105,159543,333],{"class":164},[105,159545,12427],{"class":115},[105,159547,460],{"class":164},[105,159549,30771],{"class":115},[105,159551,159552,159554,159556,159558,159560],{"class":107,"line":28},[105,159553,3092],{"class":111},[105,159555,9430],{"class":115},[105,159557,2940],{"class":111},[105,159559,78055],{"class":164},[105,159561,3730],{"class":115},[105,159563,159564],{"class":107,"line":1171},[105,159565,31612],{"class":111},[105,159567,159568,159570],{"class":107,"line":1186},[105,159569,31284],{"class":164},[105,159571,159215],{"class":115},[14,159573,146442],{},[96,159575,159578],{"className":159576,"code":159577,"language":5179,"meta":22},[5177],"1\n2\n",[102,159579,159577],{"__ignoreMap":22},[76,159581,159583],{"id":159582},"_452-continue","4.5.2 continue",[14,159585,159586,159588],{},[102,159587,154657],{}," 跳过本轮剩余代码，进入下一轮循环。",[96,159590,159592],{"className":30363,"code":159591,"language":30365,"meta":22,"style":22},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[102,159593,159594,159614,159626,159630],{"__ignoreMap":22},[105,159595,159596,159598,159600,159602,159604,159606,159608,159610,159612],{"class":107,"line":108},[105,159597,3016],{"class":111},[105,159599,9430],{"class":115},[105,159601,26028],{"class":111},[105,159603,32428],{"class":164},[105,159605,116],{"class":115},[105,159607,333],{"class":164},[105,159609,12427],{"class":115},[105,159611,460],{"class":164},[105,159613,30771],{"class":115},[105,159615,159616,159618,159620,159622,159624],{"class":107,"line":28},[105,159617,3092],{"class":111},[105,159619,9430],{"class":115},[105,159621,2940],{"class":111},[105,159623,78055],{"class":164},[105,159625,3730],{"class":115},[105,159627,159628],{"class":107,"line":1171},[105,159629,148497],{"class":111},[105,159631,159632,159634],{"class":107,"line":1186},[105,159633,31284],{"class":164},[105,159635,159215],{"class":115},[14,159637,146442],{},[96,159639,159642],{"className":159640,"code":159641,"language":5179,"meta":22},[5177],"1\n2\n4\n5\n",[102,159643,159641],{"__ignoreMap":22},[47,159645,159647],{"id":159646},"_46-for循环","4.6 for循环",[14,159649,159650,159652],{},[102,159651,3016],{}," 常用于遍历序列。",[96,159654,159656],{"className":30363,"code":159655,"language":30365,"meta":22,"style":22},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[102,159657,159658,159667,159671,159682],{"__ignoreMap":22},[105,159659,159660,159662,159664],{"class":107,"line":108},[105,159661,146521],{"class":115},[105,159663,161],{"class":111},[105,159665,159666],{"class":220}," \"python\"\n",[105,159668,159669],{"class":107,"line":28},[105,159670,2391],{"emptyLinePlaceholder":32},[105,159672,159673,159675,159678,159680],{"class":107,"line":1171},[105,159674,3016],{"class":111},[105,159676,159677],{"class":115}," ch ",[105,159679,26028],{"class":111},[105,159681,158384],{"class":115},[105,159683,159684,159686],{"class":107,"line":1186},[105,159685,31284],{"class":164},[105,159687,159688],{"class":115},"(ch)\n",[14,159690,159691],{},"遍历列表：",[96,159693,159695],{"className":30363,"code":159694,"language":30365,"meta":22,"style":22},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[102,159696,159697,159719,159723,159733],{"__ignoreMap":22},[105,159698,159699,159702,159704,159706,159708,159710,159712,159714,159717],{"class":107,"line":108},[105,159700,159701],{"class":115},"students ",[105,159703,161],{"class":111},[105,159705,52211],{"class":115},[105,159707,149873],{"class":220},[105,159709,12427],{"class":115},[105,159711,150921],{"class":220},[105,159713,12427],{"class":115},[105,159715,159716],{"class":220},"\"小刚\"",[105,159718,33231],{"class":115},[105,159720,159721],{"class":107,"line":28},[105,159722,2391],{"emptyLinePlaceholder":32},[105,159724,159725,159727,159729,159731],{"class":107,"line":1171},[105,159726,3016],{"class":111},[105,159728,152122],{"class":115},[105,159730,26028],{"class":111},[105,159732,152127],{"class":115},[105,159734,159735,159737],{"class":107,"line":1186},[105,159736,31284],{"class":164},[105,159738,150027],{"class":115},[47,159740,159742],{"id":159741},"_47-range函数","4.7 range函数",[14,159744,159745,159748],{},[102,159746,159747],{},"range()"," 用于生成整数序列。",[96,159750,159752],{"className":30363,"code":159751,"language":30365,"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",[102,159753,159754,159768,159786],{"__ignoreMap":22},[105,159755,159756,159758,159760,159762,159765],{"class":107,"line":108},[105,159757,33401],{"class":164},[105,159759,116],{"class":115},[105,159761,435],{"class":164},[105,159763,159764],{"class":115},")          ",[105,159766,159767],{"class":174},"# 0,1,2,3,4\n",[105,159769,159770,159772,159774,159776,159778,159780,159783],{"class":107,"line":28},[105,159771,33401],{"class":164},[105,159773,116],{"class":115},[105,159775,333],{"class":164},[105,159777,12427],{"class":115},[105,159779,435],{"class":164},[105,159781,159782],{"class":115},")       ",[105,159784,159785],{"class":174},"# 1,2,3,4\n",[105,159787,159788,159790,159792,159794,159796,159798,159800,159802,159804],{"class":107,"line":1171},[105,159789,33401],{"class":164},[105,159791,116],{"class":115},[105,159793,333],{"class":164},[105,159795,12427],{"class":115},[105,159797,562],{"class":164},[105,159799,12427],{"class":115},[105,159801,193],{"class":164},[105,159803,155646],{"class":115},[105,159805,159806],{"class":174},"# 1,3,5,7,9\n",[14,159808,159809,159810,24603],{},"配合 ",[102,159811,3016],{},[96,159813,159815],{"className":30363,"code":159814,"language":30365,"meta":22,"style":22},"for i in range(1, 6):\n    print(i)\n",[102,159816,159817,159837],{"__ignoreMap":22},[105,159818,159819,159821,159823,159825,159827,159829,159831,159833,159835],{"class":107,"line":108},[105,159820,3016],{"class":111},[105,159822,9430],{"class":115},[105,159824,26028],{"class":111},[105,159826,32428],{"class":164},[105,159828,116],{"class":115},[105,159830,333],{"class":164},[105,159832,12427],{"class":115},[105,159834,460],{"class":164},[105,159836,30771],{"class":115},[105,159838,159839,159841],{"class":107,"line":28},[105,159840,31284],{"class":164},[105,159842,159215],{"class":115},[14,159844,9017,159845,159847],{},[102,159846,33401],{}," 的结束值不包含在内。",[47,159849,159851],{"id":159850},"_48-for循环求和","4.8 for循环求和",[96,159853,159855],{"className":30363,"code":159854,"language":30365,"meta":22,"style":22},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[102,159856,159857,159865,159869,159889,159897,159901],{"__ignoreMap":22},[105,159858,159859,159861,159863],{"class":107,"line":108},[105,159860,157245],{"class":115},[105,159862,161],{"class":111},[105,159864,47318],{"class":164},[105,159866,159867],{"class":107,"line":28},[105,159868,2391],{"emptyLinePlaceholder":32},[105,159870,159871,159873,159875,159877,159879,159881,159883,159885,159887],{"class":107,"line":1171},[105,159872,3016],{"class":111},[105,159874,9430],{"class":115},[105,159876,26028],{"class":111},[105,159878,32428],{"class":164},[105,159880,116],{"class":115},[105,159882,333],{"class":164},[105,159884,12427],{"class":115},[105,159886,453],{"class":164},[105,159888,30771],{"class":115},[105,159890,159891,159893,159895],{"class":107,"line":1186},[105,159892,159292],{"class":115},[105,159894,9469],{"class":111},[105,159896,159297],{"class":115},[105,159898,159899],{"class":107,"line":1192},[105,159900,2391],{"emptyLinePlaceholder":32},[105,159902,159903,159905],{"class":107,"line":1206},[105,159904,30400],{"class":164},[105,159906,159316],{"class":115},[14,159908,159909],{},"求偶数和：",[96,159911,159913],{"className":30363,"code":159912,"language":30365,"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",[102,159914,159915,159923,159927,159947,159963,159972,159976],{"__ignoreMap":22},[105,159916,159917,159919,159921],{"class":107,"line":108},[105,159918,157245],{"class":115},[105,159920,161],{"class":111},[105,159922,47318],{"class":164},[105,159924,159925],{"class":107,"line":28},[105,159926,2391],{"emptyLinePlaceholder":32},[105,159928,159929,159931,159933,159935,159937,159939,159941,159943,159945],{"class":107,"line":1171},[105,159930,3016],{"class":111},[105,159932,9430],{"class":115},[105,159934,26028],{"class":111},[105,159936,32428],{"class":164},[105,159938,116],{"class":115},[105,159940,333],{"class":164},[105,159942,12427],{"class":115},[105,159944,453],{"class":164},[105,159946,30771],{"class":115},[105,159948,159949,159951,159953,159955,159957,159959,159961],{"class":107,"line":1186},[105,159950,3092],{"class":111},[105,159952,9430],{"class":115},[105,159954,444],{"class":111},[105,159956,14747],{"class":164},[105,159958,101544],{"class":111},[105,159960,4084],{"class":164},[105,159962,3730],{"class":115},[105,159964,159965,159968,159970],{"class":107,"line":1192},[105,159966,159967],{"class":115},"        total ",[105,159969,9469],{"class":111},[105,159971,159297],{"class":115},[105,159973,159974],{"class":107,"line":1206},[105,159975,2391],{"emptyLinePlaceholder":32},[105,159977,159978,159980],{"class":107,"line":1212},[105,159979,30400],{"class":164},[105,159981,159316],{"class":115},[14,159983,159984],{},"也可以：",[96,159986,159988],{"className":30363,"code":159987,"language":30365,"meta":22,"style":22},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[102,159989,159990,159998,160002,160026,160034,160038],{"__ignoreMap":22},[105,159991,159992,159994,159996],{"class":107,"line":108},[105,159993,157245],{"class":115},[105,159995,161],{"class":111},[105,159997,47318],{"class":164},[105,159999,160000],{"class":107,"line":28},[105,160001,2391],{"emptyLinePlaceholder":32},[105,160003,160004,160006,160008,160010,160012,160014,160016,160018,160020,160022,160024],{"class":107,"line":1171},[105,160005,3016],{"class":111},[105,160007,9430],{"class":115},[105,160009,26028],{"class":111},[105,160011,32428],{"class":164},[105,160013,116],{"class":115},[105,160015,193],{"class":164},[105,160017,12427],{"class":115},[105,160019,453],{"class":164},[105,160021,12427],{"class":115},[105,160023,193],{"class":164},[105,160025,30771],{"class":115},[105,160027,160028,160030,160032],{"class":107,"line":1186},[105,160029,159292],{"class":115},[105,160031,9469],{"class":111},[105,160033,159297],{"class":115},[105,160035,160036],{"class":107,"line":1192},[105,160037,2391],{"emptyLinePlaceholder":32},[105,160039,160040,160042],{"class":107,"line":1206},[105,160041,30400],{"class":164},[105,160043,159316],{"class":115},[47,160045,160047],{"id":160046},"_49-循环嵌套","4.9 循环嵌套",[14,160049,160050],{},"嵌套循环就是循环里面再写循环。",[96,160052,160054],{"className":30363,"code":160053,"language":30365,"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",[102,160055,160056,160076,160096],{"__ignoreMap":22},[105,160057,160058,160060,160062,160064,160066,160068,160070,160072,160074],{"class":107,"line":108},[105,160059,3016],{"class":111},[105,160061,9430],{"class":115},[105,160063,26028],{"class":111},[105,160065,32428],{"class":164},[105,160067,116],{"class":115},[105,160069,333],{"class":164},[105,160071,12427],{"class":115},[105,160073,409],{"class":164},[105,160075,30771],{"class":115},[105,160077,160078,160080,160082,160084,160086,160088,160090,160092,160094],{"class":107,"line":28},[105,160079,3192],{"class":111},[105,160081,9492],{"class":115},[105,160083,26028],{"class":111},[105,160085,32428],{"class":164},[105,160087,116],{"class":115},[105,160089,333],{"class":164},[105,160091,12427],{"class":115},[105,160093,409],{"class":164},[105,160095,30771],{"class":115},[105,160097,160098,160100,160102,160104,160107,160109,160111,160113,160116,160118,160120,160122,160124],{"class":107,"line":1171},[105,160099,32436],{"class":164},[105,160101,116],{"class":115},[105,160103,168],{"class":111},[105,160105,160106],{"class":220},"\"i=",[105,160108,1012],{"class":164},[105,160110,557],{"class":115},[105,160112,1062],{"class":164},[105,160114,160115],{"class":220},", j=",[105,160117,1012],{"class":164},[105,160119,583],{"class":115},[105,160121,1062],{"class":164},[105,160123,367],{"class":220},[105,160125,122],{"class":115},[14,160127,160128],{},"外层循环执行一次，内层循环执行完整一轮。",[47,160130,160132],{"id":160131},"_410-九九乘法表","4.10 九九乘法表",[96,160134,160136],{"className":30363,"code":160135,"language":30365,"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",[102,160137,160138,160158,160181,160233],{"__ignoreMap":22},[105,160139,160140,160142,160144,160146,160148,160150,160152,160154,160156],{"class":107,"line":108},[105,160141,3016],{"class":111},[105,160143,9430],{"class":115},[105,160145,26028],{"class":111},[105,160147,32428],{"class":164},[105,160149,116],{"class":115},[105,160151,333],{"class":164},[105,160153,12427],{"class":115},[105,160155,562],{"class":164},[105,160157,30771],{"class":115},[105,160159,160160,160162,160164,160166,160168,160170,160172,160175,160177,160179],{"class":107,"line":28},[105,160161,3192],{"class":111},[105,160163,9492],{"class":115},[105,160165,26028],{"class":111},[105,160167,32428],{"class":164},[105,160169,116],{"class":115},[105,160171,333],{"class":164},[105,160173,160174],{"class":115},", i ",[105,160176,597],{"class":111},[105,160178,25103],{"class":164},[105,160180,30771],{"class":115},[105,160182,160183,160185,160187,160189,160191,160193,160195,160197,160199,160201,160203,160205,160207,160209,160211,160213,160215,160217,160219,160221,160223,160225,160227,160229,160231],{"class":107,"line":1171},[105,160184,32436],{"class":164},[105,160186,116],{"class":115},[105,160188,168],{"class":111},[105,160190,367],{"class":220},[105,160192,1012],{"class":164},[105,160194,583],{"class":115},[105,160196,1062],{"class":164},[105,160198,571],{"class":220},[105,160200,1012],{"class":164},[105,160202,557],{"class":115},[105,160204,1062],{"class":164},[105,160206,161],{"class":220},[105,160208,1012],{"class":164},[105,160210,100133],{"class":115},[105,160212,571],{"class":111},[105,160214,3401],{"class":115},[105,160216,1062],{"class":164},[105,160218,367],{"class":220},[105,160220,12427],{"class":115},[105,160222,45786],{"class":5208},[105,160224,161],{"class":111},[105,160226,367],{"class":220},[105,160228,1222],{"class":164},[105,160230,367],{"class":220},[105,160232,122],{"class":115},[105,160234,160235,160237],{"class":107,"line":1186},[105,160236,31284],{"class":164},[105,160238,1967],{"class":115},[14,160240,160241],{},"关键点：",[59,160243,160244,160250,160256,160262],{},[62,160245,160246,160247,160249],{},"外层 ",[102,160248,557],{}," 控制行。",[62,160251,160252,160253,160255],{},"内层 ",[102,160254,583],{}," 控制列。",[62,160257,160258,160259,160261],{},"每行结束后用 ",[102,160260,146457],{}," 换行。",[62,160263,160264,160267],{},[102,160265,160266],{},"end=\"\\t\""," 让同一行的内容横向排列。",[47,160269,160271],{"id":160270},"_411-循环else","4.11 循环else",[14,160273,160274,160275,160277,160278,160280,160281,160283],{},"Python 的循环可以带 ",[102,160276,1692],{},"。当循环正常结束时执行 ",[102,160279,1692],{},"，如果被 ",[102,160282,2044],{}," 打断，则不执行。",[96,160285,160287],{"className":30363,"code":160286,"language":30365,"meta":22,"style":22},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[102,160288,160289,160309,160321,160332,160336,160342],{"__ignoreMap":22},[105,160290,160291,160293,160295,160297,160299,160301,160303,160305,160307],{"class":107,"line":108},[105,160292,3016],{"class":111},[105,160294,9430],{"class":115},[105,160296,26028],{"class":111},[105,160298,32428],{"class":164},[105,160300,116],{"class":115},[105,160302,333],{"class":164},[105,160304,12427],{"class":115},[105,160306,460],{"class":164},[105,160308,30771],{"class":115},[105,160310,160311,160313,160315,160317,160319],{"class":107,"line":28},[105,160312,3092],{"class":111},[105,160314,9430],{"class":115},[105,160316,2940],{"class":111},[105,160318,2029],{"class":164},[105,160320,3730],{"class":115},[105,160322,160323,160325,160327,160330],{"class":107,"line":1171},[105,160324,32436],{"class":164},[105,160326,116],{"class":115},[105,160328,160329],{"class":220},"\"找到了\"",[105,160331,122],{"class":115},[105,160333,160334],{"class":107,"line":1186},[105,160335,31612],{"class":111},[105,160337,160338,160340],{"class":107,"line":1192},[105,160339,1692],{"class":111},[105,160341,3730],{"class":115},[105,160343,160344,160346,160348,160351],{"class":107,"line":1206},[105,160345,31284],{"class":164},[105,160347,116],{"class":115},[105,160349,160350],{"class":220},"\"没找到\"",[105,160352,122],{"class":115},[14,160354,160355],{},"常用于搜索。",[96,160357,160359],{"className":30363,"code":160358,"language":30365,"meta":22,"style":22},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[102,160360,160361,160382,160391,160395,160407,160418,160428,160432,160438],{"__ignoreMap":22},[105,160362,160363,160366,160368,160370,160372,160374,160376,160378,160380],{"class":107,"line":108},[105,160364,160365],{"class":115},"names ",[105,160367,161],{"class":111},[105,160369,52211],{"class":115},[105,160371,149873],{"class":220},[105,160373,12427],{"class":115},[105,160375,150921],{"class":220},[105,160377,12427],{"class":115},[105,160379,159716],{"class":220},[105,160381,33231],{"class":115},[105,160383,160384,160386,160388],{"class":107,"line":28},[105,160385,111563],{"class":115},[105,160387,161],{"class":111},[105,160389,160390],{"class":220}," \"小李\"\n",[105,160392,160393],{"class":107,"line":1171},[105,160394,2391],{"emptyLinePlaceholder":32},[105,160396,160397,160399,160402,160404],{"class":107,"line":1186},[105,160398,3016],{"class":111},[105,160400,160401],{"class":115}," name ",[105,160403,26028],{"class":111},[105,160405,160406],{"class":115}," names:\n",[105,160408,160409,160411,160413,160415],{"class":107,"line":1192},[105,160410,3092],{"class":111},[105,160412,160401],{"class":115},[105,160414,2940],{"class":111},[105,160416,160417],{"class":115}," target:\n",[105,160419,160420,160422,160424,160426],{"class":107,"line":1206},[105,160421,32436],{"class":164},[105,160423,116],{"class":115},[105,160425,160329],{"class":220},[105,160427,122],{"class":115},[105,160429,160430],{"class":107,"line":1212},[105,160431,31612],{"class":111},[105,160433,160434,160436],{"class":107,"line":1303},[105,160435,1692],{"class":111},[105,160437,3730],{"class":115},[105,160439,160440,160442,160444,160446],{"class":107,"line":1309},[105,160441,31284],{"class":164},[105,160443,116],{"class":115},[105,160445,160350],{"class":220},[105,160447,122],{"class":115},[47,160449,160451],{"id":160450},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160453,123277],{},[59,160455,160456,160459,160462],{},[62,160457,160458],{},"用户最多输入 3 次密码。",[62,160460,160461],{},"密码正确则登录成功。",[62,160463,160464],{},"3 次都错误则锁定账号。",[14,160466,10027],{},[96,160468,160470],{"className":30363,"code":160469,"language":30365,"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",[102,160471,160472,160482,160486,160502,160518,160522,160534,160545,160549,160555,160580,160586],{"__ignoreMap":22},[105,160473,160474,160477,160479],{"class":107,"line":108},[105,160475,160476],{"class":115},"password ",[105,160478,161],{"class":111},[105,160480,160481],{"class":220}," \"123456\"\n",[105,160483,160484],{"class":107,"line":28},[105,160485,2391],{"emptyLinePlaceholder":32},[105,160487,160488,160490,160492,160494,160496,160498,160500],{"class":107,"line":1171},[105,160489,3016],{"class":111},[105,160491,9430],{"class":115},[105,160493,26028],{"class":111},[105,160495,32428],{"class":164},[105,160497,116],{"class":115},[105,160499,187],{"class":164},[105,160501,30771],{"class":115},[105,160503,160504,160507,160509,160511,160513,160516],{"class":107,"line":1186},[105,160505,160506],{"class":115},"    user_password ",[105,160508,161],{"class":111},[105,160510,60590],{"class":164},[105,160512,116],{"class":115},[105,160514,160515],{"class":220},"\"请输入密码:\"",[105,160517,122],{"class":115},[105,160519,160520],{"class":107,"line":1192},[105,160521,2391],{"emptyLinePlaceholder":32},[105,160523,160524,160526,160529,160531],{"class":107,"line":1206},[105,160525,3092],{"class":111},[105,160527,160528],{"class":115}," user_password ",[105,160530,2940],{"class":111},[105,160532,160533],{"class":115}," password:\n",[105,160535,160536,160538,160540,160543],{"class":107,"line":1212},[105,160537,32436],{"class":164},[105,160539,116],{"class":115},[105,160541,160542],{"class":220},"\"登录成功\"",[105,160544,122],{"class":115},[105,160546,160547],{"class":107,"line":1303},[105,160548,31612],{"class":111},[105,160550,160551,160553],{"class":107,"line":1309},[105,160552,158007],{"class":111},[105,160554,3730],{"class":115},[105,160556,160557,160559,160561,160563,160566,160569,160571,160573,160575,160578],{"class":107,"line":1321},[105,160558,32436],{"class":164},[105,160560,116],{"class":115},[105,160562,168],{"class":111},[105,160564,160565],{"class":220},"\"密码错误，还剩",[105,160567,160568],{"class":164},"{2",[105,160570,52256],{"class":111},[105,160572,3023],{"class":115},[105,160574,1062],{"class":164},[105,160576,160577],{"class":220},"次机会\"",[105,160579,122],{"class":115},[105,160581,160582,160584],{"class":107,"line":1603},[105,160583,1692],{"class":111},[105,160585,3730],{"class":115},[105,160587,160588,160590,160592,160595],{"class":107,"line":1608},[105,160589,31284],{"class":164},[105,160591,116],{"class":115},[105,160593,160594],{"class":220},"\"账号已锁定\"",[105,160596,122],{"class":115},[47,160598,160600],{"id":160599},"_413-小案例菜单程序","4.13 小案例：菜单程序",[96,160602,160604],{"className":30363,"code":160603,"language":30365,"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",[102,160605,160606,160614,160625,160636,160647,160658,160669,160673,160688,160692,160704,160715,160727,160738,160750,160761,160773,160783,160787,160793],{"__ignoreMap":22},[105,160607,160608,160610,160612],{"class":107,"line":108},[105,160609,108648],{"class":111},[105,160611,95277],{"class":164},[105,160613,3730],{"class":115},[105,160615,160616,160618,160620,160623],{"class":107,"line":28},[105,160617,31284],{"class":164},[105,160619,116],{"class":115},[105,160621,160622],{"class":220},"\"====== 菜单 ======\"",[105,160624,122],{"class":115},[105,160626,160627,160629,160631,160634],{"class":107,"line":1171},[105,160628,31284],{"class":164},[105,160630,116],{"class":115},[105,160632,160633],{"class":220},"\"1. 查询余额\"",[105,160635,122],{"class":115},[105,160637,160638,160640,160642,160645],{"class":107,"line":1186},[105,160639,31284],{"class":164},[105,160641,116],{"class":115},[105,160643,160644],{"class":220},"\"2. 存款\"",[105,160646,122],{"class":115},[105,160648,160649,160651,160653,160656],{"class":107,"line":1192},[105,160650,31284],{"class":164},[105,160652,116],{"class":115},[105,160654,160655],{"class":220},"\"3. 取款\"",[105,160657,122],{"class":115},[105,160659,160660,160662,160664,160667],{"class":107,"line":1206},[105,160661,31284],{"class":164},[105,160663,116],{"class":115},[105,160665,160666],{"class":220},"\"0. 退出\"",[105,160668,122],{"class":115},[105,160670,160671],{"class":107,"line":1212},[105,160672,2391],{"emptyLinePlaceholder":32},[105,160674,160675,160678,160680,160682,160684,160686],{"class":107,"line":1303},[105,160676,160677],{"class":115},"    choice ",[105,160679,161],{"class":111},[105,160681,60590],{"class":164},[105,160683,116],{"class":115},[105,160685,153058],{"class":220},[105,160687,122],{"class":115},[105,160689,160690],{"class":107,"line":1309},[105,160691,2391],{"emptyLinePlaceholder":32},[105,160693,160694,160696,160698,160700,160702],{"class":107,"line":1321},[105,160695,3092],{"class":111},[105,160697,153071],{"class":115},[105,160699,2940],{"class":111},[105,160701,153076],{"class":220},[105,160703,3730],{"class":115},[105,160705,160706,160708,160710,160713],{"class":107,"line":1603},[105,160707,32436],{"class":164},[105,160709,116],{"class":115},[105,160711,160712],{"class":220},"\"余额为1000元\"",[105,160714,122],{"class":115},[105,160716,160717,160719,160721,160723,160725],{"class":107,"line":1608},[105,160718,39278],{"class":111},[105,160720,153071],{"class":115},[105,160722,2940],{"class":111},[105,160724,153095],{"class":220},[105,160726,3730],{"class":115},[105,160728,160729,160731,160733,160736],{"class":107,"line":1614},[105,160730,32436],{"class":164},[105,160732,116],{"class":115},[105,160734,160735],{"class":220},"\"存款功能\"",[105,160737,122],{"class":115},[105,160739,160740,160742,160744,160746,160748],{"class":107,"line":1619},[105,160741,39278],{"class":111},[105,160743,153071],{"class":115},[105,160745,2940],{"class":111},[105,160747,153113],{"class":220},[105,160749,3730],{"class":115},[105,160751,160752,160754,160756,160759],{"class":107,"line":1633},[105,160753,32436],{"class":164},[105,160755,116],{"class":115},[105,160757,160758],{"class":220},"\"取款功能\"",[105,160760,122],{"class":115},[105,160762,160763,160765,160767,160769,160771],{"class":107,"line":1638},[105,160764,39278],{"class":111},[105,160766,153071],{"class":115},[105,160768,2940],{"class":111},[105,160770,153167],{"class":220},[105,160772,3730],{"class":115},[105,160774,160775,160777,160779,160781],{"class":107,"line":1644},[105,160776,32436],{"class":164},[105,160778,116],{"class":115},[105,160780,153178],{"class":220},[105,160782,122],{"class":115},[105,160784,160785],{"class":107,"line":1665},[105,160786,31612],{"class":111},[105,160788,160789,160791],{"class":107,"line":1670},[105,160790,158007],{"class":111},[105,160792,3730],{"class":115},[105,160794,160795,160797,160799,160801],{"class":107,"line":1684},[105,160796,32436],{"class":164},[105,160798,116],{"class":115},[105,160800,153199],{"class":220},[105,160802,122],{"class":115},[14,160804,160805,160806,160808,160809,28370],{},"菜单类程序通常使用 ",[102,160807,159507],{},"，用户选择退出时 ",[102,160810,2044],{},[47,160812,160814],{"id":160813},"_414-易错点","4.14 易错点",[59,160816,160817,160822,160828,160836,160842],{},[62,160818,160819,160821],{},[102,160820,108648],{}," 循环必须更新控制变量。",[62,160823,160824,160827],{},[102,160825,160826],{},"range(1, 10)"," 不包含 10。",[62,160829,160830,160832,160833,160835],{},[102,160831,2044],{}," 结束整个循环，",[102,160834,154657],{}," 只跳过本轮。",[62,160837,160838,160839,160841],{},"嵌套循环中，",[102,160840,2044],{}," 只跳出当前所在的一层循环。",[62,160843,160844],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[47,160846,160848],{"id":160847},"_415-本章练习","4.15 本章练习",[59,160850,160851,160854,160857,160860,160863],{},[62,160852,160853],{},"输出 1 到 100。",[62,160855,160856],{},"计算 1 到 100 的偶数和。",[62,160858,160859],{},"输出 100 以内能被 3 和 5 同时整除的数。",[62,160861,160862],{},"编写猜数字游戏，限制最多猜 7 次。",[62,160864,160865],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5118,160867,160868],{},"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":28,"depth":28,"links":160870},[160871,160872,160873,160874,160875,160879,160880,160881,160882,160883,160884,160885,160886,160887,160888],{"id":159127,"depth":28,"text":159128},{"id":159157,"depth":28,"text":159158},{"id":159246,"depth":28,"text":159247},{"id":159340,"depth":28,"text":159341},{"id":159514,"depth":28,"text":159515,"children":160876},[160877,160878],{"id":159518,"depth":1171,"text":159519},{"id":159582,"depth":1171,"text":159583},{"id":159646,"depth":28,"text":159647},{"id":159741,"depth":28,"text":159742},{"id":159850,"depth":28,"text":159851},{"id":160046,"depth":28,"text":160047},{"id":160131,"depth":28,"text":160132},{"id":160270,"depth":28,"text":160271},{"id":160450,"depth":28,"text":160451},{"id":160599,"depth":28,"text":160600},{"id":160813,"depth":28,"text":160814},{"id":160847,"depth":28,"text":160848},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159119,"description":23369},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160895,"title":160896,"body":160897,"description":23369,"extension":30,"meta":162902,"navigation":32,"path":162903,"seo":162904,"stem":162905,"__hash__":162906},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160898,"toc":162882},[160899,160902,160906,160909,160912,160926,160929,160943,160947,160949,160968,160970,161017,161019,161033,161037,161111,161114,161118,161121,161180,161188,161191,161244,161247,161251,161256,161311,161319,161369,161373,161378,161386,161485,161491,161495,161500,161503,161514,161555,161568,161572,161575,161611,161614,161627,161630,161690,161694,161698,161701,161752,161756,161759,161806,161812,161878,161881,161885,161888,162004,162007,162011,162014,162120,162124,162127,162165,162168,162210,162213,162273,162276,162280,162744,162747,162751,162778,162784,162845,162849,162879],[10,160900,160896],{"id":160901},"_5-函数基础",[47,160903,160905],{"id":160904},"_51-为什么需要函数","5.1 为什么需要函数",[14,160907,160908],{},"函数用于封装一段可以重复使用的代码。",[14,160910,160911],{},"不使用函数的问题：",[59,160913,160914,160917,160920,160923],{},[62,160915,160916],{},"重复代码多。",[62,160918,160919],{},"修改逻辑时容易漏改。",[62,160921,160922],{},"主流程不清晰。",[62,160924,160925],{},"程序越写越长，难以维护。",[14,160927,160928],{},"使用函数后的好处：",[59,160930,160931,160934,160937,160940],{},[62,160932,160933],{},"提高复用性。",[62,160935,160936],{},"提高可读性。",[62,160938,160939],{},"便于调试。",[62,160941,160942],{},"便于分工。",[47,160944,160946],{"id":160945},"_52-函数定义","5.2 函数定义",[14,160948,5173],{},[96,160950,160952],{"className":30363,"code":160951,"language":30365,"meta":22,"style":22},"def 函数名():\n    函数体\n",[102,160953,160954,160963],{"__ignoreMap":22},[105,160955,160956,160958,160961],{"class":107,"line":108},[105,160957,31932],{"class":111},[105,160959,160960],{"class":1954}," 函数名",[105,160962,31938],{"class":115},[105,160964,160965],{"class":107,"line":28},[105,160966,160967],{"class":115},"    函数体\n",[14,160969,15127],{},[96,160971,160973],{"className":30363,"code":160972,"language":30365,"meta":22,"style":22},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[102,160974,160975,160984,160994,161004,161008,161012],{"__ignoreMap":22},[105,160976,160977,160979,160982],{"class":107,"line":108},[105,160978,31932],{"class":111},[105,160980,160981],{"class":1954}," say_hello",[105,160983,31938],{"class":115},[105,160985,160986,160988,160990,160992],{"class":107,"line":28},[105,160987,31284],{"class":164},[105,160989,116],{"class":115},[105,160991,5836],{"class":220},[105,160993,122],{"class":115},[105,160995,160996,160998,161000,161002],{"class":107,"line":1171},[105,160997,31284],{"class":164},[105,160999,116],{"class":115},[105,161001,146624],{"class":220},[105,161003,122],{"class":115},[105,161005,161006],{"class":107,"line":1186},[105,161007,2391],{"emptyLinePlaceholder":32},[105,161009,161010],{"class":107,"line":1192},[105,161011,2391],{"emptyLinePlaceholder":32},[105,161013,161014],{"class":107,"line":1206},[105,161015,161016],{"class":115},"say_hello()\n",[14,161018,9017],{},[59,161020,161021,161024,161027,161030],{},[62,161022,161023],{},"函数必须先定义，再调用。",[62,161025,161026],{},"函数名遵循变量命名规则。",[62,161028,161029],{},"函数体需要缩进。",[62,161031,161032],{},"函数不调用就不会执行。",[47,161034,161036],{"id":161035},"_53-函数调用","5.3 函数调用",[96,161038,161040],{"className":30363,"code":161039,"language":30365,"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",[102,161041,161042,161051,161062,161073,161084,161094,161098,161102,161107],{"__ignoreMap":22},[105,161043,161044,161046,161049],{"class":107,"line":108},[105,161045,31932],{"class":111},[105,161047,161048],{"class":1954}," print_menu",[105,161050,31938],{"class":115},[105,161052,161053,161055,161057,161060],{"class":107,"line":28},[105,161054,31284],{"class":164},[105,161056,116],{"class":115},[105,161058,161059],{"class":220},"\"1. 查询\"",[105,161061,122],{"class":115},[105,161063,161064,161066,161068,161071],{"class":107,"line":1171},[105,161065,31284],{"class":164},[105,161067,116],{"class":115},[105,161069,161070],{"class":220},"\"2. 添加\"",[105,161072,122],{"class":115},[105,161074,161075,161077,161079,161082],{"class":107,"line":1186},[105,161076,31284],{"class":164},[105,161078,116],{"class":115},[105,161080,161081],{"class":220},"\"3. 删除\"",[105,161083,122],{"class":115},[105,161085,161086,161088,161090,161092],{"class":107,"line":1192},[105,161087,31284],{"class":164},[105,161089,116],{"class":115},[105,161091,160666],{"class":220},[105,161093,122],{"class":115},[105,161095,161096],{"class":107,"line":1206},[105,161097,2391],{"emptyLinePlaceholder":32},[105,161099,161100],{"class":107,"line":1212},[105,161101,2391],{"emptyLinePlaceholder":32},[105,161103,161104],{"class":107,"line":1303},[105,161105,161106],{"class":115},"print_menu()\n",[105,161108,161109],{"class":107,"line":1309},[105,161110,161106],{"class":115},[14,161112,161113],{},"函数可以多次调用，每次调用都会执行函数体。",[47,161115,161117],{"id":161116},"_54-参数","5.4 参数",[14,161119,161120],{},"参数用于向函数传递数据。",[96,161122,161124],{"className":30363,"code":161123,"language":30365,"meta":22,"style":22},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[102,161125,161126,161135,161155,161159,161163,161172],{"__ignoreMap":22},[105,161127,161128,161130,161132],{"class":107,"line":108},[105,161129,31932],{"class":111},[105,161131,160981],{"class":1954},[105,161133,161134],{"class":115},"(name):\n",[105,161136,161137,161139,161141,161143,161145,161147,161149,161151,161153],{"class":107,"line":28},[105,161138,31284],{"class":164},[105,161140,116],{"class":115},[105,161142,168],{"class":111},[105,161144,157039],{"class":220},[105,161146,1012],{"class":164},[105,161148,79795],{"class":115},[105,161150,1062],{"class":164},[105,161152,367],{"class":220},[105,161154,122],{"class":115},[105,161156,161157],{"class":107,"line":1171},[105,161158,2391],{"emptyLinePlaceholder":32},[105,161160,161161],{"class":107,"line":1186},[105,161162,2391],{"emptyLinePlaceholder":32},[105,161164,161165,161168,161170],{"class":107,"line":1192},[105,161166,161167],{"class":115},"say_hello(",[105,161169,149873],{"class":220},[105,161171,122],{"class":115},[105,161173,161174,161176,161178],{"class":107,"line":1206},[105,161175,161167],{"class":115},[105,161177,150921],{"class":220},[105,161179,122],{"class":115},[14,161181,161182,161184,161185,161187],{},[102,161183,79795],{}," 是形参，",[102,161186,149873],{}," 是实参。",[14,161189,161190],{},"多个参数：",[96,161192,161194],{"className":30363,"code":161193,"language":30365,"meta":22,"style":22},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[102,161195,161196,161204,161217,161223,161227,161231],{"__ignoreMap":22},[105,161197,161198,161200,161202],{"class":107,"line":108},[105,161199,31932],{"class":111},[105,161201,5201],{"class":1954},[105,161203,151078],{"class":115},[105,161205,161206,161209,161211,161213,161215],{"class":107,"line":28},[105,161207,161208],{"class":115},"    result ",[105,161210,161],{"class":111},[105,161212,10861],{"class":115},[105,161214,597],{"class":111},[105,161216,151089],{"class":115},[105,161218,161219,161221],{"class":107,"line":1171},[105,161220,31284],{"class":164},[105,161222,76570],{"class":115},[105,161224,161225],{"class":107,"line":1186},[105,161226,2391],{"emptyLinePlaceholder":32},[105,161228,161229],{"class":107,"line":1192},[105,161230,2391],{"emptyLinePlaceholder":32},[105,161232,161233,161236,161238,161240,161242],{"class":107,"line":1206},[105,161234,161235],{"class":115},"add(",[105,161237,562],{"class":164},[105,161239,12427],{"class":115},[105,161241,816],{"class":164},[105,161243,122],{"class":115},[14,161245,161246],{},"调用时参数数量必须匹配。",[47,161248,161250],{"id":161249},"_55-返回值","5.5 返回值",[14,161252,161253,161255],{},[102,161254,17038],{}," 用于把函数内部的结果返回给调用者。",[96,161257,161259],{"className":30363,"code":161258,"language":30365,"meta":22,"style":22},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[102,161260,161261,161269,161279,161283,161287,161305],{"__ignoreMap":22},[105,161262,161263,161265,161267],{"class":107,"line":108},[105,161264,31932],{"class":111},[105,161266,5201],{"class":1954},[105,161268,151078],{"class":115},[105,161270,161271,161273,161275,161277],{"class":107,"line":28},[105,161272,4081],{"class":111},[105,161274,10861],{"class":115},[105,161276,597],{"class":111},[105,161278,151089],{"class":115},[105,161280,161281],{"class":107,"line":1171},[105,161282,2391],{"emptyLinePlaceholder":32},[105,161284,161285],{"class":107,"line":1186},[105,161286,2391],{"emptyLinePlaceholder":32},[105,161288,161289,161292,161294,161297,161299,161301,161303],{"class":107,"line":1192},[105,161290,161291],{"class":115},"result ",[105,161293,161],{"class":111},[105,161295,161296],{"class":115}," add(",[105,161298,562],{"class":164},[105,161300,12427],{"class":115},[105,161302,816],{"class":164},[105,161304,122],{"class":115},[105,161306,161307,161309],{"class":107,"line":1206},[105,161308,30400],{"class":164},[105,161310,76570],{"class":115},[14,161312,161313,161314,161316,161317,28370],{},"如果函数没有写 ",[102,161315,17038],{},"，默认返回 ",[102,161318,95671],{},[96,161320,161322],{"className":30363,"code":161321,"language":30365,"meta":22,"style":22},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[102,161323,161324,161332,161342,161346,161350,161359],{"__ignoreMap":22},[105,161325,161326,161328,161330],{"class":107,"line":108},[105,161327,31932],{"class":111},[105,161329,160981],{"class":1954},[105,161331,31938],{"class":115},[105,161333,161334,161336,161338,161340],{"class":107,"line":28},[105,161335,31284],{"class":164},[105,161337,116],{"class":115},[105,161339,5836],{"class":220},[105,161341,122],{"class":115},[105,161343,161344],{"class":107,"line":1171},[105,161345,2391],{"emptyLinePlaceholder":32},[105,161347,161348],{"class":107,"line":1186},[105,161349,2391],{"emptyLinePlaceholder":32},[105,161351,161352,161354,161356],{"class":107,"line":1192},[105,161353,161291],{"class":115},[105,161355,161],{"class":111},[105,161357,161358],{"class":115}," say_hello()\n",[105,161360,161361,161363,161366],{"class":107,"line":1206},[105,161362,30400],{"class":164},[105,161364,161365],{"class":115},"(result)  ",[105,161367,161368],{"class":174},"# None\n",[47,161370,161372],{"id":161371},"_56-return的作用","5.6 return的作用",[14,161374,161375,161377],{},[102,161376,17038],{}," 有两个作用：",[59,161379,161380,161383],{},[62,161381,161382],{},"返回结果。",[62,161384,161385],{},"结束函数。",[96,161387,161389],{"className":30363,"code":161388,"language":30365,"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",[102,161390,161391,161401,161413,161420,161424,161436,161443,161447,161454,161458,161462,161473],{"__ignoreMap":22},[105,161392,161393,161395,161398],{"class":107,"line":108},[105,161394,31932],{"class":111},[105,161396,161397],{"class":1954}," check_age",[105,161399,161400],{"class":115},"(age):\n",[105,161402,161403,161405,161407,161409,161411],{"class":107,"line":28},[105,161404,3092],{"class":111},[105,161406,15699],{"class":115},[105,161408,1026],{"class":111},[105,161410,4084],{"class":164},[105,161412,3730],{"class":115},[105,161414,161415,161417],{"class":107,"line":1171},[105,161416,14744],{"class":111},[105,161418,161419],{"class":220}," \"年龄不合法\"\n",[105,161421,161422],{"class":107,"line":1186},[105,161423,2391],{"emptyLinePlaceholder":32},[105,161425,161426,161428,161430,161432,161434],{"class":107,"line":1192},[105,161427,3092],{"class":111},[105,161429,15699],{"class":115},[105,161431,1701],{"class":111},[105,161433,156270],{"class":164},[105,161435,3730],{"class":115},[105,161437,161438,161440],{"class":107,"line":1206},[105,161439,14744],{"class":111},[105,161441,161442],{"class":220}," \"成年人\"\n",[105,161444,161445],{"class":107,"line":1212},[105,161446,2391],{"emptyLinePlaceholder":32},[105,161448,161449,161451],{"class":107,"line":1303},[105,161450,4081],{"class":111},[105,161452,161453],{"class":220}," \"未成年人\"\n",[105,161455,161456],{"class":107,"line":1309},[105,161457,2391],{"emptyLinePlaceholder":32},[105,161459,161460],{"class":107,"line":1321},[105,161461,2391],{"emptyLinePlaceholder":32},[105,161463,161464,161466,161469,161471],{"class":107,"line":1603},[105,161465,30400],{"class":164},[105,161467,161468],{"class":115},"(check_age(",[105,161470,816],{"class":164},[105,161472,30482],{"class":115},[105,161474,161475,161477,161479,161481,161483],{"class":107,"line":1608},[105,161476,30400],{"class":164},[105,161478,161468],{"class":115},[105,161480,648],{"class":111},[105,161482,333],{"class":164},[105,161484,30482],{"class":115},[14,161486,161487,161488,161490],{},"函数执行到 ",[102,161489,17038],{}," 后，后面的代码不会继续执行。",[47,161492,161494],{"id":161493},"_57-none","5.7 None",[14,161496,161497,161499],{},[102,161498,95671],{}," 表示空值或没有结果。",[14,161501,161502],{},"常见使用场景：",[59,161504,161505,161508,161511],{},[62,161506,161507],{},"函数没有返回值。",[62,161509,161510],{},"变量暂时没有具体值。",[62,161512,161513],{},"表示查询不到结果。",[96,161515,161517],{"className":30363,"code":161516,"language":30365,"meta":22,"style":22},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[102,161518,161519,161527,161531,161544],{"__ignoreMap":22},[105,161520,161521,161523,161525],{"class":107,"line":108},[105,161522,161291],{"class":115},[105,161524,161],{"class":111},[105,161526,152157],{"class":164},[105,161528,161529],{"class":107,"line":28},[105,161530,2391],{"emptyLinePlaceholder":32},[105,161532,161533,161535,161538,161540,161542],{"class":107,"line":1171},[105,161534,1522],{"class":111},[105,161536,161537],{"class":115}," result ",[105,161539,38912],{"class":111},[105,161541,38918],{"class":164},[105,161543,3730],{"class":115},[105,161545,161546,161548,161550,161553],{"class":107,"line":1186},[105,161547,31284],{"class":164},[105,161549,116],{"class":115},[105,161551,161552],{"class":220},"\"没有数据\"",[105,161554,122],{"class":115},[14,161556,161557,161558,161560,161561,161564,161565,28370],{},"判断 ",[102,161559,95671],{}," 推荐使用 ",[102,161562,161563],{},"is None","，不要写成 ",[102,161566,161567],{},"== None",[47,161569,161571],{"id":161570},"_58-函数文档字符串","5.8 函数文档字符串",[14,161573,161574],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[96,161576,161578],{"className":30363,"code":161577,"language":30365,"meta":22,"style":22},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[102,161579,161580,161590,161595],{"__ignoreMap":22},[105,161581,161582,161584,161587],{"class":107,"line":108},[105,161583,31932],{"class":111},[105,161585,161586],{"class":1954}," calculate_bmi",[105,161588,161589],{"class":115},"(weight, height):\n",[105,161591,161592],{"class":107,"line":28},[105,161593,161594],{"class":220},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[105,161596,161597,161599,161602,161604,161607,161609],{"class":107,"line":1171},[105,161598,4081],{"class":111},[105,161600,161601],{"class":115}," weight ",[105,161603,700],{"class":111},[105,161605,161606],{"class":115}," height ",[105,161608,10653],{"class":111},[105,161610,47708],{"class":164},[14,161612,161613],{},"查看说明：",[96,161615,161617],{"className":30363,"code":161616,"language":30365,"meta":22,"style":22},"help(calculate_bmi)\n",[102,161618,161619],{"__ignoreMap":22},[105,161620,161621,161624],{"class":107,"line":108},[105,161622,161623],{"class":164},"help",[105,161625,161626],{"class":115},"(calculate_bmi)\n",[14,161628,161629],{},"较完整的写法：",[96,161631,161633],{"className":30363,"code":161632,"language":30365,"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",[102,161634,161635,161643,161648,161653,161657,161662,161667,161672,161676],{"__ignoreMap":22},[105,161636,161637,161639,161641],{"class":107,"line":108},[105,161638,31932],{"class":111},[105,161640,161586],{"class":1954},[105,161642,161589],{"class":115},[105,161644,161645],{"class":107,"line":28},[105,161646,161647],{"class":220},"    \"\"\"\n",[105,161649,161650],{"class":107,"line":1171},[105,161651,161652],{"class":220},"    计算BMI。\n",[105,161654,161655],{"class":107,"line":1186},[105,161656,2391],{"emptyLinePlaceholder":32},[105,161658,161659],{"class":107,"line":1192},[105,161660,161661],{"class":220},"    :param weight: 体重，单位kg\n",[105,161663,161664],{"class":107,"line":1206},[105,161665,161666],{"class":220},"    :param height: 身高，单位m\n",[105,161668,161669],{"class":107,"line":1212},[105,161670,161671],{"class":220},"    :return: BMI数值\n",[105,161673,161674],{"class":107,"line":1303},[105,161675,161647],{"class":220},[105,161677,161678,161680,161682,161684,161686,161688],{"class":107,"line":1309},[105,161679,4081],{"class":111},[105,161681,161601],{"class":115},[105,161683,700],{"class":111},[105,161685,161606],{"class":115},[105,161687,10653],{"class":111},[105,161689,47708],{"class":164},[47,161691,161693],{"id":161692},"_59-变量作用域","5.9 变量作用域",[76,161695,161697],{"id":161696},"_591-局部变量","5.9.1 局部变量",[14,161699,161700],{},"在函数内部定义的变量，只能在函数内部使用。",[96,161702,161704],{"className":30363,"code":161703,"language":30365,"meta":22,"style":22},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[102,161705,161706,161715,161723,161729,161733,161737,161742],{"__ignoreMap":22},[105,161707,161708,161710,161713],{"class":107,"line":108},[105,161709,31932],{"class":111},[105,161711,161712],{"class":1954}," test",[105,161714,31938],{"class":115},[105,161716,161717,161719,161721],{"class":107,"line":28},[105,161718,45578],{"class":115},[105,161720,161],{"class":111},[105,161722,58413],{"class":164},[105,161724,161725,161727],{"class":107,"line":1171},[105,161726,31284],{"class":164},[105,161728,129],{"class":115},[105,161730,161731],{"class":107,"line":1186},[105,161732,2391],{"emptyLinePlaceholder":32},[105,161734,161735],{"class":107,"line":1192},[105,161736,2391],{"emptyLinePlaceholder":32},[105,161738,161739],{"class":107,"line":1206},[105,161740,161741],{"class":115},"test()\n",[105,161743,161744,161746,161749],{"class":107,"line":1212},[105,161745,30400],{"class":164},[105,161747,161748],{"class":115},"(num)  ",[105,161750,161751],{"class":174},"# 报错\n",[76,161753,161755],{"id":161754},"_592-全局变量","5.9.2 全局变量",[14,161757,161758],{},"在函数外部定义的变量，可以在函数内部读取。",[96,161760,161762],{"className":30363,"code":161761,"language":30365,"meta":22,"style":22},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[102,161763,161764,161772,161776,161780,161788,161794,161798,161802],{"__ignoreMap":22},[105,161765,161766,161768,161770],{"class":107,"line":108},[105,161767,146521],{"class":115},[105,161769,161],{"class":111},[105,161771,149338],{"class":220},[105,161773,161774],{"class":107,"line":28},[105,161775,2391],{"emptyLinePlaceholder":32},[105,161777,161778],{"class":107,"line":1171},[105,161779,2391],{"emptyLinePlaceholder":32},[105,161781,161782,161784,161786],{"class":107,"line":1186},[105,161783,31932],{"class":111},[105,161785,160981],{"class":1954},[105,161787,31938],{"class":115},[105,161789,161790,161792],{"class":107,"line":1192},[105,161791,31284],{"class":164},[105,161793,150645],{"class":115},[105,161795,161796],{"class":107,"line":1206},[105,161797,2391],{"emptyLinePlaceholder":32},[105,161799,161800],{"class":107,"line":1212},[105,161801,2391],{"emptyLinePlaceholder":32},[105,161803,161804],{"class":107,"line":1303},[105,161805,161016],{"class":115},[14,161807,161808,161809,28370],{},"如果要在函数内部修改全局变量，需要 ",[102,161810,161811],{},"global",[96,161813,161815],{"className":30363,"code":161814,"language":30365,"meta":22,"style":22},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[102,161816,161817,161825,161829,161833,161842,161850,161858,161862,161866,161871],{"__ignoreMap":22},[105,161818,161819,161821,161823],{"class":107,"line":108},[105,161820,146676],{"class":115},[105,161822,161],{"class":111},[105,161824,47318],{"class":164},[105,161826,161827],{"class":107,"line":28},[105,161828,2391],{"emptyLinePlaceholder":32},[105,161830,161831],{"class":107,"line":1171},[105,161832,2391],{"emptyLinePlaceholder":32},[105,161834,161835,161837,161840],{"class":107,"line":1186},[105,161836,31932],{"class":111},[105,161838,161839],{"class":1954}," add_count",[105,161841,31938],{"class":115},[105,161843,161844,161847],{"class":107,"line":1192},[105,161845,161846],{"class":111},"    global",[105,161848,161849],{"class":115}," count\n",[105,161851,161852,161854,161856],{"class":107,"line":1206},[105,161853,159418],{"class":115},[105,161855,9469],{"class":111},[105,161857,55684],{"class":164},[105,161859,161860],{"class":107,"line":1212},[105,161861,2391],{"emptyLinePlaceholder":32},[105,161863,161864],{"class":107,"line":1303},[105,161865,2391],{"emptyLinePlaceholder":32},[105,161867,161868],{"class":107,"line":1309},[105,161869,161870],{"class":115},"add_count()\n",[105,161872,161873,161875],{"class":107,"line":1321},[105,161874,30400],{"class":164},[105,161876,161877],{"class":115},"(count)\n",[14,161879,161880],{},"不建议大量使用全局变量，项目变大后很难维护。",[47,161882,161884],{"id":161883},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161886,161887],{},"一个函数中可以调用另一个函数。",[96,161889,161891],{"className":30363,"code":161890,"language":30365,"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",[102,161892,161893,161902,161916,161920,161924,161933,161938,161958,161979,161983,161987,161991],{"__ignoreMap":22},[105,161894,161895,161897,161900],{"class":107,"line":108},[105,161896,31932],{"class":111},[105,161898,161899],{"class":1954}," print_line",[105,161901,31938],{"class":115},[105,161903,161904,161906,161908,161910,161912,161914],{"class":107,"line":28},[105,161905,31284],{"class":164},[105,161907,116],{"class":115},[105,161909,32468],{"class":220},[105,161911,6510],{"class":111},[105,161913,78650],{"class":164},[105,161915,122],{"class":115},[105,161917,161918],{"class":107,"line":1171},[105,161919,2391],{"emptyLinePlaceholder":32},[105,161921,161922],{"class":107,"line":1186},[105,161923,2391],{"emptyLinePlaceholder":32},[105,161925,161926,161928,161931],{"class":107,"line":1192},[105,161927,31932],{"class":111},[105,161929,161930],{"class":1954}," print_info",[105,161932,149360],{"class":115},[105,161934,161935],{"class":107,"line":1206},[105,161936,161937],{"class":115},"    print_line()\n",[105,161939,161940,161942,161944,161946,161948,161950,161952,161954,161956],{"class":107,"line":1212},[105,161941,31284],{"class":164},[105,161943,116],{"class":115},[105,161945,168],{"class":111},[105,161947,156667],{"class":220},[105,161949,1012],{"class":164},[105,161951,79795],{"class":115},[105,161953,1062],{"class":164},[105,161955,367],{"class":220},[105,161957,122],{"class":115},[105,161959,161960,161962,161964,161966,161969,161971,161973,161975,161977],{"class":107,"line":1303},[105,161961,31284],{"class":164},[105,161963,116],{"class":115},[105,161965,168],{"class":111},[105,161967,161968],{"class":220},"\"年龄:",[105,161970,1012],{"class":164},[105,161972,70206],{"class":115},[105,161974,1062],{"class":164},[105,161976,367],{"class":220},[105,161978,122],{"class":115},[105,161980,161981],{"class":107,"line":1309},[105,161982,161937],{"class":115},[105,161984,161985],{"class":107,"line":1321},[105,161986,2391],{"emptyLinePlaceholder":32},[105,161988,161989],{"class":107,"line":1603},[105,161990,2391],{"emptyLinePlaceholder":32},[105,161992,161993,161996,161998,162000,162002],{"class":107,"line":1608},[105,161994,161995],{"class":115},"print_info(",[105,161997,149873],{"class":220},[105,161999,12427],{"class":115},[105,162001,766],{"class":164},[105,162003,122],{"class":115},[14,162005,162006],{},"这种方式可以把小功能组合成大功能。",[47,162008,162010],{"id":162009},"_511-参数检查","5.11 参数检查",[14,162012,162013],{},"函数内部可以检查参数是否合法。",[96,162015,162017],{"className":30363,"code":162016,"language":30365,"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",[102,162018,162019,162028,162040,162046,162056,162060,162064,162081,162085,162097,162108,162114],{"__ignoreMap":22},[105,162020,162021,162023,162026],{"class":107,"line":108},[105,162022,31932],{"class":111},[105,162024,162025],{"class":1954}," divide",[105,162027,151078],{"class":115},[105,162029,162030,162032,162034,162036,162038],{"class":107,"line":28},[105,162031,3092],{"class":111},[105,162033,10874],{"class":115},[105,162035,2940],{"class":111},[105,162037,4084],{"class":164},[105,162039,3730],{"class":115},[105,162041,162042,162044],{"class":107,"line":1171},[105,162043,14744],{"class":111},[105,162045,152157],{"class":164},[105,162047,162048,162050,162052,162054],{"class":107,"line":1186},[105,162049,4081],{"class":111},[105,162051,10861],{"class":115},[105,162053,700],{"class":111},[105,162055,151089],{"class":115},[105,162057,162058],{"class":107,"line":1192},[105,162059,2391],{"emptyLinePlaceholder":32},[105,162061,162062],{"class":107,"line":1206},[105,162063,2391],{"emptyLinePlaceholder":32},[105,162065,162066,162068,162070,162073,162075,162077,162079],{"class":107,"line":1212},[105,162067,161291],{"class":115},[105,162069,161],{"class":111},[105,162071,162072],{"class":115}," divide(",[105,162074,562],{"class":164},[105,162076,12427],{"class":115},[105,162078,307],{"class":164},[105,162080,122],{"class":115},[105,162082,162083],{"class":107,"line":1303},[105,162084,2391],{"emptyLinePlaceholder":32},[105,162086,162087,162089,162091,162093,162095],{"class":107,"line":1309},[105,162088,1522],{"class":111},[105,162090,161537],{"class":115},[105,162092,38912],{"class":111},[105,162094,38918],{"class":164},[105,162096,3730],{"class":115},[105,162098,162099,162101,162103,162106],{"class":107,"line":1321},[105,162100,31284],{"class":164},[105,162102,116],{"class":115},[105,162104,162105],{"class":220},"\"除数不能为0\"",[105,162107,122],{"class":115},[105,162109,162110,162112],{"class":107,"line":1603},[105,162111,1692],{"class":111},[105,162113,3730],{"class":115},[105,162115,162116,162118],{"class":107,"line":1608},[105,162117,31284],{"class":164},[105,162119,76570],{"class":115},[47,162121,162123],{"id":162122},"_512-类型提示","5.12 类型提示",[14,162125,162126],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[96,162128,162130],{"className":30363,"code":162129,"language":30365,"meta":22,"style":22},"def add(a: int, b: int) -> int:\n    return a + b\n",[102,162131,162132,162155],{"__ignoreMap":22},[105,162133,162134,162136,162138,162141,162143,162146,162148,162151,162153],{"class":107,"line":108},[105,162135,31932],{"class":111},[105,162137,5201],{"class":1954},[105,162139,162140],{"class":115},"(a: ",[105,162142,119],{"class":164},[105,162144,162145],{"class":115},", b: ",[105,162147,119],{"class":164},[105,162149,162150],{"class":115},") -> ",[105,162152,119],{"class":164},[105,162154,3730],{"class":115},[105,162156,162157,162159,162161,162163],{"class":107,"line":28},[105,162158,4081],{"class":111},[105,162160,10861],{"class":115},[105,162162,597],{"class":111},[105,162164,151089],{"class":115},[14,162166,162167],{},"字符串参数：",[96,162169,162171],{"className":30363,"code":162170,"language":30365,"meta":22,"style":22},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[102,162172,162173,162190],{"__ignoreMap":22},[105,162174,162175,162177,162179,162182,162184,162186,162188],{"class":107,"line":108},[105,162176,31932],{"class":111},[105,162178,160981],{"class":1954},[105,162180,162181],{"class":115},"(name: ",[105,162183,1291],{"class":164},[105,162185,162150],{"class":115},[105,162187,95671],{"class":164},[105,162189,3730],{"class":115},[105,162191,162192,162194,162196,162198,162200,162202,162204,162206,162208],{"class":107,"line":28},[105,162193,31284],{"class":164},[105,162195,116],{"class":115},[105,162197,168],{"class":111},[105,162199,157039],{"class":220},[105,162201,1012],{"class":164},[105,162203,79795],{"class":115},[105,162205,1062],{"class":164},[105,162207,367],{"class":220},[105,162209,122],{"class":115},[14,162211,162212],{},"列表参数：",[96,162214,162216],{"className":30363,"code":162215,"language":30365,"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",[102,162217,162218,162237,162245,162257,162266],{"__ignoreMap":22},[105,162219,162220,162222,162225,162228,162230,162233,162235],{"class":107,"line":108},[105,162221,31932],{"class":111},[105,162223,162224],{"class":1954}," get_total",[105,162226,162227],{"class":115},"(numbers: list[",[105,162229,119],{"class":164},[105,162231,162232],{"class":115},"]) -> ",[105,162234,119],{"class":164},[105,162236,3730],{"class":115},[105,162238,162239,162241,162243],{"class":107,"line":28},[105,162240,159292],{"class":115},[105,162242,161],{"class":111},[105,162244,47318],{"class":164},[105,162246,162247,162249,162252,162254],{"class":107,"line":1171},[105,162248,3192],{"class":111},[105,162250,162251],{"class":115}," number ",[105,162253,26028],{"class":111},[105,162255,162256],{"class":115}," numbers:\n",[105,162258,162259,162261,162263],{"class":107,"line":1186},[105,162260,159967],{"class":115},[105,162262,9469],{"class":111},[105,162264,162265],{"class":115}," number\n",[105,162267,162268,162270],{"class":107,"line":1192},[105,162269,4081],{"class":111},[105,162271,162272],{"class":115}," total\n",[14,162274,162275],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[47,162277,162279],{"id":162278},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[96,162281,162283],{"className":30363,"code":162282,"language":30365,"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",[102,162284,162285,162295,162299,162303,162311,162322,162332,162342,162352,162362,162366,162370,162379,162401,162405,162409,162418,162424,162444,162456,162467,162471,162480,162491,162496,162500,162504,162513,162519,162538,162550,162560,162564,162575,162585,162589,162597,162608,162612,162616,162620,162628,162633,162647,162651,162663,162668,162680,162685,162697,162702,162714,162724,162728,162734],{"__ignoreMap":22},[105,162286,162287,162290,162292],{"class":107,"line":108},[105,162288,162289],{"class":115},"balance ",[105,162291,161],{"class":111},[105,162293,162294],{"class":164}," 1000\n",[105,162296,162297],{"class":107,"line":28},[105,162298,2391],{"emptyLinePlaceholder":32},[105,162300,162301],{"class":107,"line":1171},[105,162302,2391],{"emptyLinePlaceholder":32},[105,162304,162305,162307,162309],{"class":107,"line":1186},[105,162306,31932],{"class":111},[105,162308,152018],{"class":1954},[105,162310,31938],{"class":115},[105,162312,162313,162315,162317,162320],{"class":107,"line":1192},[105,162314,31284],{"class":164},[105,162316,116],{"class":115},[105,162318,162319],{"class":220},"\"====== ATM ======\"",[105,162321,122],{"class":115},[105,162323,162324,162326,162328,162330],{"class":107,"line":1206},[105,162325,31284],{"class":164},[105,162327,116],{"class":115},[105,162329,160633],{"class":220},[105,162331,122],{"class":115},[105,162333,162334,162336,162338,162340],{"class":107,"line":1212},[105,162335,31284],{"class":164},[105,162337,116],{"class":115},[105,162339,160644],{"class":220},[105,162341,122],{"class":115},[105,162343,162344,162346,162348,162350],{"class":107,"line":1303},[105,162345,31284],{"class":164},[105,162347,116],{"class":115},[105,162349,160655],{"class":220},[105,162351,122],{"class":115},[105,162353,162354,162356,162358,162360],{"class":107,"line":1309},[105,162355,31284],{"class":164},[105,162357,116],{"class":115},[105,162359,160666],{"class":220},[105,162361,122],{"class":115},[105,162363,162364],{"class":107,"line":1321},[105,162365,2391],{"emptyLinePlaceholder":32},[105,162367,162368],{"class":107,"line":1603},[105,162369,2391],{"emptyLinePlaceholder":32},[105,162371,162372,162374,162377],{"class":107,"line":1608},[105,162373,31932],{"class":111},[105,162375,162376],{"class":1954}," show_balance",[105,162378,31938],{"class":115},[105,162380,162381,162383,162385,162387,162390,162392,162395,162397,162399],{"class":107,"line":1614},[105,162382,31284],{"class":164},[105,162384,116],{"class":115},[105,162386,168],{"class":111},[105,162388,162389],{"class":220},"\"当前余额:",[105,162391,1012],{"class":164},[105,162393,162394],{"class":115},"balance",[105,162396,1062],{"class":164},[105,162398,156997],{"class":220},[105,162400,122],{"class":115},[105,162402,162403],{"class":107,"line":1619},[105,162404,2391],{"emptyLinePlaceholder":32},[105,162406,162407],{"class":107,"line":1633},[105,162408,2391],{"emptyLinePlaceholder":32},[105,162410,162411,162413,162416],{"class":107,"line":1638},[105,162412,31932],{"class":111},[105,162414,162415],{"class":1954}," save_money",[105,162417,31938],{"class":115},[105,162419,162420,162422],{"class":107,"line":1644},[105,162421,161846],{"class":111},[105,162423,150084],{"class":115},[105,162425,162426,162429,162431,162433,162435,162437,162439,162442],{"class":107,"line":1665},[105,162427,162428],{"class":115},"    money ",[105,162430,161],{"class":111},[105,162432,109782],{"class":164},[105,162434,116],{"class":115},[105,162436,53806],{"class":164},[105,162438,116],{"class":115},[105,162440,162441],{"class":220},"\"请输入存款金额:\"",[105,162443,30482],{"class":115},[105,162445,162446,162448,162450,162452,162454],{"class":107,"line":1670},[105,162447,3092],{"class":111},[105,162449,150127],{"class":115},[105,162451,1579],{"class":111},[105,162453,4084],{"class":164},[105,162455,3730],{"class":115},[105,162457,162458,162460,162462,162465],{"class":107,"line":1684},[105,162459,32436],{"class":164},[105,162461,116],{"class":115},[105,162463,162464],{"class":220},"\"金额必须大于0\"",[105,162466,122],{"class":115},[105,162468,162469],{"class":107,"line":1689},[105,162470,152346],{"class":111},[105,162472,162473,162476,162478],{"class":107,"line":1718},[105,162474,162475],{"class":115},"    balance ",[105,162477,9469],{"class":111},[105,162479,150160],{"class":115},[105,162481,162482,162484,162486,162489],{"class":107,"line":1723},[105,162483,31284],{"class":164},[105,162485,116],{"class":115},[105,162487,162488],{"class":220},"\"存款成功\"",[105,162490,122],{"class":115},[105,162492,162493],{"class":107,"line":1740},[105,162494,162495],{"class":115},"    show_balance()\n",[105,162497,162498],{"class":107,"line":1745},[105,162499,2391],{"emptyLinePlaceholder":32},[105,162501,162502],{"class":107,"line":1750},[105,162503,2391],{"emptyLinePlaceholder":32},[105,162505,162506,162508,162511],{"class":107,"line":1755},[105,162507,31932],{"class":111},[105,162509,162510],{"class":1954}," withdraw_money",[105,162512,31938],{"class":115},[105,162514,162515,162517],{"class":107,"line":1769},[105,162516,161846],{"class":111},[105,162518,150084],{"class":115},[105,162520,162521,162523,162525,162527,162529,162531,162533,162536],{"class":107,"line":1774},[105,162522,162428],{"class":115},[105,162524,161],{"class":111},[105,162526,109782],{"class":164},[105,162528,116],{"class":115},[105,162530,53806],{"class":164},[105,162532,116],{"class":115},[105,162534,162535],{"class":220},"\"请输入取款金额:\"",[105,162537,30482],{"class":115},[105,162539,162540,162542,162544,162546,162548],{"class":107,"line":2568},[105,162541,3092],{"class":111},[105,162543,150127],{"class":115},[105,162545,1579],{"class":111},[105,162547,4084],{"class":164},[105,162549,3730],{"class":115},[105,162551,162552,162554,162556,162558],{"class":107,"line":2582},[105,162553,32436],{"class":164},[105,162555,116],{"class":115},[105,162557,162464],{"class":220},[105,162559,122],{"class":115},[105,162561,162562],{"class":107,"line":2590},[105,162563,152346],{"class":111},[105,162565,162566,162568,162570,162572],{"class":107,"line":2595},[105,162567,3092],{"class":111},[105,162569,150127],{"class":115},[105,162571,1076],{"class":111},[105,162573,162574],{"class":115}," balance:\n",[105,162576,162577,162579,162581,162583],{"class":107,"line":2601},[105,162578,32436],{"class":164},[105,162580,116],{"class":115},[105,162582,150222],{"class":220},[105,162584,122],{"class":115},[105,162586,162587],{"class":107,"line":2607},[105,162588,152346],{"class":111},[105,162590,162591,162593,162595],{"class":107,"line":2612},[105,162592,162475],{"class":115},[105,162594,150237],{"class":111},[105,162596,150160],{"class":115},[105,162598,162599,162601,162603,162606],{"class":107,"line":7940},[105,162600,31284],{"class":164},[105,162602,116],{"class":115},[105,162604,162605],{"class":220},"\"取款成功\"",[105,162607,122],{"class":115},[105,162609,162610],{"class":107,"line":7964},[105,162611,162495],{"class":115},[105,162613,162614],{"class":107,"line":7969},[105,162615,2391],{"emptyLinePlaceholder":32},[105,162617,162618],{"class":107,"line":7975},[105,162619,2391],{"emptyLinePlaceholder":32},[105,162621,162622,162624,162626],{"class":107,"line":8002},[105,162623,108648],{"class":111},[105,162625,95277],{"class":164},[105,162627,3730],{"class":115},[105,162629,162630],{"class":107,"line":8007},[105,162631,162632],{"class":115},"    show_menu()\n",[105,162634,162635,162637,162639,162641,162643,162645],{"class":107,"line":8013},[105,162636,160677],{"class":115},[105,162638,161],{"class":111},[105,162640,60590],{"class":164},[105,162642,116],{"class":115},[105,162644,153058],{"class":220},[105,162646,122],{"class":115},[105,162648,162649],{"class":107,"line":8025},[105,162650,2391],{"emptyLinePlaceholder":32},[105,162652,162653,162655,162657,162659,162661],{"class":107,"line":8037},[105,162654,3092],{"class":111},[105,162656,153071],{"class":115},[105,162658,2940],{"class":111},[105,162660,153076],{"class":220},[105,162662,3730],{"class":115},[105,162664,162665],{"class":107,"line":8049},[105,162666,162667],{"class":115},"        show_balance()\n",[105,162669,162670,162672,162674,162676,162678],{"class":107,"line":9708},[105,162671,39278],{"class":111},[105,162673,153071],{"class":115},[105,162675,2940],{"class":111},[105,162677,153095],{"class":220},[105,162679,3730],{"class":115},[105,162681,162682],{"class":107,"line":9733},[105,162683,162684],{"class":115},"        save_money()\n",[105,162686,162687,162689,162691,162693,162695],{"class":107,"line":9756},[105,162688,39278],{"class":111},[105,162690,153071],{"class":115},[105,162692,2940],{"class":111},[105,162694,153113],{"class":220},[105,162696,3730],{"class":115},[105,162698,162699],{"class":107,"line":9780},[105,162700,162701],{"class":115},"        withdraw_money()\n",[105,162703,162704,162706,162708,162710,162712],{"class":107,"line":9785},[105,162705,39278],{"class":111},[105,162707,153071],{"class":115},[105,162709,2940],{"class":111},[105,162711,153167],{"class":220},[105,162713,3730],{"class":115},[105,162715,162716,162718,162720,162722],{"class":107,"line":9790},[105,162717,32436],{"class":164},[105,162719,116],{"class":115},[105,162721,153178],{"class":220},[105,162723,122],{"class":115},[105,162725,162726],{"class":107,"line":9795},[105,162727,31612],{"class":111},[105,162729,162730,162732],{"class":107,"line":9804},[105,162731,158007],{"class":111},[105,162733,3730],{"class":115},[105,162735,162736,162738,162740,162742],{"class":107,"line":9809},[105,162737,32436],{"class":164},[105,162739,116],{"class":115},[105,162741,153199],{"class":220},[105,162743,122],{"class":115},[14,162745,162746],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[47,162748,162750],{"id":162749},"_514-易错点","5.14 易错点",[59,162752,162753,162756,162759,162764,162769,162772],{},[62,162754,162755],{},"函数定义后必须调用才会执行。",[62,162757,162758],{},"函数名后面有括号才是调用。",[62,162760,162761,162763],{},[102,162762,17038],{}," 后面的代码不会执行。",[62,162765,162766,162767,28370],{},"没有返回值的函数默认返回 ",[102,162768,95671],{},[62,162770,162771],{},"局部变量不能在函数外部访问。",[62,162773,162774,162775,162777],{},"不要滥用 ",[102,162776,161811],{},"，更好的方式是让函数返回新值。",[14,162779,162780,162781,162783],{},"例如不用 ",[102,162782,161811],{}," 改写存款：",[96,162785,162787],{"className":30363,"code":162786,"language":30365,"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",[102,162788,162789,162798,162809,162813,162817,162825,162838],{"__ignoreMap":22},[105,162790,162791,162793,162795],{"class":107,"line":108},[105,162792,31932],{"class":111},[105,162794,162415],{"class":1954},[105,162796,162797],{"class":115},"(balance, money):\n",[105,162799,162800,162802,162805,162807],{"class":107,"line":28},[105,162801,4081],{"class":111},[105,162803,162804],{"class":115}," balance ",[105,162806,597],{"class":111},[105,162808,150160],{"class":115},[105,162810,162811],{"class":107,"line":1171},[105,162812,2391],{"emptyLinePlaceholder":32},[105,162814,162815],{"class":107,"line":1186},[105,162816,2391],{"emptyLinePlaceholder":32},[105,162818,162819,162821,162823],{"class":107,"line":1192},[105,162820,162289],{"class":115},[105,162822,161],{"class":111},[105,162824,162294],{"class":164},[105,162826,162827,162829,162831,162834,162836],{"class":107,"line":1206},[105,162828,162289],{"class":115},[105,162830,161],{"class":111},[105,162832,162833],{"class":115}," save_money(balance, ",[105,162835,1713],{"class":164},[105,162837,122],{"class":115},[105,162839,162840,162842],{"class":107,"line":1212},[105,162841,30400],{"class":164},[105,162843,162844],{"class":115},"(balance)\n",[47,162846,162848],{"id":162847},"_515-本章练习","5.15 本章练习",[59,162850,162851,162858,162864,162870,162876],{},[62,162852,162853,162854,162857],{},"定义函数 ",[102,162855,162856],{},"print_student(name, age)","，输出学生信息。",[62,162859,162853,162860,162863],{},[102,162861,162862],{},"get_max(a, b, c)","，返回三个数中的最大值。",[62,162865,162853,162866,162869],{},[102,162867,162868],{},"is_even(num)","，判断一个数是否为偶数。",[62,162871,162853,162872,162875],{},[102,162873,162874],{},"calculate_bmi(weight, height)","，返回 BMI。",[62,162877,162878],{},"把第 4 章的菜单程序拆分成多个函数。",[5118,162880,162881],{},"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":28,"depth":28,"links":162883},[162884,162885,162886,162887,162888,162889,162890,162891,162892,162896,162897,162898,162899,162900,162901],{"id":160904,"depth":28,"text":160905},{"id":160945,"depth":28,"text":160946},{"id":161035,"depth":28,"text":161036},{"id":161116,"depth":28,"text":161117},{"id":161249,"depth":28,"text":161250},{"id":161371,"depth":28,"text":161372},{"id":161493,"depth":28,"text":161494},{"id":161570,"depth":28,"text":161571},{"id":161692,"depth":28,"text":161693,"children":162893},[162894,162895],{"id":161696,"depth":1171,"text":161697},{"id":161754,"depth":1171,"text":161755},{"id":161883,"depth":28,"text":161884},{"id":162009,"depth":28,"text":162010},{"id":162122,"depth":28,"text":162123},{"id":162278,"depth":28,"text":162279},{"id":162749,"depth":28,"text":162750},{"id":162847,"depth":28,"text":162848},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160896,"description":23369},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162908,"title":162909,"body":162910,"description":23369,"extension":30,"meta":165954,"navigation":32,"path":165955,"seo":165956,"stem":165957,"__hash__":165958},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162911,"toc":165935},[162912,162915,162919,162922,162925,163029,163032,163036,163039,163119,163122,163126,163129,163189,163192,163228,163231,163246,163250,163323,163326,163381,163384,163454,163457,163541,163551,163609,163613,163658,163661,163687,163690,163796,163800,163803,163845,163848,163912,163915,163919,163922,163983,163986,164016,164019,164057,164061,164064,164073,164076,164200,164203,164244,164248,164251,164262,164302,164305,164320,164325,164328,164395,164398,164488,164492,164495,164543,164546,164573,164575,164605,164608,164628,164631,164662,164665,164698,164702,164705,164729,164732,164756,164759,164783,164787,164790,164920,164923,165003,165006,165081,165085,165088,165138,165141,165183,165186,165210,165212,165236,165239,165294,165297,165363,165367,165370,165373,165411,165414,165467,165470,165516,165519,165552,165555,165559,165878,165882,165911,165915,165932],[10,162913,162909],{"id":162914},"_6-数据容器",[47,162916,162918],{"id":162917},"_61-什么是数据容器","6.1 什么是数据容器",[14,162920,162921],{},"数据容器用于一次保存多个数据。",[14,162923,162924],{},"常见容器：",[253,162926,162927,162944],{},[256,162928,162929],{},[259,162930,162931,162933,162936,162939,162942],{},[262,162932,25756],{},[262,162934,162935],{},"是否有序",[262,162937,162938],{},"是否可变",[262,162940,162941],{},"是否允许重复",[262,162943,27477],{},[300,162945,162946,162964,162980,162995,163012],{},[259,162947,162948,162951,162954,162957,162960],{},[305,162949,162950],{},"list列表",[305,162952,162953],{},"有序",[305,162955,162956],{},"可变",[305,162958,162959],{},"允许",[305,162961,162962],{},[102,162963,155242],{},[259,162965,162966,162969,162971,162974,162976],{},[305,162967,162968],{},"tuple元组",[305,162970,162953],{},[305,162972,162973],{},"不可变",[305,162975,162959],{},[305,162977,162978],{},[102,162979,155255],{},[259,162981,162982,162985,162987,162989,162991],{},[305,162983,162984],{},"str字符串",[305,162986,162953],{},[305,162988,162973],{},[305,162990,162959],{},[305,162992,162993],{},[102,162994,155865],{},[259,162996,162997,163000,163003,163005,163008],{},[305,162998,162999],{},"set集合",[305,163001,163002],{},"无序",[305,163004,162956],{},[305,163006,163007],{},"不允许",[305,163009,163010],{},[102,163011,155280],{},[259,163013,163014,163017,163019,163021,163024],{},[305,163015,163016],{},"dict字典",[305,163018,162953],{},[305,163020,162956],{},[305,163022,163023],{},"key不允许重复",[305,163025,163026],{},[102,163027,163028],{},"{\"name\": \"小明\"}",[14,163030,163031],{},"Python 3.7 之后，字典保持插入顺序。",[47,163033,163035],{"id":163034},"_62-列表list","6.2 列表list",[14,163037,163038],{},"列表用于保存一组有顺序的数据。",[96,163040,163042],{"className":30363,"code":163041,"language":30365,"meta":22,"style":22},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[102,163043,163044,163064,163089,163110],{"__ignoreMap":22},[105,163045,163046,163048,163050,163052,163054,163056,163058,163060,163062],{"class":107,"line":108},[105,163047,160365],{"class":115},[105,163049,161],{"class":111},[105,163051,52211],{"class":115},[105,163053,149873],{"class":220},[105,163055,12427],{"class":115},[105,163057,150921],{"class":220},[105,163059,12427],{"class":115},[105,163061,159716],{"class":220},[105,163063,33231],{"class":115},[105,163065,163066,163069,163071,163073,163075,163077,163079,163081,163083,163085,163087],{"class":107,"line":28},[105,163067,163068],{"class":115},"numbers ",[105,163070,161],{"class":111},[105,163072,52211],{"class":115},[105,163074,333],{"class":164},[105,163076,12427],{"class":115},[105,163078,193],{"class":164},[105,163080,12427],{"class":115},[105,163082,187],{"class":164},[105,163084,12427],{"class":115},[105,163086,409],{"class":164},[105,163088,33231],{"class":115},[105,163090,163091,163094,163096,163098,163100,163102,163104,163106,163108],{"class":107,"line":1171},[105,163092,163093],{"class":115},"mixed ",[105,163095,161],{"class":111},[105,163097,52211],{"class":115},[105,163099,149873],{"class":220},[105,163101,12427],{"class":115},[105,163103,766],{"class":164},[105,163105,12427],{"class":115},[105,163107,31461],{"class":164},[105,163109,33231],{"class":115},[105,163111,163112,163115,163117],{"class":107,"line":1186},[105,163113,163114],{"class":115},"empty ",[105,163116,161],{"class":111},[105,163118,51823],{"class":115},[14,163120,163121],{},"推荐一个列表中保存同类数据，代码更清晰。",[47,163123,163125],{"id":163124},"_63-列表索引","6.3 列表索引",[14,163127,163128],{},"正向索引从 0 开始：",[96,163130,163132],{"className":30363,"code":163131,"language":30365,"meta":22,"style":22},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[102,163133,163134,163154,163158,163169,163179],{"__ignoreMap":22},[105,163135,163136,163138,163140,163142,163144,163146,163148,163150,163152],{"class":107,"line":108},[105,163137,160365],{"class":115},[105,163139,161],{"class":111},[105,163141,52211],{"class":115},[105,163143,149873],{"class":220},[105,163145,12427],{"class":115},[105,163147,150921],{"class":220},[105,163149,12427],{"class":115},[105,163151,159716],{"class":220},[105,163153,33231],{"class":115},[105,163155,163156],{"class":107,"line":28},[105,163157,2391],{"emptyLinePlaceholder":32},[105,163159,163160,163162,163165,163167],{"class":107,"line":1171},[105,163161,30400],{"class":164},[105,163163,163164],{"class":115},"(names[",[105,163166,307],{"class":164},[105,163168,4648],{"class":115},[105,163170,163171,163173,163175,163177],{"class":107,"line":1186},[105,163172,30400],{"class":164},[105,163174,163164],{"class":115},[105,163176,333],{"class":164},[105,163178,4648],{"class":115},[105,163180,163181,163183,163185,163187],{"class":107,"line":1192},[105,163182,30400],{"class":164},[105,163184,163164],{"class":115},[105,163186,193],{"class":164},[105,163188,4648],{"class":115},[14,163190,163191],{},"反向索引从 -1 开始：",[96,163193,163195],{"className":30363,"code":163194,"language":30365,"meta":22,"style":22},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[102,163196,163197,163213],{"__ignoreMap":22},[105,163198,163199,163201,163203,163205,163207,163210],{"class":107,"line":108},[105,163200,30400],{"class":164},[105,163202,163164],{"class":115},[105,163204,648],{"class":111},[105,163206,333],{"class":164},[105,163208,163209],{"class":115},"])  ",[105,163211,163212],{"class":174},"# 小刚\n",[105,163214,163215,163217,163219,163221,163223,163225],{"class":107,"line":28},[105,163216,30400],{"class":164},[105,163218,163164],{"class":115},[105,163220,648],{"class":111},[105,163222,193],{"class":164},[105,163224,163209],{"class":115},[105,163226,163227],{"class":174},"# 小红\n",[14,163229,163230],{},"索引越界会报错：",[96,163232,163234],{"className":30363,"code":163233,"language":30365,"meta":22,"style":22},"print(names[3])\n",[102,163235,163236],{"__ignoreMap":22},[105,163237,163238,163240,163242,163244],{"class":107,"line":108},[105,163239,30400],{"class":164},[105,163241,163164],{"class":115},[105,163243,187],{"class":164},[105,163245,4648],{"class":115},[47,163247,163249],{"id":163248},"_64-列表常用方法","6.4 列表常用方法",[96,163251,163253],{"className":30363,"code":163252,"language":30365,"meta":22,"style":22},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[102,163254,163255,163271,163275,163284,163298,163312,163316],{"__ignoreMap":22},[105,163256,163257,163259,163261,163263,163265,163267,163269],{"class":107,"line":108},[105,163258,160365],{"class":115},[105,163260,161],{"class":111},[105,163262,52211],{"class":115},[105,163264,149873],{"class":220},[105,163266,12427],{"class":115},[105,163268,150921],{"class":220},[105,163270,33231],{"class":115},[105,163272,163273],{"class":107,"line":28},[105,163274,2391],{"emptyLinePlaceholder":32},[105,163276,163277,163280,163282],{"class":107,"line":1171},[105,163278,163279],{"class":115},"names.append(",[105,163281,159716],{"class":220},[105,163283,122],{"class":115},[105,163285,163286,163289,163291,163293,163296],{"class":107,"line":1186},[105,163287,163288],{"class":115},"names.insert(",[105,163290,333],{"class":164},[105,163292,12427],{"class":115},[105,163294,163295],{"class":220},"\"小李\"",[105,163297,122],{"class":115},[105,163299,163300,163303,163305,163307,163310],{"class":107,"line":1192},[105,163301,163302],{"class":115},"names.extend([",[105,163304,8675],{"class":220},[105,163306,12427],{"class":115},[105,163308,163309],{"class":220},"\"小赵\"",[105,163311,4648],{"class":115},[105,163313,163314],{"class":107,"line":1206},[105,163315,2391],{"emptyLinePlaceholder":32},[105,163317,163318,163320],{"class":107,"line":1212},[105,163319,30400],{"class":164},[105,163321,163322],{"class":115},"(names)\n",[14,163324,163325],{},"删除元素：",[96,163327,163329],{"className":30363,"code":163328,"language":30365,"meta":22,"style":22},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[102,163330,163331,163340,163350,163364,163376],{"__ignoreMap":22},[105,163332,163333,163336,163338],{"class":107,"line":108},[105,163334,163335],{"class":115},"names.remove(",[105,163337,150921],{"class":220},[105,163339,122],{"class":115},[105,163341,163342,163345,163347],{"class":107,"line":28},[105,163343,163344],{"class":115},"last ",[105,163346,161],{"class":111},[105,163348,163349],{"class":115}," names.pop()\n",[105,163351,163352,163355,163357,163360,163362],{"class":107,"line":1171},[105,163353,163354],{"class":115},"first ",[105,163356,161],{"class":111},[105,163358,163359],{"class":115}," names.pop(",[105,163361,307],{"class":164},[105,163363,122],{"class":115},[105,163365,163366,163369,163372,163374],{"class":107,"line":1186},[105,163367,163368],{"class":111},"del",[105,163370,163371],{"class":115}," names[",[105,163373,307],{"class":164},[105,163375,33231],{"class":115},[105,163377,163378],{"class":107,"line":1192},[105,163379,163380],{"class":115},"names.clear()\n",[14,163382,163383],{},"查询和统计：",[96,163385,163387],{"className":30363,"code":163386,"language":30365,"meta":22,"style":22},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[102,163388,163389,163417,163421,163432,163443],{"__ignoreMap":22},[105,163390,163391,163393,163395,163397,163399,163401,163403,163405,163407,163409,163411,163413,163415],{"class":107,"line":108},[105,163392,163068],{"class":115},[105,163394,161],{"class":111},[105,163396,52211],{"class":115},[105,163398,333],{"class":164},[105,163400,12427],{"class":115},[105,163402,193],{"class":164},[105,163404,12427],{"class":115},[105,163406,187],{"class":164},[105,163408,12427],{"class":115},[105,163410,193],{"class":164},[105,163412,12427],{"class":115},[105,163414,409],{"class":164},[105,163416,33231],{"class":115},[105,163418,163419],{"class":107,"line":28},[105,163420,2391],{"emptyLinePlaceholder":32},[105,163422,163423,163425,163428,163430],{"class":107,"line":1171},[105,163424,30400],{"class":164},[105,163426,163427],{"class":115},"(numbers.index(",[105,163429,187],{"class":164},[105,163431,30482],{"class":115},[105,163433,163434,163436,163439,163441],{"class":107,"line":1186},[105,163435,30400],{"class":164},[105,163437,163438],{"class":115},"(numbers.count(",[105,163440,193],{"class":164},[105,163442,30482],{"class":115},[105,163444,163445,163447,163449,163451],{"class":107,"line":1192},[105,163446,30400],{"class":164},[105,163448,116],{"class":115},[105,163450,7350],{"class":164},[105,163452,163453],{"class":115},"(numbers))\n",[14,163455,163456],{},"排序：",[96,163458,163460],{"className":30363,"code":163459,"language":30365,"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",[102,163461,163462,163486,163490,163495,163502,163506,163520,163526,163530,163535],{"__ignoreMap":22},[105,163463,163464,163466,163468,163470,163472,163474,163476,163478,163480,163482,163484],{"class":107,"line":108},[105,163465,163068],{"class":115},[105,163467,161],{"class":111},[105,163469,52211],{"class":115},[105,163471,187],{"class":164},[105,163473,12427],{"class":115},[105,163475,333],{"class":164},[105,163477,12427],{"class":115},[105,163479,435],{"class":164},[105,163481,12427],{"class":115},[105,163483,193],{"class":164},[105,163485,33231],{"class":115},[105,163487,163488],{"class":107,"line":28},[105,163489,2391],{"emptyLinePlaceholder":32},[105,163491,163492],{"class":107,"line":1171},[105,163493,163494],{"class":115},"numbers.sort()\n",[105,163496,163497,163499],{"class":107,"line":1186},[105,163498,30400],{"class":164},[105,163500,163501],{"class":115},"(numbers)\n",[105,163503,163504],{"class":107,"line":1192},[105,163505,2391],{"emptyLinePlaceholder":32},[105,163507,163508,163511,163514,163516,163518],{"class":107,"line":1206},[105,163509,163510],{"class":115},"numbers.sort(",[105,163512,163513],{"class":5208},"reverse",[105,163515,161],{"class":111},[105,163517,31461],{"class":164},[105,163519,122],{"class":115},[105,163521,163522,163524],{"class":107,"line":1212},[105,163523,30400],{"class":164},[105,163525,163501],{"class":115},[105,163527,163528],{"class":107,"line":1303},[105,163529,2391],{"emptyLinePlaceholder":32},[105,163531,163532],{"class":107,"line":1309},[105,163533,163534],{"class":115},"numbers.reverse()\n",[105,163536,163537,163539],{"class":107,"line":1321},[105,163538,30400],{"class":164},[105,163540,163501],{"class":115},[14,163542,163543,163546,163547,163550],{},[102,163544,163545],{},"sort()"," 会修改原列表，",[102,163548,163549],{},"sorted()"," 返回新列表。",[96,163552,163554],{"className":30363,"code":163553,"language":30365,"meta":22,"style":22},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[102,163555,163556,163580,163592,163596,163602],{"__ignoreMap":22},[105,163557,163558,163560,163562,163564,163566,163568,163570,163572,163574,163576,163578],{"class":107,"line":108},[105,163559,163068],{"class":115},[105,163561,161],{"class":111},[105,163563,52211],{"class":115},[105,163565,187],{"class":164},[105,163567,12427],{"class":115},[105,163569,333],{"class":164},[105,163571,12427],{"class":115},[105,163573,435],{"class":164},[105,163575,12427],{"class":115},[105,163577,193],{"class":164},[105,163579,33231],{"class":115},[105,163581,163582,163585,163587,163590],{"class":107,"line":28},[105,163583,163584],{"class":115},"new_numbers ",[105,163586,161],{"class":111},[105,163588,163589],{"class":164}," sorted",[105,163591,163501],{"class":115},[105,163593,163594],{"class":107,"line":1171},[105,163595,2391],{"emptyLinePlaceholder":32},[105,163597,163598,163600],{"class":107,"line":1186},[105,163599,30400],{"class":164},[105,163601,163501],{"class":115},[105,163603,163604,163606],{"class":107,"line":1192},[105,163605,30400],{"class":164},[105,163607,163608],{"class":115},"(new_numbers)\n",[47,163610,163612],{"id":163611},"_65-列表遍历","6.5 列表遍历",[96,163614,163616],{"className":30363,"code":163615,"language":30365,"meta":22,"style":22},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[102,163617,163618,163638,163642,163652],{"__ignoreMap":22},[105,163619,163620,163622,163624,163626,163628,163630,163632,163634,163636],{"class":107,"line":108},[105,163621,160365],{"class":115},[105,163623,161],{"class":111},[105,163625,52211],{"class":115},[105,163627,149873],{"class":220},[105,163629,12427],{"class":115},[105,163631,150921],{"class":220},[105,163633,12427],{"class":115},[105,163635,159716],{"class":220},[105,163637,33231],{"class":115},[105,163639,163640],{"class":107,"line":28},[105,163641,2391],{"emptyLinePlaceholder":32},[105,163643,163644,163646,163648,163650],{"class":107,"line":1171},[105,163645,3016],{"class":111},[105,163647,160401],{"class":115},[105,163649,26028],{"class":111},[105,163651,160406],{"class":115},[105,163653,163654,163656],{"class":107,"line":1186},[105,163655,31284],{"class":164},[105,163657,150645],{"class":115},[14,163659,163660],{},"需要索引时：",[96,163662,163664],{"className":30363,"code":163663,"language":30365,"meta":22,"style":22},"for index, name in enumerate(names):\n    print(index, name)\n",[102,163665,163666,163680],{"__ignoreMap":22},[105,163667,163668,163670,163673,163675,163677],{"class":107,"line":108},[105,163669,3016],{"class":111},[105,163671,163672],{"class":115}," index, name ",[105,163674,26028],{"class":111},[105,163676,31591],{"class":164},[105,163678,163679],{"class":115},"(names):\n",[105,163681,163682,163684],{"class":107,"line":28},[105,163683,31284],{"class":164},[105,163685,163686],{"class":115},"(index, name)\n",[14,163688,163689],{},"统计总分：",[96,163691,163693],{"className":30363,"code":163692,"language":30365,"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",[102,163694,163695,163720,163728,163732,163743,163751,163755,163772],{"__ignoreMap":22},[105,163696,163697,163700,163702,163704,163706,163708,163710,163712,163714,163716,163718],{"class":107,"line":108},[105,163698,163699],{"class":115},"scores ",[105,163701,161],{"class":111},[105,163703,52211],{"class":115},[105,163705,978],{"class":164},[105,163707,12427],{"class":115},[105,163709,852],{"class":164},[105,163711,12427],{"class":115},[105,163713,370],{"class":164},[105,163715,12427],{"class":115},[105,163717,677],{"class":164},[105,163719,33231],{"class":115},[105,163721,163722,163724,163726],{"class":107,"line":28},[105,163723,157245],{"class":115},[105,163725,161],{"class":111},[105,163727,47318],{"class":164},[105,163729,163730],{"class":107,"line":1171},[105,163731,2391],{"emptyLinePlaceholder":32},[105,163733,163734,163736,163738,163740],{"class":107,"line":1186},[105,163735,3016],{"class":111},[105,163737,157768],{"class":115},[105,163739,26028],{"class":111},[105,163741,163742],{"class":115}," scores:\n",[105,163744,163745,163747,163749],{"class":107,"line":1192},[105,163746,159292],{"class":115},[105,163748,9469],{"class":111},[105,163750,1570],{"class":115},[105,163752,163753],{"class":107,"line":1206},[105,163754,2391],{"emptyLinePlaceholder":32},[105,163756,163757,163760,163762,163765,163767,163769],{"class":107,"line":1212},[105,163758,163759],{"class":115},"avg ",[105,163761,161],{"class":111},[105,163763,163764],{"class":115}," total ",[105,163766,700],{"class":111},[105,163768,7323],{"class":164},[105,163770,163771],{"class":115},"(scores)\n",[105,163773,163774,163776,163778,163780,163783,163785,163788,163790,163792,163794],{"class":107,"line":1303},[105,163775,30400],{"class":164},[105,163777,116],{"class":115},[105,163779,168],{"class":111},[105,163781,163782],{"class":220},"\"平均分:",[105,163784,1012],{"class":164},[105,163786,163787],{"class":115},"avg",[105,163789,157144],{"class":111},[105,163791,1062],{"class":164},[105,163793,367],{"class":220},[105,163795,122],{"class":115},[47,163797,163799],{"id":163798},"_66-元组tuple","6.6 元组tuple",[14,163801,163802],{},"元组和列表类似，但不可修改。",[96,163804,163806],{"className":30363,"code":163805,"language":30365,"meta":22,"style":22},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[102,163807,163808,163825],{"__ignoreMap":22},[105,163809,163810,163813,163815,163817,163819,163821,163823],{"class":107,"line":108},[105,163811,163812],{"class":115},"point ",[105,163814,161],{"class":111},[105,163816,1649],{"class":115},[105,163818,562],{"class":164},[105,163820,12427],{"class":115},[105,163822,816],{"class":164},[105,163824,122],{"class":115},[105,163826,163827,163829,163831,163833,163835,163837,163839,163841,163843],{"class":107,"line":28},[105,163828,116299],{"class":115},[105,163830,161],{"class":111},[105,163832,1649],{"class":115},[105,163834,149873],{"class":220},[105,163836,12427],{"class":115},[105,163838,766],{"class":164},[105,163840,12427],{"class":115},[105,163842,69254],{"class":220},[105,163844,122],{"class":115},[14,163846,163847],{},"单元素元组必须加逗号：",[96,163849,163851],{"className":30363,"code":163850,"language":30365,"meta":22,"style":22},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[102,163852,163853,163867,163880,163884,163898],{"__ignoreMap":22},[105,163854,163855,163858,163860,163862,163864],{"class":107,"line":108},[105,163856,163857],{"class":115},"t1 ",[105,163859,161],{"class":111},[105,163861,1649],{"class":115},[105,163863,562],{"class":164},[105,163865,163866],{"class":115},",)\n",[105,163868,163869,163872,163874,163876,163878],{"class":107,"line":28},[105,163870,163871],{"class":115},"t2 ",[105,163873,161],{"class":111},[105,163875,1649],{"class":115},[105,163877,562],{"class":164},[105,163879,122],{"class":115},[105,163881,163882],{"class":107,"line":1171},[105,163883,2391],{"emptyLinePlaceholder":32},[105,163885,163886,163888,163890,163892,163895],{"class":107,"line":1186},[105,163887,30400],{"class":164},[105,163889,116],{"class":115},[105,163891,103092],{"class":164},[105,163893,163894],{"class":115},"(t1))  ",[105,163896,163897],{"class":174},"# tuple\n",[105,163899,163900,163902,163904,163906,163909],{"class":107,"line":1192},[105,163901,30400],{"class":164},[105,163903,116],{"class":115},[105,163905,103092],{"class":164},[105,163907,163908],{"class":115},"(t2))  ",[105,163910,163911],{"class":174},"# int\n",[14,163913,163914],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[47,163916,163918],{"id":163917},"_67-字符串str","6.7 字符串str",[14,163920,163921],{},"字符串也是序列，可以索引、切片和遍历。",[96,163923,163925],{"className":30363,"code":163924,"language":30365,"meta":22,"style":22},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[102,163926,163927,163935,163939,163950,163962,163966,163977],{"__ignoreMap":22},[105,163928,163929,163931,163933],{"class":107,"line":108},[105,163930,156429],{"class":115},[105,163932,161],{"class":111},[105,163934,159666],{"class":220},[105,163936,163937],{"class":107,"line":28},[105,163938,2391],{"emptyLinePlaceholder":32},[105,163940,163941,163943,163946,163948],{"class":107,"line":1171},[105,163942,30400],{"class":164},[105,163944,163945],{"class":115},"(text[",[105,163947,307],{"class":164},[105,163949,4648],{"class":115},[105,163951,163952,163954,163956,163958,163960],{"class":107,"line":1186},[105,163953,30400],{"class":164},[105,163955,163945],{"class":115},[105,163957,648],{"class":111},[105,163959,333],{"class":164},[105,163961,4648],{"class":115},[105,163963,163964],{"class":107,"line":1192},[105,163965,2391],{"emptyLinePlaceholder":32},[105,163967,163968,163970,163972,163974],{"class":107,"line":1206},[105,163969,3016],{"class":111},[105,163971,159677],{"class":115},[105,163973,26028],{"class":111},[105,163975,163976],{"class":115}," text:\n",[105,163978,163979,163981],{"class":107,"line":1212},[105,163980,31284],{"class":164},[105,163982,159688],{"class":115},[14,163984,163985],{},"字符串不可变：",[96,163987,163989],{"className":30363,"code":163988,"language":30365,"meta":22,"style":22},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[102,163990,163991,163999],{"__ignoreMap":22},[105,163992,163993,163995,163997],{"class":107,"line":108},[105,163994,156429],{"class":115},[105,163996,161],{"class":111},[105,163998,159666],{"class":220},[105,164000,164001,164004,164006,164008,164010,164013],{"class":107,"line":28},[105,164002,164003],{"class":115},"text[",[105,164005,307],{"class":164},[105,164007,4434],{"class":115},[105,164009,161],{"class":111},[105,164011,164012],{"class":220}," \"P\"",[105,164014,164015],{"class":174},"  # 报错\n",[14,164017,164018],{},"如果要得到新字符串：",[96,164020,164022],{"className":30363,"code":164021,"language":30365,"meta":22,"style":22},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[102,164023,164024,164032,164050],{"__ignoreMap":22},[105,164025,164026,164028,164030],{"class":107,"line":108},[105,164027,156429],{"class":115},[105,164029,161],{"class":111},[105,164031,159666],{"class":220},[105,164033,164034,164036,164038,164040,164042,164045,164047],{"class":107,"line":28},[105,164035,156429],{"class":115},[105,164037,161],{"class":111},[105,164039,164012],{"class":220},[105,164041,45551],{"class":111},[105,164043,164044],{"class":115}," text[",[105,164046,333],{"class":164},[105,164048,164049],{"class":115},":]\n",[105,164051,164052,164054],{"class":107,"line":1171},[105,164053,30400],{"class":164},[105,164055,164056],{"class":115},"(text)\n",[47,164058,164060],{"id":164059},"_68-切片","6.8 切片",[14,164062,164063],{},"切片用于从序列中取一部分。",[96,164065,164067],{"className":30363,"code":164066,"language":30365,"meta":22,"style":22},"序列[开始:结束:步长]\n",[102,164068,164069],{"__ignoreMap":22},[105,164070,164071],{"class":107,"line":108},[105,164072,164066],{"class":115},[14,164074,164075],{},"结束位置不包含。",[96,164077,164079],{"className":30363,"code":164078,"language":30365,"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",[102,164080,164081,164118,164122,164141,164156,164170,164184],{"__ignoreMap":22},[105,164082,164083,164086,164088,164090,164092,164094,164096,164098,164100,164102,164104,164106,164108,164110,164112,164114,164116],{"class":107,"line":108},[105,164084,164085],{"class":115},"nums ",[105,164087,161],{"class":111},[105,164089,52211],{"class":115},[105,164091,307],{"class":164},[105,164093,12427],{"class":115},[105,164095,333],{"class":164},[105,164097,12427],{"class":115},[105,164099,193],{"class":164},[105,164101,12427],{"class":115},[105,164103,187],{"class":164},[105,164105,12427],{"class":115},[105,164107,409],{"class":164},[105,164109,12427],{"class":115},[105,164111,435],{"class":164},[105,164113,12427],{"class":115},[105,164115,460],{"class":164},[105,164117,33231],{"class":115},[105,164119,164120],{"class":107,"line":28},[105,164121,2391],{"emptyLinePlaceholder":32},[105,164123,164124,164126,164129,164131,164133,164135,164138],{"class":107,"line":1171},[105,164125,30400],{"class":164},[105,164127,164128],{"class":115},"(nums[",[105,164130,333],{"class":164},[105,164132,975],{"class":115},[105,164134,409],{"class":164},[105,164136,164137],{"class":115},"])    ",[105,164139,164140],{"class":174},"# [1, 2, 3]\n",[105,164142,164143,164145,164148,164150,164153],{"class":107,"line":1186},[105,164144,30400],{"class":164},[105,164146,164147],{"class":115},"(nums[:",[105,164149,187],{"class":164},[105,164151,164152],{"class":115},"])     ",[105,164154,164155],{"class":174},"# [0, 1, 2]\n",[105,164157,164158,164160,164162,164164,164167],{"class":107,"line":1192},[105,164159,30400],{"class":164},[105,164161,164128],{"class":115},[105,164163,187],{"class":164},[105,164165,164166],{"class":115},":])     ",[105,164168,164169],{"class":174},"# [3, 4, 5, 6]\n",[105,164171,164172,164174,164177,164179,164181],{"class":107,"line":1206},[105,164173,30400],{"class":164},[105,164175,164176],{"class":115},"(nums[::",[105,164178,193],{"class":164},[105,164180,164137],{"class":115},[105,164182,164183],{"class":174},"# [0, 2, 4, 6]\n",[105,164185,164186,164188,164190,164192,164194,164197],{"class":107,"line":1212},[105,164187,30400],{"class":164},[105,164189,164176],{"class":115},[105,164191,648],{"class":111},[105,164193,333],{"class":164},[105,164195,164196],{"class":115},"])   ",[105,164198,164199],{"class":174},"# 反转\n",[14,164201,164202],{},"字符串切片：",[96,164204,164206],{"className":30363,"code":164205,"language":30365,"meta":22,"style":22},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[102,164207,164208,164217,164231],{"__ignoreMap":22},[105,164209,164210,164212,164214],{"class":107,"line":108},[105,164211,156429],{"class":115},[105,164213,161],{"class":111},[105,164215,164216],{"class":220}," \"abcdef\"\n",[105,164218,164219,164221,164223,164225,164227,164229],{"class":107,"line":28},[105,164220,30400],{"class":164},[105,164222,163945],{"class":115},[105,164224,333],{"class":164},[105,164226,975],{"class":115},[105,164228,409],{"class":164},[105,164230,4648],{"class":115},[105,164232,164233,164235,164238,164240,164242],{"class":107,"line":1171},[105,164234,30400],{"class":164},[105,164236,164237],{"class":115},"(text[::",[105,164239,648],{"class":111},[105,164241,333],{"class":164},[105,164243,4648],{"class":115},[47,164245,164247],{"id":164246},"_69-集合set","6.9 集合set",[14,164249,164250],{},"集合特点：",[59,164252,164253,164256,164259],{},[62,164254,164255],{},"无序。",[62,164257,164258],{},"元素不重复。",[62,164260,164261],{},"可以做交集、并集、差集。",[96,164263,164265],{"className":30363,"code":164264,"language":30365,"meta":22,"style":22},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[102,164266,164267,164295],{"__ignoreMap":22},[105,164268,164269,164271,164273,164275,164277,164279,164281,164283,164285,164287,164289,164291,164293],{"class":107,"line":108},[105,164270,164085],{"class":115},[105,164272,161],{"class":111},[105,164274,4439],{"class":115},[105,164276,333],{"class":164},[105,164278,12427],{"class":115},[105,164280,193],{"class":164},[105,164282,12427],{"class":115},[105,164284,187],{"class":164},[105,164286,12427],{"class":115},[105,164288,187],{"class":164},[105,164290,12427],{"class":115},[105,164292,409],{"class":164},[105,164294,1556],{"class":115},[105,164296,164297,164299],{"class":107,"line":28},[105,164298,30400],{"class":164},[105,164300,164301],{"class":115},"(nums)\n",[14,164303,164304],{},"创建空集合：",[96,164306,164308],{"className":30363,"code":164307,"language":30365,"meta":22,"style":22},"s = set()\n",[102,164309,164310],{"__ignoreMap":22},[105,164311,164312,164314,164316,164318],{"class":107,"line":108},[105,164313,10571],{"class":115},[105,164315,161],{"class":111},[105,164317,119707],{"class":164},[105,164319,1967],{"class":115},[14,164321,9017,164322,164324],{},[102,164323,32444],{}," 是空字典，不是空集合。",[14,164326,164327],{},"集合常用操作：",[96,164329,164331],{"className":30363,"code":164330,"language":30365,"meta":22,"style":22},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[102,164332,164333,164353,164357,164366,164375,164384],{"__ignoreMap":22},[105,164334,164335,164337,164339,164341,164343,164345,164347,164349,164351],{"class":107,"line":108},[105,164336,10571],{"class":115},[105,164338,161],{"class":111},[105,164340,4439],{"class":115},[105,164342,333],{"class":164},[105,164344,12427],{"class":115},[105,164346,193],{"class":164},[105,164348,12427],{"class":115},[105,164350,187],{"class":164},[105,164352,1556],{"class":115},[105,164354,164355],{"class":107,"line":28},[105,164356,2391],{"emptyLinePlaceholder":32},[105,164358,164359,164362,164364],{"class":107,"line":1171},[105,164360,164361],{"class":115},"s.add(",[105,164363,409],{"class":164},[105,164365,122],{"class":115},[105,164367,164368,164371,164373],{"class":107,"line":1186},[105,164369,164370],{"class":115},"s.remove(",[105,164372,193],{"class":164},[105,164374,122],{"class":115},[105,164376,164377,164380,164382],{"class":107,"line":1192},[105,164378,164379],{"class":115},"s.discard(",[105,164381,562],{"class":164},[105,164383,122],{"class":115},[105,164385,164386,164388,164390,164392],{"class":107,"line":1206},[105,164387,30400],{"class":164},[105,164389,116],{"class":115},[105,164391,7350],{"class":164},[105,164393,164394],{"class":115},"(s))\n",[14,164396,164397],{},"交并差：",[96,164399,164401],{"className":30363,"code":164400,"language":30365,"meta":22,"style":22},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[102,164402,164403,164423,164443,164447,164462,164475],{"__ignoreMap":22},[105,164404,164405,164407,164409,164411,164413,164415,164417,164419,164421],{"class":107,"line":108},[105,164406,10911],{"class":115},[105,164408,161],{"class":111},[105,164410,4439],{"class":115},[105,164412,333],{"class":164},[105,164414,12427],{"class":115},[105,164416,193],{"class":164},[105,164418,12427],{"class":115},[105,164420,187],{"class":164},[105,164422,1556],{"class":115},[105,164424,164425,164427,164429,164431,164433,164435,164437,164439,164441],{"class":107,"line":28},[105,164426,10937],{"class":115},[105,164428,161],{"class":111},[105,164430,4439],{"class":115},[105,164432,187],{"class":164},[105,164434,12427],{"class":115},[105,164436,409],{"class":164},[105,164438,12427],{"class":115},[105,164440,435],{"class":164},[105,164442,1556],{"class":115},[105,164444,164445],{"class":107,"line":1171},[105,164446,2391],{"emptyLinePlaceholder":32},[105,164448,164449,164451,164454,164456,164459],{"class":107,"line":1186},[105,164450,30400],{"class":164},[105,164452,164453],{"class":115},"(a ",[105,164455,469],{"class":111},[105,164457,164458],{"class":115}," b)  ",[105,164460,164461],{"class":174},"# 交集\n",[105,164463,164464,164466,164468,164470,164472],{"class":107,"line":1192},[105,164465,30400],{"class":164},[105,164467,164453],{"class":115},[105,164469,1037],{"class":111},[105,164471,164458],{"class":115},[105,164473,164474],{"class":174},"# 并集\n",[105,164476,164477,164479,164481,164483,164485],{"class":107,"line":1206},[105,164478,30400],{"class":164},[105,164480,164453],{"class":115},[105,164482,648],{"class":111},[105,164484,164458],{"class":115},[105,164486,164487],{"class":174},"# 差集\n",[47,164489,164491],{"id":164490},"_610-字典dict","6.10 字典dict",[14,164493,164494],{},"字典通过 key-value 保存数据。",[96,164496,164498],{"className":30363,"code":164497,"language":30365,"meta":22,"style":22},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[102,164499,164500,164508,164518,164529,164539],{"__ignoreMap":22},[105,164501,164502,164504,164506],{"class":107,"line":108},[105,164503,149466],{"class":115},[105,164505,161],{"class":111},[105,164507,15564],{"class":115},[105,164509,164510,164512,164514,164516],{"class":107,"line":28},[105,164511,147005],{"class":220},[105,164513,51422],{"class":115},[105,164515,149873],{"class":220},[105,164517,31451],{"class":115},[105,164519,164520,164523,164525,164527],{"class":107,"line":1171},[105,164521,164522],{"class":220},"    \"age\"",[105,164524,51422],{"class":115},[105,164526,766],{"class":164},[105,164528,31451],{"class":115},[105,164530,164531,164534,164536],{"class":107,"line":1186},[105,164532,164533],{"class":220},"    \"score\"",[105,164535,51422],{"class":115},[105,164537,164538],{"class":164},"95\n",[105,164540,164541],{"class":107,"line":1192},[105,164542,1556],{"class":115},[14,164544,164545],{},"获取值：",[96,164547,164549],{"className":30363,"code":164548,"language":30365,"meta":22,"style":22},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[102,164550,164551,164562],{"__ignoreMap":22},[105,164552,164553,164555,164558,164560],{"class":107,"line":108},[105,164554,30400],{"class":164},[105,164556,164557],{"class":115},"(student[",[105,164559,62664],{"class":220},[105,164561,4648],{"class":115},[105,164563,164564,164566,164569,164571],{"class":107,"line":28},[105,164565,30400],{"class":164},[105,164567,164568],{"class":115},"(student.get(",[105,164570,62664],{"class":220},[105,164572,30482],{"class":115},[14,164574,15380],{},[96,164576,164578],{"className":30363,"code":164577,"language":30365,"meta":22,"style":22},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[102,164579,164580,164593],{"__ignoreMap":22},[105,164581,164582,164584,164587,164590],{"class":107,"line":108},[105,164583,152844],{"class":115},[105,164585,164586],{"class":220},"\"address\"",[105,164588,164589],{"class":115},"]     ",[105,164591,164592],{"class":174},"# key不存在会报错\n",[105,164594,164595,164598,164600,164602],{"class":107,"line":28},[105,164596,164597],{"class":115},"student.get(",[105,164599,164586],{"class":220},[105,164601,13706],{"class":115},[105,164603,164604],{"class":174},"# key不存在返回None\n",[14,164606,164607],{},"设置默认值：",[96,164609,164611],{"className":30363,"code":164610,"language":30365,"meta":22,"style":22},"print(student.get(\"address\", \"未知\"))\n",[102,164612,164613],{"__ignoreMap":22},[105,164614,164615,164617,164619,164621,164623,164626],{"class":107,"line":108},[105,164616,30400],{"class":164},[105,164618,164568],{"class":115},[105,164620,164586],{"class":220},[105,164622,12427],{"class":115},[105,164624,164625],{"class":220},"\"未知\"",[105,164627,30482],{"class":115},[14,164629,164630],{},"新增和修改：",[96,164632,164634],{"className":30363,"code":164633,"language":30365,"meta":22,"style":22},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[102,164635,164636,164649],{"__ignoreMap":22},[105,164637,164638,164640,164642,164644,164646],{"class":107,"line":108},[105,164639,152844],{"class":115},[105,164641,69109],{"class":220},[105,164643,4434],{"class":115},[105,164645,161],{"class":111},[105,164647,164648],{"class":164}," 19\n",[105,164650,164651,164653,164655,164657,164659],{"class":107,"line":28},[105,164652,152844],{"class":115},[105,164654,164586],{"class":220},[105,164656,4434],{"class":115},[105,164658,161],{"class":111},[105,164660,164661],{"class":220}," \"北京\"\n",[14,164663,164664],{},"删除：",[96,164666,164668],{"className":30363,"code":164667,"language":30365,"meta":22,"style":22},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[102,164669,164670,164683,164693],{"__ignoreMap":22},[105,164671,164672,164674,164676,164679,164681],{"class":107,"line":108},[105,164673,155343],{"class":115},[105,164675,161],{"class":111},[105,164677,164678],{"class":115}," student.pop(",[105,164680,151457],{"class":220},[105,164682,122],{"class":115},[105,164684,164685,164687,164689,164691],{"class":107,"line":28},[105,164686,163368],{"class":111},[105,164688,152134],{"class":115},[105,164690,69109],{"class":220},[105,164692,33231],{"class":115},[105,164694,164695],{"class":107,"line":1171},[105,164696,164697],{"class":115},"student.clear()\n",[47,164699,164701],{"id":164700},"_611-字典遍历","6.11 字典遍历",[14,164703,164704],{},"遍历 key：",[96,164706,164708],{"className":30363,"code":164707,"language":30365,"meta":22,"style":22},"for key in student:\n    print(key, student[key])\n",[102,164709,164710,164722],{"__ignoreMap":22},[105,164711,164712,164714,164717,164719],{"class":107,"line":108},[105,164713,3016],{"class":111},[105,164715,164716],{"class":115}," key ",[105,164718,26028],{"class":111},[105,164720,164721],{"class":115}," student:\n",[105,164723,164724,164726],{"class":107,"line":28},[105,164725,31284],{"class":164},[105,164727,164728],{"class":115},"(key, student[key])\n",[14,164730,164731],{},"遍历 value：",[96,164733,164735],{"className":30363,"code":164734,"language":30365,"meta":22,"style":22},"for value in student.values():\n    print(value)\n",[102,164736,164737,164749],{"__ignoreMap":22},[105,164738,164739,164741,164744,164746],{"class":107,"line":108},[105,164740,3016],{"class":111},[105,164742,164743],{"class":115}," value ",[105,164745,26028],{"class":111},[105,164747,164748],{"class":115}," student.values():\n",[105,164750,164751,164753],{"class":107,"line":28},[105,164752,31284],{"class":164},[105,164754,164755],{"class":115},"(value)\n",[14,164757,164758],{},"遍历 key 和 value：",[96,164760,164762],{"className":30363,"code":164761,"language":30365,"meta":22,"style":22},"for key, value in student.items():\n    print(key, value)\n",[102,164763,164764,164776],{"__ignoreMap":22},[105,164765,164766,164768,164771,164773],{"class":107,"line":108},[105,164767,3016],{"class":111},[105,164769,164770],{"class":115}," key, value ",[105,164772,26028],{"class":111},[105,164774,164775],{"class":115}," student.items():\n",[105,164777,164778,164780],{"class":107,"line":28},[105,164779,31284],{"class":164},[105,164781,164782],{"class":115},"(key, value)\n",[47,164784,164786],{"id":164785},"_612-嵌套容器","6.12 嵌套容器",[14,164788,164789],{},"列表中保存字典，是项目中最常见的结构之一。",[96,164791,164793],{"className":30363,"code":164792,"language":30365,"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",[102,164794,164795,164803,164831,164859,164887,164891,164895,164905],{"__ignoreMap":22},[105,164796,164797,164799,164801],{"class":107,"line":108},[105,164798,159701],{"class":115},[105,164800,161],{"class":111},[105,164802,55432],{"class":115},[105,164804,164805,164807,164809,164811,164813,164815,164817,164819,164821,164823,164825,164827,164829],{"class":107,"line":28},[105,164806,148370],{"class":115},[105,164808,62664],{"class":220},[105,164810,51422],{"class":115},[105,164812,149873],{"class":220},[105,164814,12427],{"class":115},[105,164816,69109],{"class":220},[105,164818,51422],{"class":115},[105,164820,766],{"class":164},[105,164822,12427],{"class":115},[105,164824,151457],{"class":220},[105,164826,51422],{"class":115},[105,164828,1105],{"class":164},[105,164830,4921],{"class":115},[105,164832,164833,164835,164837,164839,164841,164843,164845,164847,164849,164851,164853,164855,164857],{"class":107,"line":1171},[105,164834,148370],{"class":115},[105,164836,62664],{"class":220},[105,164838,51422],{"class":115},[105,164840,150921],{"class":220},[105,164842,12427],{"class":115},[105,164844,69109],{"class":220},[105,164846,51422],{"class":115},[105,164848,741],{"class":164},[105,164850,12427],{"class":115},[105,164852,151457],{"class":220},[105,164854,51422],{"class":115},[105,164856,927],{"class":164},[105,164858,4921],{"class":115},[105,164860,164861,164863,164865,164867,164869,164871,164873,164875,164877,164879,164881,164883,164885],{"class":107,"line":1186},[105,164862,148370],{"class":115},[105,164864,62664],{"class":220},[105,164866,51422],{"class":115},[105,164868,159716],{"class":220},[105,164870,12427],{"class":115},[105,164872,69109],{"class":220},[105,164874,51422],{"class":115},[105,164876,791],{"class":164},[105,164878,12427],{"class":115},[105,164880,151457],{"class":220},[105,164882,51422],{"class":115},[105,164884,522],{"class":164},[105,164886,4921],{"class":115},[105,164888,164889],{"class":107,"line":1192},[105,164890,33231],{"class":115},[105,164892,164893],{"class":107,"line":1206},[105,164894,2391],{"emptyLinePlaceholder":32},[105,164896,164897,164899,164901,164903],{"class":107,"line":1212},[105,164898,3016],{"class":111},[105,164900,152122],{"class":115},[105,164902,26028],{"class":111},[105,164904,152127],{"class":115},[105,164906,164907,164909,164911,164913,164916,164918],{"class":107,"line":1303},[105,164908,31284],{"class":164},[105,164910,164557],{"class":115},[105,164912,62664],{"class":220},[105,164914,164915],{"class":115},"], student[",[105,164917,151457],{"class":220},[105,164919,4648],{"class":115},[14,164921,164922],{},"统计平均分：",[96,164924,164926],{"className":30363,"code":164925,"language":30365,"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",[102,164927,164928,164936,164940,164950,164962,164966,164981],{"__ignoreMap":22},[105,164929,164930,164932,164934],{"class":107,"line":108},[105,164931,157245],{"class":115},[105,164933,161],{"class":111},[105,164935,47318],{"class":164},[105,164937,164938],{"class":107,"line":28},[105,164939,2391],{"emptyLinePlaceholder":32},[105,164941,164942,164944,164946,164948],{"class":107,"line":1171},[105,164943,3016],{"class":111},[105,164945,152122],{"class":115},[105,164947,26028],{"class":111},[105,164949,152127],{"class":115},[105,164951,164952,164954,164956,164958,164960],{"class":107,"line":1186},[105,164953,159292],{"class":115},[105,164955,9469],{"class":111},[105,164957,152134],{"class":115},[105,164959,151457],{"class":220},[105,164961,33231],{"class":115},[105,164963,164964],{"class":107,"line":1192},[105,164965,2391],{"emptyLinePlaceholder":32},[105,164967,164968,164970,164972,164974,164976,164978],{"class":107,"line":1206},[105,164969,163759],{"class":115},[105,164971,161],{"class":111},[105,164973,163764],{"class":115},[105,164975,700],{"class":111},[105,164977,7323],{"class":164},[105,164979,164980],{"class":115},"(students)\n",[105,164982,164983,164985,164987,164989,164991,164993,164995,164997,164999,165001],{"class":107,"line":1212},[105,164984,30400],{"class":164},[105,164986,116],{"class":115},[105,164988,168],{"class":111},[105,164990,163782],{"class":220},[105,164992,1012],{"class":164},[105,164994,163787],{"class":115},[105,164996,157144],{"class":111},[105,164998,1062],{"class":164},[105,165000,367],{"class":220},[105,165002,122],{"class":115},[14,165004,165005],{},"查找学生：",[96,165007,165009],{"className":30363,"code":165008,"language":30365,"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",[102,165010,165011,165026,165030,165040,165054,165060,165064,165070],{"__ignoreMap":22},[105,165012,165013,165015,165017,165019,165021,165024],{"class":107,"line":108},[105,165014,111563],{"class":115},[105,165016,161],{"class":111},[105,165018,60590],{"class":164},[105,165020,116],{"class":115},[105,165022,165023],{"class":220},"\"请输入学生姓名:\"",[105,165025,122],{"class":115},[105,165027,165028],{"class":107,"line":28},[105,165029,2391],{"emptyLinePlaceholder":32},[105,165031,165032,165034,165036,165038],{"class":107,"line":1171},[105,165033,3016],{"class":111},[105,165035,152122],{"class":115},[105,165037,26028],{"class":111},[105,165039,152127],{"class":115},[105,165041,165042,165044,165046,165048,165050,165052],{"class":107,"line":1186},[105,165043,3092],{"class":111},[105,165045,152134],{"class":115},[105,165047,62664],{"class":220},[105,165049,4434],{"class":115},[105,165051,2940],{"class":111},[105,165053,160417],{"class":115},[105,165055,165056,165058],{"class":107,"line":1192},[105,165057,32436],{"class":164},[105,165059,150027],{"class":115},[105,165061,165062],{"class":107,"line":1206},[105,165063,31612],{"class":111},[105,165065,165066,165068],{"class":107,"line":1212},[105,165067,1692],{"class":111},[105,165069,3730],{"class":115},[105,165071,165072,165074,165076,165079],{"class":107,"line":1303},[105,165073,31284],{"class":164},[105,165075,116],{"class":115},[105,165077,165078],{"class":220},"\"没有找到\"",[105,165080,122],{"class":115},[47,165082,165084],{"id":165083},"_613-容器通用操作","6.13 容器通用操作",[14,165086,165087],{},"长度：",[96,165089,165091],{"className":30363,"code":165090,"language":30365,"meta":22,"style":22},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[102,165092,165093,165112,165122],{"__ignoreMap":22},[105,165094,165095,165097,165100,165102,165104,165106,165108,165110],{"class":107,"line":108},[105,165096,7350],{"class":164},[105,165098,165099],{"class":115},"([",[105,165101,333],{"class":164},[105,165103,12427],{"class":115},[105,165105,193],{"class":164},[105,165107,12427],{"class":115},[105,165109,187],{"class":164},[105,165111,4648],{"class":115},[105,165113,165114,165116,165118,165120],{"class":107,"line":28},[105,165115,7350],{"class":164},[105,165117,116],{"class":115},[105,165119,155865],{"class":220},[105,165121,122],{"class":115},[105,165123,165124,165126,165129,165131,165133,165135],{"class":107,"line":1171},[105,165125,7350],{"class":164},[105,165127,165128],{"class":115},"({",[105,165130,62664],{"class":220},[105,165132,51422],{"class":115},[105,165134,149873],{"class":220},[105,165136,165137],{"class":115},"})\n",[14,165139,165140],{},"最大最小：",[96,165142,165144],{"className":30363,"code":165143,"language":30365,"meta":22,"style":22},"max([1, 2, 3])\nmin([1, 2, 3])\n",[102,165145,165146,165164],{"__ignoreMap":22},[105,165147,165148,165150,165152,165154,165156,165158,165160,165162],{"class":107,"line":108},[105,165149,6007],{"class":164},[105,165151,165099],{"class":115},[105,165153,333],{"class":164},[105,165155,12427],{"class":115},[105,165157,193],{"class":164},[105,165159,12427],{"class":115},[105,165161,187],{"class":164},[105,165163,4648],{"class":115},[105,165165,165166,165169,165171,165173,165175,165177,165179,165181],{"class":107,"line":28},[105,165167,165168],{"class":164},"min",[105,165170,165099],{"class":115},[105,165172,333],{"class":164},[105,165174,12427],{"class":115},[105,165176,193],{"class":164},[105,165178,12427],{"class":115},[105,165180,187],{"class":164},[105,165182,4648],{"class":115},[14,165184,165185],{},"求和：",[96,165187,165189],{"className":30363,"code":165188,"language":30365,"meta":22,"style":22},"sum([1, 2, 3])\n",[102,165190,165191],{"__ignoreMap":22},[105,165192,165193,165196,165198,165200,165202,165204,165206,165208],{"class":107,"line":108},[105,165194,165195],{"class":164},"sum",[105,165197,165099],{"class":115},[105,165199,333],{"class":164},[105,165201,12427],{"class":115},[105,165203,193],{"class":164},[105,165205,12427],{"class":115},[105,165207,187],{"class":164},[105,165209,4648],{"class":115},[14,165211,163456],{},[96,165213,165215],{"className":30363,"code":165214,"language":30365,"meta":22,"style":22},"sorted([3, 1, 2])\n",[102,165216,165217],{"__ignoreMap":22},[105,165218,165219,165222,165224,165226,165228,165230,165232,165234],{"class":107,"line":108},[105,165220,165221],{"class":164},"sorted",[105,165223,165099],{"class":115},[105,165225,187],{"class":164},[105,165227,12427],{"class":115},[105,165229,333],{"class":164},[105,165231,12427],{"class":115},[105,165233,193],{"class":164},[105,165235,4648],{"class":115},[14,165237,165238],{},"类型转换：",[96,165240,165242],{"className":30363,"code":165241,"language":30365,"meta":22,"style":22},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[102,165243,165244,165254,165272],{"__ignoreMap":22},[105,165245,165246,165248,165250,165252],{"class":107,"line":108},[105,165247,154055],{"class":164},[105,165249,116],{"class":115},[105,165251,155865],{"class":220},[105,165253,122],{"class":115},[105,165255,165256,165258,165260,165262,165264,165266,165268,165270],{"class":107,"line":28},[105,165257,155250],{"class":164},[105,165259,165099],{"class":115},[105,165261,333],{"class":164},[105,165263,12427],{"class":115},[105,165265,193],{"class":164},[105,165267,12427],{"class":115},[105,165269,187],{"class":164},[105,165271,4648],{"class":115},[105,165273,165274,165276,165278,165280,165282,165284,165286,165288,165290,165292],{"class":107,"line":1171},[105,165275,155275],{"class":164},[105,165277,165099],{"class":115},[105,165279,333],{"class":164},[105,165281,12427],{"class":115},[105,165283,333],{"class":164},[105,165285,12427],{"class":115},[105,165287,193],{"class":164},[105,165289,12427],{"class":115},[105,165291,187],{"class":164},[105,165293,4648],{"class":115},[14,165295,165296],{},"成员判断：",[96,165298,165300],{"className":30363,"code":165299,"language":30365,"meta":22,"style":22},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[102,165301,165302,165319,165343],{"__ignoreMap":22},[105,165303,165304,165306,165308,165311,165314,165317],{"class":107,"line":108},[105,165305,30400],{"class":164},[105,165307,116],{"class":115},[105,165309,165310],{"class":220},"\"a\"",[105,165312,165313],{"class":111}," in",[105,165315,165316],{"class":220}," \"abc\"",[105,165318,122],{"class":115},[105,165320,165321,165323,165325,165327,165329,165331,165333,165335,165337,165339,165341],{"class":107,"line":28},[105,165322,30400],{"class":164},[105,165324,116],{"class":115},[105,165326,333],{"class":164},[105,165328,165313],{"class":111},[105,165330,52211],{"class":115},[105,165332,333],{"class":164},[105,165334,12427],{"class":115},[105,165336,193],{"class":164},[105,165338,12427],{"class":115},[105,165340,187],{"class":164},[105,165342,4648],{"class":115},[105,165344,165345,165347,165349,165351,165353,165355,165357,165359,165361],{"class":107,"line":1171},[105,165346,30400],{"class":164},[105,165348,116],{"class":115},[105,165350,62664],{"class":220},[105,165352,165313],{"class":111},[105,165354,4439],{"class":115},[105,165356,62664],{"class":220},[105,165358,51422],{"class":115},[105,165360,149873],{"class":220},[105,165362,165137],{"class":115},[47,165364,165366],{"id":165365},"_614-推导式","6.14 推导式",[14,165368,165369],{},"推导式用于快速生成容器。",[14,165371,165372],{},"列表推导式：",[96,165374,165376],{"className":30363,"code":165375,"language":30365,"meta":22,"style":22},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[102,165377,165378,165405],{"__ignoreMap":22},[105,165379,165380,165382,165384,165387,165389,165391,165393,165395,165397,165399,165401,165403],{"class":107,"line":108},[105,165381,164085],{"class":115},[105,165383,161],{"class":111},[105,165385,165386],{"class":115}," [i ",[105,165388,3016],{"class":111},[105,165390,9430],{"class":115},[105,165392,26028],{"class":111},[105,165394,32428],{"class":164},[105,165396,116],{"class":115},[105,165398,333],{"class":164},[105,165400,12427],{"class":115},[105,165402,460],{"class":164},[105,165404,97285],{"class":115},[105,165406,165407,165409],{"class":107,"line":28},[105,165408,30400],{"class":164},[105,165410,164301],{"class":115},[14,165412,165413],{},"带条件：",[96,165415,165417],{"className":30363,"code":165416,"language":30365,"meta":22,"style":22},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[102,165418,165419,165460],{"__ignoreMap":22},[105,165420,165421,165424,165426,165428,165430,165432,165434,165436,165438,165440,165442,165444,165446,165448,165450,165452,165454,165456,165458],{"class":107,"line":108},[105,165422,165423],{"class":115},"even_nums ",[105,165425,161],{"class":111},[105,165427,165386],{"class":115},[105,165429,3016],{"class":111},[105,165431,9430],{"class":115},[105,165433,26028],{"class":111},[105,165435,32428],{"class":164},[105,165437,116],{"class":115},[105,165439,333],{"class":164},[105,165441,12427],{"class":115},[105,165443,453],{"class":164},[105,165445,13706],{"class":115},[105,165447,1522],{"class":111},[105,165449,9430],{"class":115},[105,165451,444],{"class":111},[105,165453,14747],{"class":164},[105,165455,101544],{"class":111},[105,165457,4084],{"class":164},[105,165459,33231],{"class":115},[105,165461,165462,165464],{"class":107,"line":28},[105,165463,30400],{"class":164},[105,165465,165466],{"class":115},"(even_nums)\n",[14,165468,165469],{},"字典推导式：",[96,165471,165473],{"className":30363,"code":165472,"language":30365,"meta":22,"style":22},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[102,165474,165475,165509],{"__ignoreMap":22},[105,165476,165477,165480,165482,165485,165487,165489,165492,165494,165496,165498,165500,165502,165504,165506],{"class":107,"line":108},[105,165478,165479],{"class":115},"squares ",[105,165481,161],{"class":111},[105,165483,165484],{"class":115}," {i: i ",[105,165486,10653],{"class":111},[105,165488,14747],{"class":164},[105,165490,165491],{"class":111}," for",[105,165493,9430],{"class":115},[105,165495,26028],{"class":111},[105,165497,32428],{"class":164},[105,165499,116],{"class":115},[105,165501,333],{"class":164},[105,165503,12427],{"class":115},[105,165505,460],{"class":164},[105,165507,165508],{"class":115},")}\n",[105,165510,165511,165513],{"class":107,"line":28},[105,165512,30400],{"class":164},[105,165514,165515],{"class":115},"(squares)\n",[14,165517,165518],{},"集合推导式：",[96,165520,165522],{"className":30363,"code":165521,"language":30365,"meta":22,"style":22},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[102,165523,165524,165545],{"__ignoreMap":22},[105,165525,165526,165529,165531,165534,165536,165538,165540,165543],{"class":107,"line":108},[105,165527,165528],{"class":115},"chars ",[105,165530,161],{"class":111},[105,165532,165533],{"class":115}," {ch ",[105,165535,3016],{"class":111},[105,165537,159677],{"class":115},[105,165539,26028],{"class":111},[105,165541,165542],{"class":220}," \"hello\"",[105,165544,1556],{"class":115},[105,165546,165547,165549],{"class":107,"line":28},[105,165548,30400],{"class":164},[105,165550,165551],{"class":115},"(chars)\n",[14,165553,165554],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[47,165556,165558],{"id":165557},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[96,165560,165562],{"className":30363,"code":165561,"language":30365,"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",[102,165563,165564,165572,165592,165612,165632,165652,165656,165660,165668,165682,165691,165695,165705,165717,165721,165741,165750,165754,165770,165775,165779,165793,165797,165819,165855],{"__ignoreMap":22},[105,165565,165566,165568,165570],{"class":107,"line":108},[105,165567,159701],{"class":115},[105,165569,161],{"class":111},[105,165571,55432],{"class":115},[105,165573,165574,165576,165578,165580,165582,165584,165586,165588,165590],{"class":107,"line":28},[105,165575,148370],{"class":115},[105,165577,62664],{"class":220},[105,165579,51422],{"class":115},[105,165581,149873],{"class":220},[105,165583,12427],{"class":115},[105,165585,151457],{"class":220},[105,165587,51422],{"class":115},[105,165589,1105],{"class":164},[105,165591,4921],{"class":115},[105,165593,165594,165596,165598,165600,165602,165604,165606,165608,165610],{"class":107,"line":1171},[105,165595,148370],{"class":115},[105,165597,62664],{"class":220},[105,165599,51422],{"class":115},[105,165601,150921],{"class":220},[105,165603,12427],{"class":115},[105,165605,151457],{"class":220},[105,165607,51422],{"class":115},[105,165609,927],{"class":164},[105,165611,4921],{"class":115},[105,165613,165614,165616,165618,165620,165622,165624,165626,165628,165630],{"class":107,"line":1186},[105,165615,148370],{"class":115},[105,165617,62664],{"class":220},[105,165619,51422],{"class":115},[105,165621,159716],{"class":220},[105,165623,12427],{"class":115},[105,165625,151457],{"class":220},[105,165627,51422],{"class":115},[105,165629,522],{"class":164},[105,165631,4921],{"class":115},[105,165633,165634,165636,165638,165640,165642,165644,165646,165648,165650],{"class":107,"line":1192},[105,165635,148370],{"class":115},[105,165637,62664],{"class":220},[105,165639,51422],{"class":115},[105,165641,163295],{"class":220},[105,165643,12427],{"class":115},[105,165645,151457],{"class":220},[105,165647,51422],{"class":115},[105,165649,998],{"class":164},[105,165651,4921],{"class":115},[105,165653,165654],{"class":107,"line":1206},[105,165655,33231],{"class":115},[105,165657,165658],{"class":107,"line":1212},[105,165659,2391],{"emptyLinePlaceholder":32},[105,165661,165662,165664,165666],{"class":107,"line":1303},[105,165663,157245],{"class":115},[105,165665,161],{"class":111},[105,165667,47318],{"class":164},[105,165669,165670,165673,165675,165678,165680],{"class":107,"line":1309},[105,165671,165672],{"class":115},"max_student ",[105,165674,161],{"class":111},[105,165676,165677],{"class":115}," students[",[105,165679,307],{"class":164},[105,165681,33231],{"class":115},[105,165683,165684,165687,165689],{"class":107,"line":1321},[105,165685,165686],{"class":115},"passed ",[105,165688,161],{"class":111},[105,165690,51823],{"class":115},[105,165692,165693],{"class":107,"line":1603},[105,165694,2391],{"emptyLinePlaceholder":32},[105,165696,165697,165699,165701,165703],{"class":107,"line":1608},[105,165698,3016],{"class":111},[105,165700,152122],{"class":115},[105,165702,26028],{"class":111},[105,165704,152127],{"class":115},[105,165706,165707,165709,165711,165713,165715],{"class":107,"line":1614},[105,165708,159292],{"class":115},[105,165710,9469],{"class":111},[105,165712,152134],{"class":115},[105,165714,151457],{"class":220},[105,165716,33231],{"class":115},[105,165718,165719],{"class":107,"line":1619},[105,165720,2391],{"emptyLinePlaceholder":32},[105,165722,165723,165725,165727,165729,165731,165733,165736,165738],{"class":107,"line":1633},[105,165724,3092],{"class":111},[105,165726,152134],{"class":115},[105,165728,151457],{"class":220},[105,165730,4434],{"class":115},[105,165732,1076],{"class":111},[105,165734,165735],{"class":115}," max_student[",[105,165737,151457],{"class":220},[105,165739,165740],{"class":115},"]:\n",[105,165742,165743,165746,165748],{"class":107,"line":1638},[105,165744,165745],{"class":115},"        max_student ",[105,165747,161],{"class":111},[105,165749,152150],{"class":115},[105,165751,165752],{"class":107,"line":1644},[105,165753,2391],{"emptyLinePlaceholder":32},[105,165755,165756,165758,165760,165762,165764,165766,165768],{"class":107,"line":1665},[105,165757,3092],{"class":111},[105,165759,152134],{"class":115},[105,165761,151457],{"class":220},[105,165763,4434],{"class":115},[105,165765,1701],{"class":111},[105,165767,157822],{"class":164},[105,165769,3730],{"class":115},[105,165771,165772],{"class":107,"line":1670},[105,165773,165774],{"class":115},"        passed.append(student)\n",[105,165776,165777],{"class":107,"line":1684},[105,165778,2391],{"emptyLinePlaceholder":32},[105,165780,165781,165783,165785,165787,165789,165791],{"class":107,"line":1689},[105,165782,163759],{"class":115},[105,165784,161],{"class":111},[105,165786,163764],{"class":115},[105,165788,700],{"class":111},[105,165790,7323],{"class":164},[105,165792,164980],{"class":115},[105,165794,165795],{"class":107,"line":1718},[105,165796,2391],{"emptyLinePlaceholder":32},[105,165798,165799,165801,165803,165805,165807,165809,165811,165813,165815,165817],{"class":107,"line":1723},[105,165800,30400],{"class":164},[105,165802,116],{"class":115},[105,165804,168],{"class":111},[105,165806,163782],{"class":220},[105,165808,1012],{"class":164},[105,165810,163787],{"class":115},[105,165812,157144],{"class":111},[105,165814,1062],{"class":164},[105,165816,367],{"class":220},[105,165818,122],{"class":115},[105,165820,165821,165823,165825,165827,165830,165832,165835,165837,165839,165841,165843,165845,165847,165849,165851,165853],{"class":107,"line":1740},[105,165822,30400],{"class":164},[105,165824,116],{"class":115},[105,165826,168],{"class":111},[105,165828,165829],{"class":220},"\"最高分学生:",[105,165831,1012],{"class":164},[105,165833,165834],{"class":115},"max_student[",[105,165836,152867],{"class":220},[105,165838,1056],{"class":115},[105,165840,1062],{"class":164},[105,165842,4439],{"class":164},[105,165844,165834],{"class":115},[105,165846,152905],{"class":220},[105,165848,1056],{"class":115},[105,165850,1062],{"class":164},[105,165852,367],{"class":220},[105,165854,122],{"class":115},[105,165856,165857,165859,165861,165863,165866,165869,165872,165874,165876],{"class":107,"line":1745},[105,165858,30400],{"class":164},[105,165860,116],{"class":115},[105,165862,168],{"class":111},[105,165864,165865],{"class":220},"\"及格人数:",[105,165867,165868],{"class":164},"{len",[105,165870,165871],{"class":115},"(passed)",[105,165873,1062],{"class":164},[105,165875,367],{"class":220},[105,165877,122],{"class":115},[47,165879,165881],{"id":165880},"_616-易错点","6.16 易错点",[59,165883,165884,165887,165890,165893,165899,165908],{},[62,165885,165886],{},"列表可变，元组和字符串不可变。",[62,165888,165889],{},"切片结束位置不包含。",[62,165891,165892],{},"字典通过 key 取值，不是通过索引。",[62,165894,165895,165896,28370],{},"空集合要用 ",[102,165897,165898],{},"set()",[62,165900,104351,165901,165904,165905,28370],{},[102,165902,165903],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[102,165906,165907],{},"get()",[62,165909,165910],{},"嵌套容器要先看清楚每一层是什么类型。",[47,165912,165914],{"id":165913},"_617-本章练习","6.17 本章练习",[59,165916,165917,165920,165923,165926,165929],{},[62,165918,165919],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[62,165921,165922],{},"输入一句话，统计每个字符出现次数。",[62,165924,165925],{},"使用集合去除列表中的重复元素。",[62,165927,165928],{},"使用字典保存一个学生的信息，并实现修改成绩。",[62,165930,165931],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5118,165933,165934],{},"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":28,"depth":28,"links":165936},[165937,165938,165939,165940,165941,165942,165943,165944,165945,165946,165947,165948,165949,165950,165951,165952,165953],{"id":162917,"depth":28,"text":162918},{"id":163034,"depth":28,"text":163035},{"id":163124,"depth":28,"text":163125},{"id":163248,"depth":28,"text":163249},{"id":163611,"depth":28,"text":163612},{"id":163798,"depth":28,"text":163799},{"id":163917,"depth":28,"text":163918},{"id":164059,"depth":28,"text":164060},{"id":164246,"depth":28,"text":164247},{"id":164490,"depth":28,"text":164491},{"id":164700,"depth":28,"text":164701},{"id":164785,"depth":28,"text":164786},{"id":165083,"depth":28,"text":165084},{"id":165365,"depth":28,"text":165366},{"id":165557,"depth":28,"text":165558},{"id":165880,"depth":28,"text":165881},{"id":165913,"depth":28,"text":165914},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162909,"description":23369},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165960,"title":165961,"body":165962,"description":23369,"extension":30,"meta":168134,"navigation":32,"path":168135,"seo":168136,"stem":168137,"__hash__":168138},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165963,"toc":168109},[165964,165967,165971,165974,166054,166057,166078,166081,166085,166088,166150,166153,166170,166174,166177,166222,166224,166232,166236,166239,166321,166324,166327,166352,166355,166378,166382,166385,166387,166449,166452,166454,166505,166509,166513,166519,166624,166628,166634,166705,166709,166712,166780,166783,166863,166867,166873,166909,166912,166915,167025,167031,167035,167038,167110,167113,167117,167121,167126,167188,167192,167197,167265,167269,167274,167390,167394,167397,167477,167480,167484,167487,167591,167593,167608,167611,167615,167753,167761,167765,167767,167778,167780,168038,168042,168074,168078,168106],[10,165965,165961],{"id":165966},"_7-函数进阶",[47,165968,165970],{"id":165969},"_71-多返回值","7.1 多返回值",[14,165972,165973],{},"Python 函数可以返回多个值，本质上返回的是元组。",[96,165975,165977],{"className":30363,"code":165976,"language":30365,"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",[102,165978,165979,165988,165996,166004,166013,166020,166024,166028,166037,166043],{"__ignoreMap":22},[105,165980,165981,165983,165986],{"class":107,"line":108},[105,165982,31932],{"class":111},[105,165984,165985],{"class":1954}," get_info",[105,165987,31938],{"class":115},[105,165989,165990,165992,165994],{"class":107,"line":28},[105,165991,152355],{"class":115},[105,165993,161],{"class":111},[105,165995,149338],{"class":220},[105,165997,165998,166000,166002],{"class":107,"line":1171},[105,165999,152371],{"class":115},[105,166001,161],{"class":111},[105,166003,146536],{"class":164},[105,166005,166006,166008,166010],{"class":107,"line":1186},[105,166007,152386],{"class":115},[105,166009,161],{"class":111},[105,166011,166012],{"class":164}," 95\n",[105,166014,166015,166017],{"class":107,"line":1192},[105,166016,4081],{"class":111},[105,166018,166019],{"class":115}," name, age, score\n",[105,166021,166022],{"class":107,"line":1206},[105,166023,2391],{"emptyLinePlaceholder":32},[105,166025,166026],{"class":107,"line":1212},[105,166027,2391],{"emptyLinePlaceholder":32},[105,166029,166030,166032,166034],{"class":107,"line":1303},[105,166031,161291],{"class":115},[105,166033,161],{"class":111},[105,166035,166036],{"class":115}," get_info()\n",[105,166038,166039,166041],{"class":107,"line":1309},[105,166040,30400],{"class":164},[105,166042,76570],{"class":115},[105,166044,166045,166047,166049,166051],{"class":107,"line":1321},[105,166046,30400],{"class":164},[105,166048,116],{"class":115},[105,166050,103092],{"class":164},[105,166052,166053],{"class":115},"(result))\n",[14,166055,166056],{},"可以直接解包：",[96,166058,166060],{"className":30363,"code":166059,"language":30365,"meta":22,"style":22},"name, age, score = get_info()\nprint(name, age, score)\n",[102,166061,166062,166071],{"__ignoreMap":22},[105,166063,166064,166067,166069],{"class":107,"line":108},[105,166065,166066],{"class":115},"name, age, score ",[105,166068,161],{"class":111},[105,166070,166036],{"class":115},[105,166072,166073,166075],{"class":107,"line":28},[105,166074,30400],{"class":164},[105,166076,166077],{"class":115},"(name, age, score)\n",[14,166079,166080],{},"返回多个值适合函数需要同时给出多个结果时使用。",[47,166082,166084],{"id":166083},"_72-位置参数","7.2 位置参数",[14,166086,166087],{},"位置参数按顺序传递。",[96,166089,166091],{"className":30363,"code":166090,"language":30365,"meta":22,"style":22},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[102,166092,166093,166101,166129,166133,166137],{"__ignoreMap":22},[105,166094,166095,166097,166099],{"class":107,"line":108},[105,166096,31932],{"class":111},[105,166098,149357],{"class":1954},[105,166100,149360],{"class":115},[105,166102,166103,166105,166107,166109,166111,166113,166115,166117,166119,166121,166123,166125,166127],{"class":107,"line":28},[105,166104,31284],{"class":164},[105,166106,116],{"class":115},[105,166108,168],{"class":111},[105,166110,149371],{"class":220},[105,166112,1012],{"class":164},[105,166114,79795],{"class":115},[105,166116,1062],{"class":164},[105,166118,149380],{"class":220},[105,166120,1012],{"class":164},[105,166122,70206],{"class":115},[105,166124,1062],{"class":164},[105,166126,149389],{"class":220},[105,166128,122],{"class":115},[105,166130,166131],{"class":107,"line":1171},[105,166132,2391],{"emptyLinePlaceholder":32},[105,166134,166135],{"class":107,"line":1186},[105,166136,2391],{"emptyLinePlaceholder":32},[105,166138,166139,166142,166144,166146,166148],{"class":107,"line":1192},[105,166140,166141],{"class":115},"introduce(",[105,166143,149873],{"class":220},[105,166145,12427],{"class":115},[105,166147,766],{"class":164},[105,166149,122],{"class":115},[14,166151,166152],{},"顺序错了就会得到错误含义：",[96,166154,166156],{"className":30363,"code":166155,"language":30365,"meta":22,"style":22},"introduce(18, \"小明\")\n",[102,166157,166158],{"__ignoreMap":22},[105,166159,166160,166162,166164,166166,166168],{"class":107,"line":108},[105,166161,166141],{"class":115},[105,166163,766],{"class":164},[105,166165,12427],{"class":115},[105,166167,149873],{"class":220},[105,166169,122],{"class":115},[47,166171,166173],{"id":166172},"_73-关键字参数","7.3 关键字参数",[14,166175,166176],{},"关键字参数按参数名传递。",[96,166178,166180],{"className":30363,"code":166179,"language":30365,"meta":22,"style":22},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[102,166181,166182,166202],{"__ignoreMap":22},[105,166183,166184,166186,166188,166190,166192,166194,166196,166198,166200],{"class":107,"line":108},[105,166185,166141],{"class":115},[105,166187,79795],{"class":5208},[105,166189,161],{"class":111},[105,166191,149873],{"class":220},[105,166193,12427],{"class":115},[105,166195,70206],{"class":5208},[105,166197,161],{"class":111},[105,166199,766],{"class":164},[105,166201,122],{"class":115},[105,166203,166204,166206,166208,166210,166212,166214,166216,166218,166220],{"class":107,"line":28},[105,166205,166141],{"class":115},[105,166207,70206],{"class":5208},[105,166209,161],{"class":111},[105,166211,766],{"class":164},[105,166213,12427],{"class":115},[105,166215,79795],{"class":5208},[105,166217,161],{"class":111},[105,166219,149873],{"class":220},[105,166221,122],{"class":115},[14,166223,117919],{},[59,166225,166226,166229],{},[62,166227,166228],{},"顺序不容易错。",[62,166230,166231],{},"调用时可读性更强。",[47,166233,166235],{"id":166234},"_74-默认参数","7.4 默认参数",[14,166237,166238],{},"默认参数给参数设置默认值。",[96,166240,166242],{"className":30363,"code":166241,"language":30365,"meta":22,"style":22},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[102,166243,166244,166260,166290,166294,166298,166308],{"__ignoreMap":22},[105,166245,166246,166248,166250,166253,166255,166258],{"class":107,"line":108},[105,166247,31932],{"class":111},[105,166249,122078],{"class":1954},[105,166251,166252],{"class":115},"(host, port",[105,166254,161],{"class":111},[105,166256,166257],{"class":164},"3306",[105,166259,30771],{"class":115},[105,166261,166262,166264,166266,166268,166271,166273,166275,166277,166279,166281,166284,166286,166288],{"class":107,"line":28},[105,166263,31284],{"class":164},[105,166265,116],{"class":115},[105,166267,168],{"class":111},[105,166269,166270],{"class":220},"\"连接",[105,166272,1012],{"class":164},[105,166274,27380],{"class":115},[105,166276,1062],{"class":164},[105,166278,975],{"class":220},[105,166280,1012],{"class":164},[105,166282,166283],{"class":115},"port",[105,166285,1062],{"class":164},[105,166287,367],{"class":220},[105,166289,122],{"class":115},[105,166291,166292],{"class":107,"line":1171},[105,166293,2391],{"emptyLinePlaceholder":32},[105,166295,166296],{"class":107,"line":1186},[105,166297,2391],{"emptyLinePlaceholder":32},[105,166299,166300,166303,166306],{"class":107,"line":1192},[105,166301,166302],{"class":115},"connect(",[105,166304,166305],{"class":220},"\"localhost\"",[105,166307,122],{"class":115},[105,166309,166310,166312,166314,166316,166319],{"class":107,"line":1206},[105,166311,166302],{"class":115},[105,166313,166305],{"class":220},[105,166315,12427],{"class":115},[105,166317,166318],{"class":164},"6379",[105,166320,122],{"class":115},[14,166322,166323],{},"注意：默认参数必须放在非默认参数后面。",[14,166325,166326],{},"错误：",[96,166328,166330],{"className":30363,"code":166329,"language":30365,"meta":22,"style":22},"def connect(port=3306, host):\n    pass\n",[102,166331,166332,166348],{"__ignoreMap":22},[105,166333,166334,166336,166338,166341,166343,166345],{"class":107,"line":108},[105,166335,31932],{"class":111},[105,166337,122078],{"class":1954},[105,166339,166340],{"class":115},"(port",[105,166342,161],{"class":111},[105,166344,166257],{"class":164},[105,166346,166347],{"class":115},", host):\n",[105,166349,166350],{"class":107,"line":28},[105,166351,149522],{"class":111},[14,166353,166354],{},"正确：",[96,166356,166358],{"className":30363,"code":166357,"language":30365,"meta":22,"style":22},"def connect(host, port=3306):\n    pass\n",[102,166359,166360,166374],{"__ignoreMap":22},[105,166361,166362,166364,166366,166368,166370,166372],{"class":107,"line":108},[105,166363,31932],{"class":111},[105,166365,122078],{"class":1954},[105,166367,166252],{"class":115},[105,166369,161],{"class":111},[105,166371,166257],{"class":164},[105,166373,30771],{"class":115},[105,166375,166376],{"class":107,"line":28},[105,166377,149522],{"class":111},[47,166379,166381],{"id":166380},"_75-默认参数的坑","7.5 默认参数的坑",[14,166383,166384],{},"不要使用可变对象作为默认参数。",[14,166386,157608],{},[96,166388,166390],{"className":30363,"code":166389,"language":30365,"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",[102,166391,166392,166407,166412,166419,166423,166427,166438],{"__ignoreMap":22},[105,166393,166394,166396,166399,166402,166404],{"class":107,"line":108},[105,166395,31932],{"class":111},[105,166397,166398],{"class":1954}," add_item",[105,166400,166401],{"class":115},"(item, items",[105,166403,161],{"class":111},[105,166405,166406],{"class":115},"[]):\n",[105,166408,166409],{"class":107,"line":28},[105,166410,166411],{"class":115},"    items.append(item)\n",[105,166413,166414,166416],{"class":107,"line":1171},[105,166415,4081],{"class":111},[105,166417,166418],{"class":115}," items\n",[105,166420,166421],{"class":107,"line":1186},[105,166422,2391],{"emptyLinePlaceholder":32},[105,166424,166425],{"class":107,"line":1192},[105,166426,2391],{"emptyLinePlaceholder":32},[105,166428,166429,166431,166434,166436],{"class":107,"line":1206},[105,166430,30400],{"class":164},[105,166432,166433],{"class":115},"(add_item(",[105,166435,165310],{"class":220},[105,166437,30482],{"class":115},[105,166439,166440,166442,166444,166447],{"class":107,"line":1212},[105,166441,30400],{"class":164},[105,166443,166433],{"class":115},[105,166445,166446],{"class":220},"\"b\"",[105,166448,30482],{"class":115},[14,166450,166451],{},"第二次调用会复用第一次的列表。",[14,166453,155873],{},[96,166455,166457],{"className":30363,"code":166456,"language":30365,"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",[102,166458,166459,166473,166486,166495,166499],{"__ignoreMap":22},[105,166460,166461,166463,166465,166467,166469,166471],{"class":107,"line":108},[105,166462,31932],{"class":111},[105,166464,166398],{"class":1954},[105,166466,166401],{"class":115},[105,166468,161],{"class":111},[105,166470,95671],{"class":164},[105,166472,30771],{"class":115},[105,166474,166475,166477,166480,166482,166484],{"class":107,"line":28},[105,166476,3092],{"class":111},[105,166478,166479],{"class":115}," items ",[105,166481,38912],{"class":111},[105,166483,38918],{"class":164},[105,166485,3730],{"class":115},[105,166487,166488,166491,166493],{"class":107,"line":1171},[105,166489,166490],{"class":115},"        items ",[105,166492,161],{"class":111},[105,166494,51823],{"class":115},[105,166496,166497],{"class":107,"line":1186},[105,166498,166411],{"class":115},[105,166500,166501,166503],{"class":107,"line":1192},[105,166502,4081],{"class":111},[105,166504,166418],{"class":115},[47,166506,166508],{"id":166507},"_76-不定长参数","7.6 不定长参数",[76,166510,166512],{"id":166511},"_761-args","7.6.1 *args",[14,166514,166515,166518],{},[102,166516,166517],{},"*args"," 接收任意数量的位置参数，得到元组。",[96,166520,166522],{"className":30363,"code":166521,"language":30365,"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",[102,166523,166524,166537,166545,166556,166565,166571,166575,166579,166598],{"__ignoreMap":22},[105,166525,166526,166528,166530,166532,166534],{"class":107,"line":108},[105,166527,31932],{"class":111},[105,166529,5201],{"class":1954},[105,166531,116],{"class":115},[105,166533,571],{"class":111},[105,166535,166536],{"class":115},"args):\n",[105,166538,166539,166541,166543],{"class":107,"line":28},[105,166540,159292],{"class":115},[105,166542,161],{"class":111},[105,166544,47318],{"class":164},[105,166546,166547,166549,166551,166553],{"class":107,"line":1171},[105,166548,3192],{"class":111},[105,166550,156165],{"class":115},[105,166552,26028],{"class":111},[105,166554,166555],{"class":115}," args:\n",[105,166557,166558,166560,166562],{"class":107,"line":1186},[105,166559,159967],{"class":115},[105,166561,9469],{"class":111},[105,166563,166564],{"class":115}," num\n",[105,166566,166567,166569],{"class":107,"line":1192},[105,166568,4081],{"class":111},[105,166570,162272],{"class":115},[105,166572,166573],{"class":107,"line":1206},[105,166574,2391],{"emptyLinePlaceholder":32},[105,166576,166577],{"class":107,"line":1212},[105,166578,2391],{"emptyLinePlaceholder":32},[105,166580,166581,166583,166586,166588,166590,166592,166594,166596],{"class":107,"line":1303},[105,166582,30400],{"class":164},[105,166584,166585],{"class":115},"(add(",[105,166587,333],{"class":164},[105,166589,12427],{"class":115},[105,166591,193],{"class":164},[105,166593,12427],{"class":115},[105,166595,187],{"class":164},[105,166597,30482],{"class":115},[105,166599,166600,166602,166604,166606,166608,166610,166612,166614,166616,166618,166620,166622],{"class":107,"line":1309},[105,166601,30400],{"class":164},[105,166603,166585],{"class":115},[105,166605,333],{"class":164},[105,166607,12427],{"class":115},[105,166609,193],{"class":164},[105,166611,12427],{"class":115},[105,166613,187],{"class":164},[105,166615,12427],{"class":115},[105,166617,409],{"class":164},[105,166619,12427],{"class":115},[105,166621,435],{"class":164},[105,166623,30482],{"class":115},[76,166625,166627],{"id":166626},"_762-kwargs","7.6.2 **kwargs",[14,166629,166630,166633],{},[102,166631,166632],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[96,166635,166637],{"className":30363,"code":166636,"language":30365,"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",[102,166638,166639,166652,166663,166669,166673,166677],{"__ignoreMap":22},[105,166640,166641,166643,166645,166647,166649],{"class":107,"line":108},[105,166642,31932],{"class":111},[105,166644,161930],{"class":1954},[105,166646,116],{"class":115},[105,166648,10653],{"class":111},[105,166650,166651],{"class":115},"kwargs):\n",[105,166653,166654,166656,166658,166660],{"class":107,"line":28},[105,166655,3192],{"class":111},[105,166657,164770],{"class":115},[105,166659,26028],{"class":111},[105,166661,166662],{"class":115}," kwargs.items():\n",[105,166664,166665,166667],{"class":107,"line":1171},[105,166666,32436],{"class":164},[105,166668,164782],{"class":115},[105,166670,166671],{"class":107,"line":1186},[105,166672,2391],{"emptyLinePlaceholder":32},[105,166674,166675],{"class":107,"line":1192},[105,166676,2391],{"emptyLinePlaceholder":32},[105,166678,166679,166681,166683,166685,166687,166689,166691,166693,166695,166697,166699,166701,166703],{"class":107,"line":1206},[105,166680,161995],{"class":115},[105,166682,79795],{"class":5208},[105,166684,161],{"class":111},[105,166686,149873],{"class":220},[105,166688,12427],{"class":115},[105,166690,70206],{"class":5208},[105,166692,161],{"class":111},[105,166694,766],{"class":164},[105,166696,12427],{"class":115},[105,166698,70257],{"class":5208},[105,166700,161],{"class":111},[105,166702,69254],{"class":220},[105,166704,122],{"class":115},[47,166706,166708],{"id":166707},"_77-参数解包","7.7 参数解包",[14,166710,166711],{},"列表或元组解包为位置参数：",[96,166713,166715],{"className":30363,"code":166714,"language":30365,"meta":22,"style":22},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[102,166716,166717,166726,166741,166745,166749,166769],{"__ignoreMap":22},[105,166718,166719,166721,166723],{"class":107,"line":108},[105,166720,31932],{"class":111},[105,166722,5201],{"class":1954},[105,166724,166725],{"class":115},"(a, b, c):\n",[105,166727,166728,166730,166732,166734,166736,166738],{"class":107,"line":28},[105,166729,4081],{"class":111},[105,166731,10861],{"class":115},[105,166733,597],{"class":111},[105,166735,10874],{"class":115},[105,166737,597],{"class":111},[105,166739,166740],{"class":115}," c\n",[105,166742,166743],{"class":107,"line":1171},[105,166744,2391],{"emptyLinePlaceholder":32},[105,166746,166747],{"class":107,"line":1186},[105,166748,2391],{"emptyLinePlaceholder":32},[105,166750,166751,166753,166755,166757,166759,166761,166763,166765,166767],{"class":107,"line":1192},[105,166752,164085],{"class":115},[105,166754,161],{"class":111},[105,166756,52211],{"class":115},[105,166758,333],{"class":164},[105,166760,12427],{"class":115},[105,166762,193],{"class":164},[105,166764,12427],{"class":115},[105,166766,187],{"class":164},[105,166768,33231],{"class":115},[105,166770,166771,166773,166775,166777],{"class":107,"line":1206},[105,166772,30400],{"class":164},[105,166774,166585],{"class":115},[105,166776,571],{"class":111},[105,166778,166779],{"class":115},"nums))\n",[14,166781,166782],{},"字典解包为关键字参数：",[96,166784,166786],{"className":30363,"code":166785,"language":30365,"meta":22,"style":22},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[102,166787,166788,166796,166822,166826,166830,166854],{"__ignoreMap":22},[105,166789,166790,166792,166794],{"class":107,"line":108},[105,166791,31932],{"class":111},[105,166793,149357],{"class":1954},[105,166795,149360],{"class":115},[105,166797,166798,166800,166802,166804,166806,166808,166810,166812,166814,166816,166818,166820],{"class":107,"line":28},[105,166799,31284],{"class":164},[105,166801,116],{"class":115},[105,166803,168],{"class":111},[105,166805,367],{"class":220},[105,166807,1012],{"class":164},[105,166809,79795],{"class":115},[105,166811,1062],{"class":164},[105,166813,4439],{"class":164},[105,166815,70206],{"class":115},[105,166817,1062],{"class":164},[105,166819,367],{"class":220},[105,166821,122],{"class":115},[105,166823,166824],{"class":107,"line":1171},[105,166825,2391],{"emptyLinePlaceholder":32},[105,166827,166828],{"class":107,"line":1186},[105,166829,2391],{"emptyLinePlaceholder":32},[105,166831,166832,166834,166836,166838,166840,166842,166844,166846,166848,166850,166852],{"class":107,"line":1192},[105,166833,116299],{"class":115},[105,166835,161],{"class":111},[105,166837,4439],{"class":115},[105,166839,62664],{"class":220},[105,166841,51422],{"class":115},[105,166843,149873],{"class":220},[105,166845,12427],{"class":115},[105,166847,69109],{"class":220},[105,166849,51422],{"class":115},[105,166851,766],{"class":164},[105,166853,1556],{"class":115},[105,166855,166856,166858,166860],{"class":107,"line":1206},[105,166857,166141],{"class":115},[105,166859,10653],{"class":111},[105,166861,166862],{"class":115},"info)\n",[47,166864,166866],{"id":166865},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166868,166869,166872],{},[102,166870,166871],{},"lambda"," 用于定义简单匿名函数。",[96,166874,166876],{"className":30363,"code":166875,"language":30365,"meta":22,"style":22},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[102,166877,166878,166895],{"__ignoreMap":22},[105,166879,166880,166883,166885,166888,166891,166893],{"class":107,"line":108},[105,166881,166882],{"class":115},"add ",[105,166884,161],{"class":111},[105,166886,166887],{"class":111}," lambda",[105,166889,166890],{"class":115}," a, b: a ",[105,166892,597],{"class":111},[105,166894,151089],{"class":115},[105,166896,166897,166899,166901,166903,166905,166907],{"class":107,"line":28},[105,166898,30400],{"class":164},[105,166900,166585],{"class":115},[105,166902,333],{"class":164},[105,166904,12427],{"class":115},[105,166906,193],{"class":164},[105,166908,30482],{"class":115},[14,166910,166911],{},"常和排序、过滤等函数一起使用。",[14,166913,166914],{},"按分数排序：",[96,166916,166918],{"className":30363,"code":166917,"language":30365,"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",[102,166919,166920,166928,166948,166968,166988,166992,166996,167019],{"__ignoreMap":22},[105,166921,166922,166924,166926],{"class":107,"line":108},[105,166923,159701],{"class":115},[105,166925,161],{"class":111},[105,166927,55432],{"class":115},[105,166929,166930,166932,166934,166936,166938,166940,166942,166944,166946],{"class":107,"line":28},[105,166931,148370],{"class":115},[105,166933,62664],{"class":220},[105,166935,51422],{"class":115},[105,166937,149873],{"class":220},[105,166939,12427],{"class":115},[105,166941,151457],{"class":220},[105,166943,51422],{"class":115},[105,166945,1105],{"class":164},[105,166947,4921],{"class":115},[105,166949,166950,166952,166954,166956,166958,166960,166962,166964,166966],{"class":107,"line":1171},[105,166951,148370],{"class":115},[105,166953,62664],{"class":220},[105,166955,51422],{"class":115},[105,166957,150921],{"class":220},[105,166959,12427],{"class":115},[105,166961,151457],{"class":220},[105,166963,51422],{"class":115},[105,166965,927],{"class":164},[105,166967,4921],{"class":115},[105,166969,166970,166972,166974,166976,166978,166980,166982,166984,166986],{"class":107,"line":1186},[105,166971,148370],{"class":115},[105,166973,62664],{"class":220},[105,166975,51422],{"class":115},[105,166977,159716],{"class":220},[105,166979,12427],{"class":115},[105,166981,151457],{"class":220},[105,166983,51422],{"class":115},[105,166985,522],{"class":164},[105,166987,4921],{"class":115},[105,166989,166990],{"class":107,"line":1192},[105,166991,33231],{"class":115},[105,166993,166994],{"class":107,"line":1206},[105,166995,2391],{"emptyLinePlaceholder":32},[105,166997,166998,167001,167003,167005,167007,167009,167011,167013,167015,167017],{"class":107,"line":1212},[105,166999,167000],{"class":115},"students.sort(",[105,167002,153931],{"class":5208},[105,167004,153934],{"class":111},[105,167006,153937],{"class":115},[105,167008,151457],{"class":220},[105,167010,112187],{"class":115},[105,167012,163513],{"class":5208},[105,167014,161],{"class":111},[105,167016,31461],{"class":164},[105,167018,122],{"class":115},[105,167020,167021,167023],{"class":107,"line":1303},[105,167022,30400],{"class":164},[105,167024,164980],{"class":115},[14,167026,167027,167028,167030],{},"如果逻辑复杂，不要硬写 ",[102,167029,166871],{},"，定义普通函数更清晰。",[47,167032,167034],{"id":167033},"_79-函数作为参数","7.9 函数作为参数",[14,167036,167037],{},"函数可以作为参数传给另一个函数。",[96,167039,167041],{"className":30363,"code":167040,"language":30365,"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",[102,167042,167043,167051,167061,167065,167069,167079,167086,167090,167094],{"__ignoreMap":22},[105,167044,167045,167047,167049],{"class":107,"line":108},[105,167046,31932],{"class":111},[105,167048,5201],{"class":1954},[105,167050,151078],{"class":115},[105,167052,167053,167055,167057,167059],{"class":107,"line":28},[105,167054,4081],{"class":111},[105,167056,10861],{"class":115},[105,167058,597],{"class":111},[105,167060,151089],{"class":115},[105,167062,167063],{"class":107,"line":1171},[105,167064,2391],{"emptyLinePlaceholder":32},[105,167066,167067],{"class":107,"line":1186},[105,167068,2391],{"emptyLinePlaceholder":32},[105,167070,167071,167073,167076],{"class":107,"line":1192},[105,167072,31932],{"class":111},[105,167074,167075],{"class":1954}," calculate",[105,167077,167078],{"class":115},"(a, b, func):\n",[105,167080,167081,167083],{"class":107,"line":1206},[105,167082,4081],{"class":111},[105,167084,167085],{"class":115}," func(a, b)\n",[105,167087,167088],{"class":107,"line":1212},[105,167089,2391],{"emptyLinePlaceholder":32},[105,167091,167092],{"class":107,"line":1303},[105,167093,2391],{"emptyLinePlaceholder":32},[105,167095,167096,167098,167101,167103,167105,167107],{"class":107,"line":1309},[105,167097,30400],{"class":164},[105,167099,167100],{"class":115},"(calculate(",[105,167102,562],{"class":164},[105,167104,12427],{"class":115},[105,167106,816],{"class":164},[105,167108,167109],{"class":115},", add))\n",[14,167111,167112],{},"这种思想在排序、回调、框架中经常出现。",[47,167114,167116],{"id":167115},"_710-mapfiltersorted","7.10 map、filter、sorted",[76,167118,167120],{"id":167119},"_7101-map","7.10.1 map",[14,167122,167123,167125],{},[102,167124,74029],{}," 对每个元素执行函数。",[96,167127,167129],{"className":30363,"code":167128,"language":30365,"meta":22,"style":22},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[102,167130,167131,167155,167178],{"__ignoreMap":22},[105,167132,167133,167135,167137,167139,167141,167143,167145,167147,167149,167151,167153],{"class":107,"line":108},[105,167134,164085],{"class":115},[105,167136,161],{"class":111},[105,167138,52211],{"class":115},[105,167140,333],{"class":164},[105,167142,12427],{"class":115},[105,167144,193],{"class":164},[105,167146,12427],{"class":115},[105,167148,187],{"class":164},[105,167150,12427],{"class":115},[105,167152,409],{"class":164},[105,167154,33231],{"class":115},[105,167156,167157,167159,167161,167164,167166,167168,167171,167173,167175],{"class":107,"line":28},[105,167158,161291],{"class":115},[105,167160,161],{"class":111},[105,167162,167163],{"class":164}," map",[105,167165,116],{"class":115},[105,167167,166871],{"class":111},[105,167169,167170],{"class":115}," x: x ",[105,167172,571],{"class":111},[105,167174,14747],{"class":164},[105,167176,167177],{"class":115},", nums)\n",[105,167179,167180,167182,167184,167186],{"class":107,"line":1171},[105,167181,30400],{"class":164},[105,167183,116],{"class":115},[105,167185,154055],{"class":164},[105,167187,166053],{"class":115},[76,167189,167191],{"id":167190},"_7102-filter","7.10.2 filter",[14,167193,167194,167196],{},[102,167195,80036],{}," 保留满足条件的元素。",[96,167198,167200],{"className":30363,"code":167199,"language":30365,"meta":22,"style":22},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[102,167201,167202,167230,167255],{"__ignoreMap":22},[105,167203,167204,167206,167208,167210,167212,167214,167216,167218,167220,167222,167224,167226,167228],{"class":107,"line":108},[105,167205,164085],{"class":115},[105,167207,161],{"class":111},[105,167209,52211],{"class":115},[105,167211,333],{"class":164},[105,167213,12427],{"class":115},[105,167215,193],{"class":164},[105,167217,12427],{"class":115},[105,167219,187],{"class":164},[105,167221,12427],{"class":115},[105,167223,409],{"class":164},[105,167225,12427],{"class":115},[105,167227,435],{"class":164},[105,167229,33231],{"class":115},[105,167231,167232,167234,167236,167239,167241,167243,167245,167247,167249,167251,167253],{"class":107,"line":28},[105,167233,161291],{"class":115},[105,167235,161],{"class":111},[105,167237,167238],{"class":164}," filter",[105,167240,116],{"class":115},[105,167242,166871],{"class":111},[105,167244,167170],{"class":115},[105,167246,444],{"class":111},[105,167248,14747],{"class":164},[105,167250,101544],{"class":111},[105,167252,4084],{"class":164},[105,167254,167177],{"class":115},[105,167256,167257,167259,167261,167263],{"class":107,"line":1171},[105,167258,30400],{"class":164},[105,167260,116],{"class":115},[105,167262,154055],{"class":164},[105,167264,166053],{"class":115},[76,167266,167268],{"id":167267},"_7103-sorted","7.10.3 sorted",[14,167270,167271,167273],{},[102,167272,165221],{}," 返回排序后的新列表。",[96,167275,167277],{"className":30363,"code":167276,"language":30365,"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",[102,167278,167279,167287,167307,167327,167347,167351,167355,167384],{"__ignoreMap":22},[105,167280,167281,167283,167285],{"class":107,"line":108},[105,167282,159701],{"class":115},[105,167284,161],{"class":111},[105,167286,55432],{"class":115},[105,167288,167289,167291,167293,167295,167297,167299,167301,167303,167305],{"class":107,"line":28},[105,167290,148370],{"class":115},[105,167292,62664],{"class":220},[105,167294,51422],{"class":115},[105,167296,149873],{"class":220},[105,167298,12427],{"class":115},[105,167300,151457],{"class":220},[105,167302,51422],{"class":115},[105,167304,1105],{"class":164},[105,167306,4921],{"class":115},[105,167308,167309,167311,167313,167315,167317,167319,167321,167323,167325],{"class":107,"line":1171},[105,167310,148370],{"class":115},[105,167312,62664],{"class":220},[105,167314,51422],{"class":115},[105,167316,150921],{"class":220},[105,167318,12427],{"class":115},[105,167320,151457],{"class":220},[105,167322,51422],{"class":115},[105,167324,927],{"class":164},[105,167326,4921],{"class":115},[105,167328,167329,167331,167333,167335,167337,167339,167341,167343,167345],{"class":107,"line":1186},[105,167330,148370],{"class":115},[105,167332,62664],{"class":220},[105,167334,51422],{"class":115},[105,167336,159716],{"class":220},[105,167338,12427],{"class":115},[105,167340,151457],{"class":220},[105,167342,51422],{"class":115},[105,167344,522],{"class":164},[105,167346,4921],{"class":115},[105,167348,167349],{"class":107,"line":1192},[105,167350,33231],{"class":115},[105,167352,167353],{"class":107,"line":1206},[105,167354,2391],{"emptyLinePlaceholder":32},[105,167356,167357,167359,167361,167363,167366,167368,167370,167372,167374,167376,167378,167380,167382],{"class":107,"line":1212},[105,167358,161291],{"class":115},[105,167360,161],{"class":111},[105,167362,163589],{"class":164},[105,167364,167365],{"class":115},"(students, ",[105,167367,153931],{"class":5208},[105,167369,153934],{"class":111},[105,167371,153937],{"class":115},[105,167373,151457],{"class":220},[105,167375,112187],{"class":115},[105,167377,163513],{"class":5208},[105,167379,161],{"class":111},[105,167381,31461],{"class":164},[105,167383,122],{"class":115},[105,167385,167386,167388],{"class":107,"line":1303},[105,167387,30400],{"class":164},[105,167389,76570],{"class":115},[47,167391,167393],{"id":167392},"_711-闭包入门","7.11 闭包入门",[14,167395,167396],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[96,167398,167400],{"className":30363,"code":167399,"language":30365,"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",[102,167401,167402,167412,167422,167433,167437,167444,167448,167452,167466],{"__ignoreMap":22},[105,167403,167404,167406,167409],{"class":107,"line":108},[105,167405,31932],{"class":111},[105,167407,167408],{"class":1954}," outer",[105,167410,167411],{"class":115},"(base):\n",[105,167413,167414,167416,167419],{"class":107,"line":28},[105,167415,30786],{"class":111},[105,167417,167418],{"class":1954}," inner",[105,167420,167421],{"class":115},"(num):\n",[105,167423,167424,167426,167429,167431],{"class":107,"line":1171},[105,167425,14744],{"class":111},[105,167427,167428],{"class":115}," base ",[105,167430,597],{"class":111},[105,167432,166564],{"class":115},[105,167434,167435],{"class":107,"line":1186},[105,167436,2391],{"emptyLinePlaceholder":32},[105,167438,167439,167441],{"class":107,"line":1192},[105,167440,4081],{"class":111},[105,167442,167443],{"class":115}," inner\n",[105,167445,167446],{"class":107,"line":1206},[105,167447,2391],{"emptyLinePlaceholder":32},[105,167449,167450],{"class":107,"line":1212},[105,167451,2391],{"emptyLinePlaceholder":32},[105,167453,167454,167457,167459,167462,167464],{"class":107,"line":1303},[105,167455,167456],{"class":115},"add_10 ",[105,167458,161],{"class":111},[105,167460,167461],{"class":115}," outer(",[105,167463,562],{"class":164},[105,167465,122],{"class":115},[105,167467,167468,167470,167473,167475],{"class":107,"line":1309},[105,167469,30400],{"class":164},[105,167471,167472],{"class":115},"(add_10(",[105,167474,435],{"class":164},[105,167476,30482],{"class":115},[14,167478,167479],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[47,167481,167483],{"id":167482},"_712-装饰器入门","7.12 装饰器入门",[14,167485,167486],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[96,167488,167490],{"className":30363,"code":167489,"language":30365,"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",[102,167491,167492,167501,167510,167521,167526,167537,167541,167548,167552,167556,167561,167569,167579,167583,167587],{"__ignoreMap":22},[105,167493,167494,167496,167498],{"class":107,"line":108},[105,167495,31932],{"class":111},[105,167497,87176],{"class":1954},[105,167499,167500],{"class":115},"(func):\n",[105,167502,167503,167505,167508],{"class":107,"line":28},[105,167504,30786],{"class":111},[105,167506,167507],{"class":1954}," wrapper",[105,167509,31938],{"class":115},[105,167511,167512,167514,167516,167519],{"class":107,"line":1171},[105,167513,32436],{"class":164},[105,167515,116],{"class":115},[105,167517,167518],{"class":220},"\"函数开始执行\"",[105,167520,122],{"class":115},[105,167522,167523],{"class":107,"line":1186},[105,167524,167525],{"class":115},"        func()\n",[105,167527,167528,167530,167532,167535],{"class":107,"line":1192},[105,167529,32436],{"class":164},[105,167531,116],{"class":115},[105,167533,167534],{"class":220},"\"函数执行结束\"",[105,167536,122],{"class":115},[105,167538,167539],{"class":107,"line":1206},[105,167540,2391],{"emptyLinePlaceholder":32},[105,167542,167543,167545],{"class":107,"line":1212},[105,167544,4081],{"class":111},[105,167546,167547],{"class":115}," wrapper\n",[105,167549,167550],{"class":107,"line":1303},[105,167551,2391],{"emptyLinePlaceholder":32},[105,167553,167554],{"class":107,"line":1309},[105,167555,2391],{"emptyLinePlaceholder":32},[105,167557,167558],{"class":107,"line":1321},[105,167559,167560],{"class":1954},"@log\n",[105,167562,167563,167565,167567],{"class":107,"line":1603},[105,167564,31932],{"class":111},[105,167566,160981],{"class":1954},[105,167568,31938],{"class":115},[105,167570,167571,167573,167575,167577],{"class":107,"line":1608},[105,167572,31284],{"class":164},[105,167574,116],{"class":115},[105,167576,5836],{"class":220},[105,167578,122],{"class":115},[105,167580,167581],{"class":107,"line":1614},[105,167582,2391],{"emptyLinePlaceholder":32},[105,167584,167585],{"class":107,"line":1619},[105,167586,2391],{"emptyLinePlaceholder":32},[105,167588,167589],{"class":107,"line":1633},[105,167590,161016],{"class":115},[14,167592,158259],{},[96,167594,167596],{"className":30363,"code":167595,"language":30365,"meta":22,"style":22},"say_hello = log(say_hello)\n",[102,167597,167598],{"__ignoreMap":22},[105,167599,167600,167603,167605],{"class":107,"line":108},[105,167601,167602],{"class":115},"say_hello ",[105,167604,161],{"class":111},[105,167606,167607],{"class":115}," log(say_hello)\n",[14,167609,167610],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[47,167612,167614],{"id":167613},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[96,167616,167618],{"className":30363,"code":167617,"language":30365,"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",[102,167619,167620,167628,167645,167655,167674,167684,167691,167695,167701,167705,167709,167713,167721,167731,167735,167739],{"__ignoreMap":22},[105,167621,167622,167624,167626],{"class":107,"line":108},[105,167623,31932],{"class":111},[105,167625,87176],{"class":1954},[105,167627,167500],{"class":115},[105,167629,167630,167632,167634,167636,167638,167641,167643],{"class":107,"line":28},[105,167631,30786],{"class":111},[105,167633,167507],{"class":1954},[105,167635,116],{"class":115},[105,167637,571],{"class":111},[105,167639,167640],{"class":115},"args, ",[105,167642,10653],{"class":111},[105,167644,166651],{"class":115},[105,167646,167647,167649,167651,167653],{"class":107,"line":1171},[105,167648,32436],{"class":164},[105,167650,116],{"class":115},[105,167652,167518],{"class":220},[105,167654,122],{"class":115},[105,167656,167657,167660,167662,167665,167667,167669,167671],{"class":107,"line":1186},[105,167658,167659],{"class":115},"        result ",[105,167661,161],{"class":111},[105,167663,167664],{"class":115}," func(",[105,167666,571],{"class":111},[105,167668,167640],{"class":115},[105,167670,10653],{"class":111},[105,167672,167673],{"class":115},"kwargs)\n",[105,167675,167676,167678,167680,167682],{"class":107,"line":1192},[105,167677,32436],{"class":164},[105,167679,116],{"class":115},[105,167681,167534],{"class":220},[105,167683,122],{"class":115},[105,167685,167686,167688],{"class":107,"line":1206},[105,167687,14744],{"class":111},[105,167689,167690],{"class":115}," result\n",[105,167692,167693],{"class":107,"line":1212},[105,167694,2391],{"emptyLinePlaceholder":32},[105,167696,167697,167699],{"class":107,"line":1303},[105,167698,4081],{"class":111},[105,167700,167547],{"class":115},[105,167702,167703],{"class":107,"line":1309},[105,167704,2391],{"emptyLinePlaceholder":32},[105,167706,167707],{"class":107,"line":1321},[105,167708,2391],{"emptyLinePlaceholder":32},[105,167710,167711],{"class":107,"line":1603},[105,167712,167560],{"class":1954},[105,167714,167715,167717,167719],{"class":107,"line":1608},[105,167716,31932],{"class":111},[105,167718,5201],{"class":1954},[105,167720,151078],{"class":115},[105,167722,167723,167725,167727,167729],{"class":107,"line":1614},[105,167724,4081],{"class":111},[105,167726,10861],{"class":115},[105,167728,597],{"class":111},[105,167730,151089],{"class":115},[105,167732,167733],{"class":107,"line":1619},[105,167734,2391],{"emptyLinePlaceholder":32},[105,167736,167737],{"class":107,"line":1633},[105,167738,2391],{"emptyLinePlaceholder":32},[105,167740,167741,167743,167745,167747,167749,167751],{"class":107,"line":1638},[105,167742,30400],{"class":164},[105,167744,166585],{"class":115},[105,167746,562],{"class":164},[105,167748,12427],{"class":115},[105,167750,816],{"class":164},[105,167752,30482],{"class":115},[14,167754,167755,167756,101003,167758,167760],{},"这个写法使用 ",[102,167757,166517],{},[102,167759,166632],{}," 接收原函数的所有参数。",[47,167762,167764],{"id":167763},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167766,123277],{},[59,167768,167769,167772,167775],{},[62,167770,167771],{},"给定一组学生数据。",[62,167773,167774],{},"封装函数，根据传入规则筛选学生。",[62,167776,167777],{},"筛选及格、优秀、未成年学生。",[14,167779,10027],{},[96,167781,167783],{"className":30363,"code":167782,"language":30365,"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",[102,167784,167785,167793,167821,167849,167877,167881,167885,167889,167899,167907,167917,167924,167929,167935,167939,167943,167967,167990,168013,168017,168024,168031],{"__ignoreMap":22},[105,167786,167787,167789,167791],{"class":107,"line":108},[105,167788,159701],{"class":115},[105,167790,161],{"class":111},[105,167792,55432],{"class":115},[105,167794,167795,167797,167799,167801,167803,167805,167807,167809,167811,167813,167815,167817,167819],{"class":107,"line":28},[105,167796,148370],{"class":115},[105,167798,62664],{"class":220},[105,167800,51422],{"class":115},[105,167802,149873],{"class":220},[105,167804,12427],{"class":115},[105,167806,69109],{"class":220},[105,167808,51422],{"class":115},[105,167810,766],{"class":164},[105,167812,12427],{"class":115},[105,167814,151457],{"class":220},[105,167816,51422],{"class":115},[105,167818,1105],{"class":164},[105,167820,4921],{"class":115},[105,167822,167823,167825,167827,167829,167831,167833,167835,167837,167839,167841,167843,167845,167847],{"class":107,"line":1171},[105,167824,148370],{"class":115},[105,167826,62664],{"class":220},[105,167828,51422],{"class":115},[105,167830,150921],{"class":220},[105,167832,12427],{"class":115},[105,167834,69109],{"class":220},[105,167836,51422],{"class":115},[105,167838,741],{"class":164},[105,167840,12427],{"class":115},[105,167842,151457],{"class":220},[105,167844,51422],{"class":115},[105,167846,927],{"class":164},[105,167848,4921],{"class":115},[105,167850,167851,167853,167855,167857,167859,167861,167863,167865,167867,167869,167871,167873,167875],{"class":107,"line":1186},[105,167852,148370],{"class":115},[105,167854,62664],{"class":220},[105,167856,51422],{"class":115},[105,167858,159716],{"class":220},[105,167860,12427],{"class":115},[105,167862,69109],{"class":220},[105,167864,51422],{"class":115},[105,167866,791],{"class":164},[105,167868,12427],{"class":115},[105,167870,151457],{"class":220},[105,167872,51422],{"class":115},[105,167874,998],{"class":164},[105,167876,4921],{"class":115},[105,167878,167879],{"class":107,"line":1192},[105,167880,33231],{"class":115},[105,167882,167883],{"class":107,"line":1206},[105,167884,2391],{"emptyLinePlaceholder":32},[105,167886,167887],{"class":107,"line":1212},[105,167888,2391],{"emptyLinePlaceholder":32},[105,167890,167891,167893,167896],{"class":107,"line":1303},[105,167892,31932],{"class":111},[105,167894,167895],{"class":1954}," filter_students",[105,167897,167898],{"class":115},"(students, condition):\n",[105,167900,167901,167903,167905],{"class":107,"line":1309},[105,167902,161208],{"class":115},[105,167904,161],{"class":111},[105,167906,51823],{"class":115},[105,167908,167909,167911,167913,167915],{"class":107,"line":1321},[105,167910,3192],{"class":111},[105,167912,152122],{"class":115},[105,167914,26028],{"class":111},[105,167916,152127],{"class":115},[105,167918,167919,167921],{"class":107,"line":1603},[105,167920,2488],{"class":111},[105,167922,167923],{"class":115}," condition(student):\n",[105,167925,167926],{"class":107,"line":1608},[105,167927,167928],{"class":115},"            result.append(student)\n",[105,167930,167931,167933],{"class":107,"line":1614},[105,167932,4081],{"class":111},[105,167934,167690],{"class":115},[105,167936,167937],{"class":107,"line":1619},[105,167938,2391],{"emptyLinePlaceholder":32},[105,167940,167941],{"class":107,"line":1633},[105,167942,2391],{"emptyLinePlaceholder":32},[105,167944,167945,167947,167949,167952,167954,167957,167959,167961,167963,167965],{"class":107,"line":1638},[105,167946,165686],{"class":115},[105,167948,161],{"class":111},[105,167950,167951],{"class":115}," filter_students(students, ",[105,167953,166871],{"class":111},[105,167955,167956],{"class":115}," s: s[",[105,167958,151457],{"class":220},[105,167960,4434],{"class":115},[105,167962,1701],{"class":111},[105,167964,157822],{"class":164},[105,167966,122],{"class":115},[105,167968,167969,167972,167974,167976,167978,167980,167982,167984,167986,167988],{"class":107,"line":1644},[105,167970,167971],{"class":115},"excellent ",[105,167973,161],{"class":111},[105,167975,167951],{"class":115},[105,167977,166871],{"class":111},[105,167979,167956],{"class":115},[105,167981,151457],{"class":220},[105,167983,4434],{"class":115},[105,167985,1701],{"class":111},[105,167987,157773],{"class":164},[105,167989,122],{"class":115},[105,167991,167992,167995,167997,167999,168001,168003,168005,168007,168009,168011],{"class":107,"line":1665},[105,167993,167994],{"class":115},"under_age ",[105,167996,161],{"class":111},[105,167998,167951],{"class":115},[105,168000,166871],{"class":111},[105,168002,167956],{"class":115},[105,168004,69109],{"class":220},[105,168006,4434],{"class":115},[105,168008,1026],{"class":111},[105,168010,156270],{"class":164},[105,168012,122],{"class":115},[105,168014,168015],{"class":107,"line":1670},[105,168016,2391],{"emptyLinePlaceholder":32},[105,168018,168019,168021],{"class":107,"line":1684},[105,168020,30400],{"class":164},[105,168022,168023],{"class":115},"(passed)\n",[105,168025,168026,168028],{"class":107,"line":1689},[105,168027,30400],{"class":164},[105,168029,168030],{"class":115},"(excellent)\n",[105,168032,168033,168035],{"class":107,"line":1718},[105,168034,30400],{"class":164},[105,168036,168037],{"class":115},"(under_age)\n",[47,168039,168041],{"id":168040},"_715-易错点","7.15 易错点",[59,168043,168044,168047,168055,168060,168071],{},[62,168045,168046],{},"默认参数不要写可变对象。",[62,168048,168049,168051,168052,168054],{},[102,168050,166517],{}," 是元组，",[102,168053,166632],{}," 是字典。",[62,168056,168057,168059],{},[102,168058,166871],{}," 只适合简单表达式。",[62,168061,168062,101003,168064,168066,168067,168070],{},[102,168063,74029],{},[102,168065,80036],{}," 的结果是迭代器，常用 ",[102,168068,168069],{},"list()"," 转换查看。",[62,168072,168073],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[47,168075,168077],{"id":168076},"_716-本章练习","7.16 本章练习",[59,168079,168080,168087,168093,168098,168103],{},[62,168081,168082,168083,168086],{},"写函数 ",[102,168084,168085],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[62,168088,168082,168089,168092],{},[102,168090,168091],{},"print_user(**kwargs)","，输出用户所有字段。",[62,168094,104351,168095,168097],{},[102,168096,166871],{}," 对学生列表按年龄排序。",[62,168099,104351,168100,168102],{},[102,168101,80036],{}," 找出成绩不及格的学生。",[62,168104,168105],{},"写一个装饰器，统计函数执行前后的提示信息。",[5118,168107,168108],{},"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":28,"depth":28,"links":168110},[168111,168112,168113,168114,168115,168116,168120,168121,168122,168123,168128,168129,168130,168131,168132,168133],{"id":165969,"depth":28,"text":165970},{"id":166083,"depth":28,"text":166084},{"id":166172,"depth":28,"text":166173},{"id":166234,"depth":28,"text":166235},{"id":166380,"depth":28,"text":166381},{"id":166507,"depth":28,"text":166508,"children":168117},[168118,168119],{"id":166511,"depth":1171,"text":166512},{"id":166626,"depth":1171,"text":166627},{"id":166707,"depth":28,"text":166708},{"id":166865,"depth":28,"text":166866},{"id":167033,"depth":28,"text":167034},{"id":167115,"depth":28,"text":167116,"children":168124},[168125,168126,168127],{"id":167119,"depth":1171,"text":167120},{"id":167190,"depth":1171,"text":167191},{"id":167267,"depth":1171,"text":167268},{"id":167392,"depth":28,"text":167393},{"id":167482,"depth":28,"text":167483},{"id":167613,"depth":28,"text":167614},{"id":167763,"depth":28,"text":167764},{"id":168040,"depth":28,"text":168041},{"id":168076,"depth":28,"text":168077},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165961,"description":23369},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168140,"title":168141,"body":168142,"description":23369,"extension":30,"meta":170661,"navigation":32,"path":170662,"seo":170663,"stem":170664,"__hash__":170665},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168143,"toc":170636},[168144,168147,168151,168154,168157,168188,168192,168196,168199,168226,168230,168233,168284,168287,168302,168305,168340,168344,168346,168370,168373,168433,168437,168441,168444,168501,168504,168524,168528,168531,168594,168598,168601,168657,168664,168688,168692,168695,168758,168762,168767,168818,168821,168825,168830,168897,168900,168982,168986,168991,169042,169045,169049,169052,169055,169063,169066,169112,169115,169161,169165,169171,169215,169218,169264,169267,169307,169310,169371,169375,169378,169468,169471,169613,169616,169683,169687,169690,169693,169834,169837,169915,169918,170094,170098,170100,170111,170113,170312,170316,170560,170564,170598,170602,170633],[10,168145,168141],{"id":168146},"_8-文件操作",[47,168148,168150],{"id":168149},"_81-文件操作的意义","8.1 文件操作的意义",[14,168152,168153],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168155,168156],{},"常见文件类型：",[59,168158,168159,168165,168171,168177,168183],{},[62,168160,168161,168164],{},[102,168162,168163],{},".txt","：普通文本。",[62,168166,168167,168170],{},[102,168168,168169],{},".csv","：表格文本。",[62,168172,168173,168176],{},[102,168174,168175],{},".json","：结构化数据。",[62,168178,168179,168182],{},[102,168180,168181],{},".log","：日志文件。",[62,168184,168185,168187],{},[102,168186,146337],{},"：Python 源代码。",[47,168189,168191],{"id":168190},"_82-路径","8.2 路径",[76,168193,168195],{"id":168194},"_821-相对路径","8.2.1 相对路径",[14,168197,168198],{},"相对当前运行目录：",[96,168200,168202],{"className":30363,"code":168201,"language":30365,"meta":22,"style":22},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[102,168203,168204],{"__ignoreMap":22},[105,168205,168206,168208,168210,168212,168214,168216,168218,168220,168222,168224],{"class":107,"line":108},[105,168207,86900],{"class":164},[105,168209,116],{"class":115},[105,168211,146781],{"class":220},[105,168213,12427],{"class":115},[105,168215,146786],{"class":220},[105,168217,12427],{"class":115},[105,168219,146791],{"class":5208},[105,168221,161],{"class":111},[105,168223,146796],{"class":220},[105,168225,122],{"class":115},[76,168227,168229],{"id":168228},"_822-绝对路径","8.2.2 绝对路径",[14,168231,168232],{},"从根目录或盘符开始：",[96,168234,168236],{"className":30363,"code":168235,"language":30365,"meta":22,"style":22},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[102,168237,168238,168261],{"__ignoreMap":22},[105,168239,168240,168242,168244,168247,168249,168251,168253,168255,168257,168259],{"class":107,"line":108},[105,168241,86900],{"class":164},[105,168243,116],{"class":115},[105,168245,168246],{"class":220},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[105,168248,12427],{"class":115},[105,168250,146786],{"class":220},[105,168252,12427],{"class":115},[105,168254,146791],{"class":5208},[105,168256,161],{"class":111},[105,168258,146796],{"class":220},[105,168260,122],{"class":115},[105,168262,168263,168265,168267,168270,168272,168274,168276,168278,168280,168282],{"class":107,"line":28},[105,168264,86900],{"class":164},[105,168266,116],{"class":115},[105,168268,168269],{"class":220},"\"D:\u002Fdata\u002Fdata.txt\"",[105,168271,12427],{"class":115},[105,168273,146786],{"class":220},[105,168275,12427],{"class":115},[105,168277,146791],{"class":5208},[105,168279,161],{"class":111},[105,168281,146796],{"class":220},[105,168283,122],{"class":115},[14,168285,168286],{},"Windows 路径建议写成：",[96,168288,168290],{"className":30363,"code":168289,"language":30365,"meta":22,"style":22},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[102,168291,168292],{"__ignoreMap":22},[105,168293,168294,168297,168299],{"class":107,"line":108},[105,168295,168296],{"class":115},"path ",[105,168298,161],{"class":111},[105,168300,168301],{"class":220}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168303,168304],{},"或原始字符串：",[96,168306,168308],{"className":30363,"code":168307,"language":30365,"meta":22,"style":22},"path = r\"D:\\data\\data.txt\"\n",[102,168309,168310],{"__ignoreMap":22},[105,168311,168312,168314,168316,168318,168320,168323,168326,168329,168331,168333,168335,168338],{"class":107,"line":108},[105,168313,168296],{"class":115},[105,168315,161],{"class":111},[105,168317,17113],{"class":111},[105,168319,367],{"class":220},[105,168321,168322],{"class":47962},"D:",[105,168324,168325],{"class":164},"\\d",[105,168327,168328],{"class":47962},"ata",[105,168330,168325],{"class":164},[105,168332,168328],{"class":47962},[105,168334,674],{"class":164},[105,168336,168337],{"class":47962},"txt",[105,168339,25118],{"class":220},[47,168341,168343],{"id":168342},"_83-open函数","8.3 open函数",[14,168345,5173],{},[96,168347,168349],{"className":30363,"code":168348,"language":30365,"meta":22,"style":22},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[102,168350,168351],{"__ignoreMap":22},[105,168352,168353,168355,168357,168359,168362,168364,168366,168368],{"class":107,"line":108},[105,168354,45339],{"class":5208},[105,168356,13556],{"class":111},[105,168358,146776],{"class":164},[105,168360,168361],{"class":115},"(文件路径, 打开模式, ",[105,168363,146791],{"class":5208},[105,168365,161],{"class":111},[105,168367,146796],{"class":220},[105,168369,122],{"class":115},[14,168371,168372],{},"常见模式：",[253,168374,168375,168384],{},[256,168376,168377],{},[259,168378,168379,168382],{},[262,168380,168381],{},"模式",[262,168383,25854],{},[300,168385,168386,168395,168404,168413,168423],{},[259,168387,168388,168392],{},[305,168389,168390],{},[102,168391,786],{},[305,168393,168394],{},"只读，文件不存在会报错",[259,168396,168397,168401],{},[305,168398,168399],{},[102,168400,911],{},[305,168402,168403],{},"只写，文件不存在会创建，存在会清空",[259,168405,168406,168410],{},[305,168407,168408],{},[102,168409,354],{},[305,168411,168412],{},"追加，文件不存在会创建",[259,168414,168415,168420],{},[305,168416,168417],{},[102,168418,168419],{},"rb",[305,168421,168422],{},"二进制只读",[259,168424,168425,168430],{},[305,168426,168427],{},[102,168428,168429],{},"wb",[305,168431,168432],{},"二进制只写",[47,168434,168436],{"id":168435},"_84-读取文件","8.4 读取文件",[76,168438,168440],{"id":168439},"_841-read","8.4.1 read",[14,168442,168443],{},"一次读取全部内容：",[96,168445,168447],{"className":30363,"code":168446,"language":30365,"meta":22,"style":22},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[102,168448,168449,168475,168487,168494],{"__ignoreMap":22},[105,168450,168451,168453,168455,168457,168459,168461,168463,168465,168467,168469,168471,168473],{"class":107,"line":108},[105,168452,45339],{"class":5208},[105,168454,13556],{"class":111},[105,168456,146776],{"class":164},[105,168458,116],{"class":115},[105,168460,146781],{"class":220},[105,168462,12427],{"class":115},[105,168464,146786],{"class":220},[105,168466,12427],{"class":115},[105,168468,146791],{"class":5208},[105,168470,161],{"class":111},[105,168472,146796],{"class":220},[105,168474,122],{"class":115},[105,168476,168477,168480,168482,168484],{"class":107,"line":28},[105,168478,168479],{"class":115},"content ",[105,168481,161],{"class":111},[105,168483,148138],{"class":5208},[105,168485,168486],{"class":115},".read()\n",[105,168488,168489,168491],{"class":107,"line":1171},[105,168490,30400],{"class":164},[105,168492,168493],{"class":115},"(content)\n",[105,168495,168496,168498],{"class":107,"line":1186},[105,168497,45339],{"class":5208},[105,168499,168500],{"class":115},".close()\n",[14,168502,168503],{},"可以指定读取字符数：",[96,168505,168507],{"className":30363,"code":168506,"language":30365,"meta":22,"style":22},"content = file.read(10)\n",[102,168508,168509],{"__ignoreMap":22},[105,168510,168511,168513,168515,168517,168520,168522],{"class":107,"line":108},[105,168512,168479],{"class":115},[105,168514,161],{"class":111},[105,168516,148138],{"class":5208},[105,168518,168519],{"class":115},".read(",[105,168521,562],{"class":164},[105,168523,122],{"class":115},[76,168525,168527],{"id":168526},"_842-readline","8.4.2 readline",[14,168529,168530],{},"一次读取一行：",[96,168532,168534],{"className":30363,"code":168533,"language":30365,"meta":22,"style":22},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[102,168535,168536,168562,168566,168577,168584,168588],{"__ignoreMap":22},[105,168537,168538,168540,168542,168544,168546,168548,168550,168552,168554,168556,168558,168560],{"class":107,"line":108},[105,168539,45339],{"class":5208},[105,168541,13556],{"class":111},[105,168543,146776],{"class":164},[105,168545,116],{"class":115},[105,168547,146781],{"class":220},[105,168549,12427],{"class":115},[105,168551,146786],{"class":220},[105,168553,12427],{"class":115},[105,168555,146791],{"class":5208},[105,168557,161],{"class":111},[105,168559,146796],{"class":220},[105,168561,122],{"class":115},[105,168563,168564],{"class":107,"line":28},[105,168565,2391],{"emptyLinePlaceholder":32},[105,168567,168568,168570,168572,168574],{"class":107,"line":1171},[105,168569,147237],{"class":115},[105,168571,161],{"class":111},[105,168573,148138],{"class":5208},[105,168575,168576],{"class":115},".readline()\n",[105,168578,168579,168581],{"class":107,"line":1186},[105,168580,30400],{"class":164},[105,168582,168583],{"class":115},"(line)\n",[105,168585,168586],{"class":107,"line":1192},[105,168587,2391],{"emptyLinePlaceholder":32},[105,168589,168590,168592],{"class":107,"line":1206},[105,168591,45339],{"class":5208},[105,168593,168500],{"class":115},[76,168595,168597],{"id":168596},"_843-readlines","8.4.3 readlines",[14,168599,168600],{},"读取所有行，返回列表：",[96,168602,168604],{"className":30363,"code":168603,"language":30365,"meta":22,"style":22},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[102,168605,168606,168632,168644,168651],{"__ignoreMap":22},[105,168607,168608,168610,168612,168614,168616,168618,168620,168622,168624,168626,168628,168630],{"class":107,"line":108},[105,168609,45339],{"class":5208},[105,168611,13556],{"class":111},[105,168613,146776],{"class":164},[105,168615,116],{"class":115},[105,168617,146781],{"class":220},[105,168619,12427],{"class":115},[105,168621,146786],{"class":220},[105,168623,12427],{"class":115},[105,168625,146791],{"class":5208},[105,168627,161],{"class":111},[105,168629,146796],{"class":220},[105,168631,122],{"class":115},[105,168633,168634,168637,168639,168641],{"class":107,"line":28},[105,168635,168636],{"class":115},"lines ",[105,168638,161],{"class":111},[105,168640,148138],{"class":5208},[105,168642,168643],{"class":115},".readlines()\n",[105,168645,168646,168648],{"class":107,"line":1171},[105,168647,30400],{"class":164},[105,168649,168650],{"class":115},"(lines)\n",[105,168652,168653,168655],{"class":107,"line":1186},[105,168654,45339],{"class":5208},[105,168656,168500],{"class":115},[14,168658,168659,168660,168663],{},"每一行通常带有换行符，可以用 ",[102,168661,168662],{},"strip()"," 去掉：",[96,168665,168667],{"className":30363,"code":168666,"language":30365,"meta":22,"style":22},"for line in lines:\n    print(line.strip())\n",[102,168668,168669,168681],{"__ignoreMap":22},[105,168670,168671,168673,168676,168678],{"class":107,"line":108},[105,168672,3016],{"class":111},[105,168674,168675],{"class":115}," line ",[105,168677,26028],{"class":111},[105,168679,168680],{"class":115}," lines:\n",[105,168682,168683,168685],{"class":107,"line":28},[105,168684,31284],{"class":164},[105,168686,168687],{"class":115},"(line.strip())\n",[76,168689,168691],{"id":168690},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168693,168694],{},"推荐读取大文件时使用：",[96,168696,168698],{"className":30363,"code":168697,"language":30365,"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",[102,168699,168700,168726,168730,168742,168748,168752],{"__ignoreMap":22},[105,168701,168702,168704,168706,168708,168710,168712,168714,168716,168718,168720,168722,168724],{"class":107,"line":108},[105,168703,45339],{"class":5208},[105,168705,13556],{"class":111},[105,168707,146776],{"class":164},[105,168709,116],{"class":115},[105,168711,146781],{"class":220},[105,168713,12427],{"class":115},[105,168715,146786],{"class":220},[105,168717,12427],{"class":115},[105,168719,146791],{"class":5208},[105,168721,161],{"class":111},[105,168723,146796],{"class":220},[105,168725,122],{"class":115},[105,168727,168728],{"class":107,"line":28},[105,168729,2391],{"emptyLinePlaceholder":32},[105,168731,168732,168734,168736,168738,168740],{"class":107,"line":1171},[105,168733,3016],{"class":111},[105,168735,168675],{"class":115},[105,168737,26028],{"class":111},[105,168739,148138],{"class":5208},[105,168741,3730],{"class":115},[105,168743,168744,168746],{"class":107,"line":1186},[105,168745,31284],{"class":164},[105,168747,168687],{"class":115},[105,168749,168750],{"class":107,"line":1192},[105,168751,2391],{"emptyLinePlaceholder":32},[105,168753,168754,168756],{"class":107,"line":1206},[105,168755,45339],{"class":5208},[105,168757,168500],{"class":115},[47,168759,168761],{"id":168760},"_85-with语句","8.5 with语句",[14,168763,168764,168766],{},[102,168765,107818],{}," 会自动关闭文件，推荐使用。",[96,168768,168770],{"className":30363,"code":168769,"language":30365,"meta":22,"style":22},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[102,168771,168772,168802,168812],{"__ignoreMap":22},[105,168773,168774,168776,168778,168780,168782,168784,168786,168788,168790,168792,168794,168796,168798,168800],{"class":107,"line":108},[105,168775,107818],{"class":111},[105,168777,146776],{"class":164},[105,168779,116],{"class":115},[105,168781,146781],{"class":220},[105,168783,12427],{"class":115},[105,168785,146786],{"class":220},[105,168787,12427],{"class":115},[105,168789,146791],{"class":5208},[105,168791,161],{"class":111},[105,168793,146796],{"class":220},[105,168795,13706],{"class":115},[105,168797,31368],{"class":111},[105,168799,148138],{"class":5208},[105,168801,3730],{"class":115},[105,168803,168804,168806,168808,168810],{"class":107,"line":28},[105,168805,146808],{"class":115},[105,168807,161],{"class":111},[105,168809,148138],{"class":5208},[105,168811,168486],{"class":115},[105,168813,168814,168816],{"class":107,"line":1171},[105,168815,31284],{"class":164},[105,168817,168493],{"class":115},[14,168819,168820],{},"等价于打开文件、读取、最后关闭，但更安全。",[47,168822,168824],{"id":168823},"_86-写入文件","8.6 写入文件",[14,168826,168827,168829],{},[102,168828,911],{}," 模式会清空原文件。",[96,168831,168833],{"className":30363,"code":168832,"language":30365,"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",[102,168834,168835,168865,168882],{"__ignoreMap":22},[105,168836,168837,168839,168841,168843,168845,168847,168849,168851,168853,168855,168857,168859,168861,168863],{"class":107,"line":108},[105,168838,107818],{"class":111},[105,168840,146776],{"class":164},[105,168842,116],{"class":115},[105,168844,146781],{"class":220},[105,168846,12427],{"class":115},[105,168848,151961],{"class":220},[105,168850,12427],{"class":115},[105,168852,146791],{"class":5208},[105,168854,161],{"class":111},[105,168856,146796],{"class":220},[105,168858,13706],{"class":115},[105,168860,31368],{"class":111},[105,168862,148138],{"class":5208},[105,168864,3730],{"class":115},[105,168866,168867,168870,168873,168876,168878,168880],{"class":107,"line":28},[105,168868,168869],{"class":5208},"    file",[105,168871,168872],{"class":115},".write(",[105,168874,168875],{"class":220},"\"hello",[105,168877,156510],{"class":164},[105,168879,367],{"class":220},[105,168881,122],{"class":115},[105,168883,168884,168886,168888,168891,168893,168895],{"class":107,"line":1171},[105,168885,168869],{"class":5208},[105,168887,168872],{"class":115},[105,168889,168890],{"class":220},"\"python",[105,168892,156510],{"class":164},[105,168894,367],{"class":220},[105,168896,122],{"class":115},[14,168898,168899],{},"写入多行：",[96,168901,168903],{"className":30363,"code":168902,"language":30365,"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",[102,168904,168905,168940,168944,168975],{"__ignoreMap":22},[105,168906,168907,168909,168911,168913,168916,168918,168920,168922,168925,168927,168929,168931,168934,168936,168938],{"class":107,"line":108},[105,168908,168636],{"class":115},[105,168910,161],{"class":111},[105,168912,52211],{"class":115},[105,168914,168915],{"class":220},"\"小明,18",[105,168917,156510],{"class":164},[105,168919,367],{"class":220},[105,168921,12427],{"class":115},[105,168923,168924],{"class":220},"\"小红,17",[105,168926,156510],{"class":164},[105,168928,367],{"class":220},[105,168930,12427],{"class":115},[105,168932,168933],{"class":220},"\"小刚,19",[105,168935,156510],{"class":164},[105,168937,367],{"class":220},[105,168939,33231],{"class":115},[105,168941,168942],{"class":107,"line":28},[105,168943,2391],{"emptyLinePlaceholder":32},[105,168945,168946,168948,168950,168952,168955,168957,168959,168961,168963,168965,168967,168969,168971,168973],{"class":107,"line":1171},[105,168947,107818],{"class":111},[105,168949,146776],{"class":164},[105,168951,116],{"class":115},[105,168953,168954],{"class":220},"\"students.txt\"",[105,168956,12427],{"class":115},[105,168958,151961],{"class":220},[105,168960,12427],{"class":115},[105,168962,146791],{"class":5208},[105,168964,161],{"class":111},[105,168966,146796],{"class":220},[105,168968,13706],{"class":115},[105,168970,31368],{"class":111},[105,168972,148138],{"class":5208},[105,168974,3730],{"class":115},[105,168976,168977,168979],{"class":107,"line":1186},[105,168978,168869],{"class":5208},[105,168980,168981],{"class":115},".writelines(lines)\n",[47,168983,168985],{"id":168984},"_87-追加文件","8.7 追加文件",[14,168987,168988,168990],{},[102,168989,354],{}," 模式不会清空原内容，而是在末尾追加。",[96,168992,168994],{"className":30363,"code":168993,"language":30365,"meta":22,"style":22},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[102,168995,168996,169027],{"__ignoreMap":22},[105,168997,168998,169000,169002,169004,169007,169009,169011,169013,169015,169017,169019,169021,169023,169025],{"class":107,"line":108},[105,168999,107818],{"class":111},[105,169001,146776],{"class":164},[105,169003,116],{"class":115},[105,169005,169006],{"class":220},"\"log.txt\"",[105,169008,12427],{"class":115},[105,169010,165310],{"class":220},[105,169012,12427],{"class":115},[105,169014,146791],{"class":5208},[105,169016,161],{"class":111},[105,169018,146796],{"class":220},[105,169020,13706],{"class":115},[105,169022,31368],{"class":111},[105,169024,148138],{"class":5208},[105,169026,3730],{"class":115},[105,169028,169029,169031,169033,169036,169038,169040],{"class":107,"line":28},[105,169030,168869],{"class":5208},[105,169032,168872],{"class":115},[105,169034,169035],{"class":220},"\"程序启动",[105,169037,156510],{"class":164},[105,169039,367],{"class":220},[105,169041,122],{"class":115},[14,169043,169044],{},"日志类文件常用追加模式。",[47,169046,169048],{"id":169047},"_88-文件编码","8.8 文件编码",[14,169050,169051],{},"编码决定文字如何保存为字节。",[14,169053,169054],{},"常见编码：",[59,169056,169057,169060],{},[62,169058,169059],{},"UTF-8：推荐。",[62,169061,169062],{},"GBK：部分 Windows 中文文件常见。",[14,169064,169065],{},"读取文件乱码时，可以尝试：",[96,169067,169069],{"className":30363,"code":169068,"language":30365,"meta":22,"style":22},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[102,169070,169071,169102],{"__ignoreMap":22},[105,169072,169073,169075,169077,169079,169081,169083,169085,169087,169089,169091,169094,169096,169098,169100],{"class":107,"line":108},[105,169074,107818],{"class":111},[105,169076,146776],{"class":164},[105,169078,116],{"class":115},[105,169080,146781],{"class":220},[105,169082,12427],{"class":115},[105,169084,146786],{"class":220},[105,169086,12427],{"class":115},[105,169088,146791],{"class":5208},[105,169090,161],{"class":111},[105,169092,169093],{"class":220},"\"gbk\"",[105,169095,13706],{"class":115},[105,169097,31368],{"class":111},[105,169099,148138],{"class":5208},[105,169101,3730],{"class":115},[105,169103,169104,169106,169108,169110],{"class":107,"line":28},[105,169105,146808],{"class":115},[105,169107,161],{"class":111},[105,169109,148138],{"class":5208},[105,169111,168486],{"class":115},[14,169113,169114],{},"写文件时建议统一 UTF-8：",[96,169116,169118],{"className":30363,"code":169117,"language":30365,"meta":22,"style":22},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[102,169119,169120,169150],{"__ignoreMap":22},[105,169121,169122,169124,169126,169128,169130,169132,169134,169136,169138,169140,169142,169144,169146,169148],{"class":107,"line":108},[105,169123,107818],{"class":111},[105,169125,146776],{"class":164},[105,169127,116],{"class":115},[105,169129,146781],{"class":220},[105,169131,12427],{"class":115},[105,169133,151961],{"class":220},[105,169135,12427],{"class":115},[105,169137,146791],{"class":5208},[105,169139,161],{"class":111},[105,169141,146796],{"class":220},[105,169143,13706],{"class":115},[105,169145,31368],{"class":111},[105,169147,148138],{"class":5208},[105,169149,3730],{"class":115},[105,169151,169152,169154,169156,169159],{"class":107,"line":28},[105,169153,168869],{"class":5208},[105,169155,168872],{"class":115},[105,169157,169158],{"class":220},"\"中文内容\"",[105,169160,122],{"class":115},[47,169162,169164],{"id":169163},"_89-pathlib","8.9 pathlib",[14,169166,169167,169170],{},[102,169168,169169],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[96,169172,169174],{"className":30363,"code":169173,"language":30365,"meta":22,"style":22},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[102,169175,169176,169186,169190,169208],{"__ignoreMap":22},[105,169177,169178,169180,169182,169184],{"class":107,"line":108},[105,169179,30722],{"class":111},[105,169181,108296],{"class":115},[105,169183,30377],{"class":111},[105,169185,108301],{"class":115},[105,169187,169188],{"class":107,"line":28},[105,169189,2391],{"emptyLinePlaceholder":32},[105,169191,169192,169194,169196,169198,169201,169203,169205],{"class":107,"line":1171},[105,169193,168296],{"class":115},[105,169195,161],{"class":111},[105,169197,108530],{"class":115},[105,169199,169200],{"class":220},"\"data\"",[105,169202,13706],{"class":115},[105,169204,700],{"class":111},[105,169206,169207],{"class":220}," \"students.txt\"\n",[105,169209,169210,169212],{"class":107,"line":1186},[105,169211,30400],{"class":164},[105,169213,169214],{"class":115},"(path)\n",[14,169216,169217],{},"创建目录：",[96,169219,169221],{"className":30363,"code":169220,"language":30365,"meta":22,"style":22},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[102,169222,169223,169233,169237,169250],{"__ignoreMap":22},[105,169224,169225,169227,169229,169231],{"class":107,"line":108},[105,169226,30722],{"class":111},[105,169228,108296],{"class":115},[105,169230,30377],{"class":111},[105,169232,108301],{"class":115},[105,169234,169235],{"class":107,"line":28},[105,169236,2391],{"emptyLinePlaceholder":32},[105,169238,169239,169242,169244,169246,169248],{"class":107,"line":1171},[105,169240,169241],{"class":115},"data_dir ",[105,169243,161],{"class":111},[105,169245,108530],{"class":115},[105,169247,169200],{"class":220},[105,169249,122],{"class":115},[105,169251,169252,169255,169258,169260,169262],{"class":107,"line":1186},[105,169253,169254],{"class":115},"data_dir.mkdir(",[105,169256,169257],{"class":5208},"exist_ok",[105,169259,161],{"class":111},[105,169261,31461],{"class":164},[105,169263,122],{"class":115},[14,169265,169266],{},"判断文件是否存在：",[96,169268,169270],{"className":30363,"code":169269,"language":30365,"meta":22,"style":22},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[102,169271,169272,169285,169289,169296],{"__ignoreMap":22},[105,169273,169274,169276,169278,169280,169283],{"class":107,"line":108},[105,169275,168296],{"class":115},[105,169277,161],{"class":111},[105,169279,108530],{"class":115},[105,169281,169282],{"class":220},"\"data\u002Fstudents.txt\"",[105,169284,122],{"class":115},[105,169286,169287],{"class":107,"line":28},[105,169288,2391],{"emptyLinePlaceholder":32},[105,169290,169291,169293],{"class":107,"line":1171},[105,169292,1522],{"class":111},[105,169294,169295],{"class":115}," path.exists():\n",[105,169297,169298,169300,169302,169305],{"class":107,"line":1186},[105,169299,31284],{"class":164},[105,169301,116],{"class":115},[105,169303,169304],{"class":220},"\"文件存在\"",[105,169306,122],{"class":115},[14,169308,169309],{},"读写文本：",[96,169311,169313],{"className":30363,"code":169312,"language":30365,"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",[102,169314,169315,169327,169331,169348,169365],{"__ignoreMap":22},[105,169316,169317,169319,169321,169323,169325],{"class":107,"line":108},[105,169318,168296],{"class":115},[105,169320,161],{"class":111},[105,169322,108530],{"class":115},[105,169324,146781],{"class":220},[105,169326,122],{"class":115},[105,169328,169329],{"class":107,"line":28},[105,169330,2391],{"emptyLinePlaceholder":32},[105,169332,169333,169336,169338,169340,169342,169344,169346],{"class":107,"line":1171},[105,169334,169335],{"class":115},"path.write_text(",[105,169337,145861],{"class":220},[105,169339,12427],{"class":115},[105,169341,146791],{"class":5208},[105,169343,161],{"class":111},[105,169345,146796],{"class":220},[105,169347,122],{"class":115},[105,169349,169350,169352,169354,169357,169359,169361,169363],{"class":107,"line":1186},[105,169351,168479],{"class":115},[105,169353,161],{"class":111},[105,169355,169356],{"class":115}," path.read_text(",[105,169358,146791],{"class":5208},[105,169360,161],{"class":111},[105,169362,146796],{"class":220},[105,169364,122],{"class":115},[105,169366,169367,169369],{"class":107,"line":1192},[105,169368,30400],{"class":164},[105,169370,168493],{"class":115},[47,169372,169374],{"id":169373},"_810-json文件","8.10 JSON文件",[14,169376,169377],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[96,169379,169381],{"className":30363,"code":169380,"language":30365,"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",[102,169382,169383,169389,169393,169401,169411,169421,169429,169433,169437,169462],{"__ignoreMap":22},[105,169384,169385,169387],{"class":107,"line":108},[105,169386,30377],{"class":111},[105,169388,147076],{"class":115},[105,169390,169391],{"class":107,"line":28},[105,169392,2391],{"emptyLinePlaceholder":32},[105,169394,169395,169397,169399],{"class":107,"line":1171},[105,169396,149466],{"class":115},[105,169398,161],{"class":111},[105,169400,15564],{"class":115},[105,169402,169403,169405,169407,169409],{"class":107,"line":1186},[105,169404,147005],{"class":220},[105,169406,51422],{"class":115},[105,169408,149873],{"class":220},[105,169410,31451],{"class":115},[105,169412,169413,169415,169417,169419],{"class":107,"line":1192},[105,169414,164522],{"class":220},[105,169416,51422],{"class":115},[105,169418,766],{"class":164},[105,169420,31451],{"class":115},[105,169422,169423,169425,169427],{"class":107,"line":1206},[105,169424,164533],{"class":220},[105,169426,51422],{"class":115},[105,169428,164538],{"class":164},[105,169430,169431],{"class":107,"line":1212},[105,169432,1556],{"class":115},[105,169434,169435],{"class":107,"line":1303},[105,169436,2391],{"emptyLinePlaceholder":32},[105,169438,169439,169441,169443,169446,169448,169450,169452,169454,169456,169458,169460],{"class":107,"line":1309},[105,169440,156429],{"class":115},[105,169442,161],{"class":111},[105,169444,169445],{"class":115}," json.dumps(student, ",[105,169447,147122],{"class":5208},[105,169449,161],{"class":111},[105,169451,33972],{"class":164},[105,169453,12427],{"class":115},[105,169455,151997],{"class":5208},[105,169457,161],{"class":111},[105,169459,193],{"class":164},[105,169461,122],{"class":115},[105,169463,169464,169466],{"class":107,"line":1321},[105,169465,30400],{"class":164},[105,169467,164056],{"class":115},[14,169469,169470],{},"写入 JSON 文件：",[96,169472,169474],{"className":30363,"code":169473,"language":30365,"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",[102,169475,169476,169482,169486,169494,169522,169550,169554,169558,169588],{"__ignoreMap":22},[105,169477,169478,169480],{"class":107,"line":108},[105,169479,30377],{"class":111},[105,169481,147076],{"class":115},[105,169483,169484],{"class":107,"line":28},[105,169485,2391],{"emptyLinePlaceholder":32},[105,169487,169488,169490,169492],{"class":107,"line":1171},[105,169489,159701],{"class":115},[105,169491,161],{"class":111},[105,169493,55432],{"class":115},[105,169495,169496,169498,169500,169502,169504,169506,169508,169510,169512,169514,169516,169518,169520],{"class":107,"line":1186},[105,169497,148370],{"class":115},[105,169499,62664],{"class":220},[105,169501,51422],{"class":115},[105,169503,149873],{"class":220},[105,169505,12427],{"class":115},[105,169507,69109],{"class":220},[105,169509,51422],{"class":115},[105,169511,766],{"class":164},[105,169513,12427],{"class":115},[105,169515,151457],{"class":220},[105,169517,51422],{"class":115},[105,169519,1105],{"class":164},[105,169521,4921],{"class":115},[105,169523,169524,169526,169528,169530,169532,169534,169536,169538,169540,169542,169544,169546,169548],{"class":107,"line":1192},[105,169525,148370],{"class":115},[105,169527,62664],{"class":220},[105,169529,51422],{"class":115},[105,169531,150921],{"class":220},[105,169533,12427],{"class":115},[105,169535,69109],{"class":220},[105,169537,51422],{"class":115},[105,169539,741],{"class":164},[105,169541,12427],{"class":115},[105,169543,151457],{"class":220},[105,169545,51422],{"class":115},[105,169547,927],{"class":164},[105,169549,4921],{"class":115},[105,169551,169552],{"class":107,"line":1206},[105,169553,33231],{"class":115},[105,169555,169556],{"class":107,"line":1212},[105,169557,2391],{"emptyLinePlaceholder":32},[105,169559,169560,169562,169564,169566,169568,169570,169572,169574,169576,169578,169580,169582,169584,169586],{"class":107,"line":1303},[105,169561,107818],{"class":111},[105,169563,146776],{"class":164},[105,169565,116],{"class":115},[105,169567,151816],{"class":220},[105,169569,12427],{"class":115},[105,169571,151961],{"class":220},[105,169573,12427],{"class":115},[105,169575,146791],{"class":5208},[105,169577,161],{"class":111},[105,169579,146796],{"class":220},[105,169581,13706],{"class":115},[105,169583,31368],{"class":111},[105,169585,148138],{"class":5208},[105,169587,3730],{"class":115},[105,169589,169590,169593,169595,169597,169599,169601,169603,169605,169607,169609,169611],{"class":107,"line":1309},[105,169591,169592],{"class":115},"    json.dump(students, ",[105,169594,45339],{"class":5208},[105,169596,12427],{"class":115},[105,169598,147122],{"class":5208},[105,169600,161],{"class":111},[105,169602,33972],{"class":164},[105,169604,12427],{"class":115},[105,169606,151997],{"class":5208},[105,169608,161],{"class":111},[105,169610,193],{"class":164},[105,169612,122],{"class":115},[14,169614,169615],{},"读取 JSON 文件：",[96,169617,169619],{"className":30363,"code":169618,"language":30365,"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",[102,169620,169621,169627,169631,169661,169673,169677],{"__ignoreMap":22},[105,169622,169623,169625],{"class":107,"line":108},[105,169624,30377],{"class":111},[105,169626,147076],{"class":115},[105,169628,169629],{"class":107,"line":28},[105,169630,2391],{"emptyLinePlaceholder":32},[105,169632,169633,169635,169637,169639,169641,169643,169645,169647,169649,169651,169653,169655,169657,169659],{"class":107,"line":1171},[105,169634,107818],{"class":111},[105,169636,146776],{"class":164},[105,169638,116],{"class":115},[105,169640,151816],{"class":220},[105,169642,12427],{"class":115},[105,169644,146786],{"class":220},[105,169646,12427],{"class":115},[105,169648,146791],{"class":5208},[105,169650,161],{"class":111},[105,169652,146796],{"class":220},[105,169654,13706],{"class":115},[105,169656,31368],{"class":111},[105,169658,148138],{"class":5208},[105,169660,3730],{"class":115},[105,169662,169663,169665,169667,169669,169671],{"class":107,"line":1186},[105,169664,153022],{"class":115},[105,169666,161],{"class":111},[105,169668,148149],{"class":115},[105,169670,45339],{"class":5208},[105,169672,122],{"class":115},[105,169674,169675],{"class":107,"line":1192},[105,169676,2391],{"emptyLinePlaceholder":32},[105,169678,169679,169681],{"class":107,"line":1206},[105,169680,30400],{"class":164},[105,169682,164980],{"class":115},[47,169684,169686],{"id":169685},"_811-csv文件","8.11 CSV文件",[14,169688,169689],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169691,169692],{},"写入 CSV：",[96,169694,169696],{"className":30363,"code":169695,"language":30365,"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",[102,169697,169698,169705,169709,169717,169735,169751,169767,169771,169775,169815,169829],{"__ignoreMap":22},[105,169699,169700,169702],{"class":107,"line":108},[105,169701,30377],{"class":111},[105,169703,169704],{"class":115}," csv\n",[105,169706,169707],{"class":107,"line":28},[105,169708,2391],{"emptyLinePlaceholder":32},[105,169710,169711,169713,169715],{"class":107,"line":1171},[105,169712,159701],{"class":115},[105,169714,161],{"class":111},[105,169716,55432],{"class":115},[105,169718,169719,169722,169724,169726,169728,169730,169733],{"class":107,"line":1186},[105,169720,169721],{"class":115},"    [",[105,169723,73084],{"class":220},[105,169725,12427],{"class":115},[105,169727,73117],{"class":220},[105,169729,12427],{"class":115},[105,169731,169732],{"class":220},"\"成绩\"",[105,169734,87821],{"class":115},[105,169736,169737,169739,169741,169743,169745,169747,169749],{"class":107,"line":1192},[105,169738,169721],{"class":115},[105,169740,149873],{"class":220},[105,169742,12427],{"class":115},[105,169744,766],{"class":164},[105,169746,12427],{"class":115},[105,169748,1105],{"class":164},[105,169750,87821],{"class":115},[105,169752,169753,169755,169757,169759,169761,169763,169765],{"class":107,"line":1206},[105,169754,169721],{"class":115},[105,169756,150921],{"class":220},[105,169758,12427],{"class":115},[105,169760,741],{"class":164},[105,169762,12427],{"class":115},[105,169764,927],{"class":164},[105,169766,87821],{"class":115},[105,169768,169769],{"class":107,"line":1212},[105,169770,33231],{"class":115},[105,169772,169773],{"class":107,"line":1303},[105,169774,2391],{"emptyLinePlaceholder":32},[105,169776,169777,169779,169781,169783,169786,169788,169790,169792,169794,169796,169798,169800,169803,169805,169807,169809,169811,169813],{"class":107,"line":1309},[105,169778,107818],{"class":111},[105,169780,146776],{"class":164},[105,169782,116],{"class":115},[105,169784,169785],{"class":220},"\"students.csv\"",[105,169787,12427],{"class":115},[105,169789,151961],{"class":220},[105,169791,12427],{"class":115},[105,169793,146791],{"class":5208},[105,169795,161],{"class":111},[105,169797,146796],{"class":220},[105,169799,12427],{"class":115},[105,169801,169802],{"class":5208},"newline",[105,169804,161],{"class":111},[105,169806,7644],{"class":220},[105,169808,13706],{"class":115},[105,169810,31368],{"class":111},[105,169812,148138],{"class":5208},[105,169814,3730],{"class":115},[105,169816,169817,169820,169822,169825,169827],{"class":107,"line":1321},[105,169818,169819],{"class":115},"    writer ",[105,169821,161],{"class":111},[105,169823,169824],{"class":115}," csv.writer(",[105,169826,45339],{"class":5208},[105,169828,122],{"class":115},[105,169830,169831],{"class":107,"line":1603},[105,169832,169833],{"class":115},"    writer.writerows(students)\n",[14,169835,169836],{},"读取 CSV：",[96,169838,169840],{"className":30363,"code":169839,"language":30365,"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",[102,169841,169842,169848,169852,169882,169896,169908],{"__ignoreMap":22},[105,169843,169844,169846],{"class":107,"line":108},[105,169845,30377],{"class":111},[105,169847,169704],{"class":115},[105,169849,169850],{"class":107,"line":28},[105,169851,2391],{"emptyLinePlaceholder":32},[105,169853,169854,169856,169858,169860,169862,169864,169866,169868,169870,169872,169874,169876,169878,169880],{"class":107,"line":1171},[105,169855,107818],{"class":111},[105,169857,146776],{"class":164},[105,169859,116],{"class":115},[105,169861,169785],{"class":220},[105,169863,12427],{"class":115},[105,169865,146786],{"class":220},[105,169867,12427],{"class":115},[105,169869,146791],{"class":5208},[105,169871,161],{"class":111},[105,169873,146796],{"class":220},[105,169875,13706],{"class":115},[105,169877,31368],{"class":111},[105,169879,148138],{"class":5208},[105,169881,3730],{"class":115},[105,169883,169884,169887,169889,169892,169894],{"class":107,"line":1186},[105,169885,169886],{"class":115},"    reader ",[105,169888,161],{"class":111},[105,169890,169891],{"class":115}," csv.reader(",[105,169893,45339],{"class":5208},[105,169895,122],{"class":115},[105,169897,169898,169900,169903,169905],{"class":107,"line":1192},[105,169899,3192],{"class":111},[105,169901,169902],{"class":115}," row ",[105,169904,26028],{"class":111},[105,169906,169907],{"class":115}," reader:\n",[105,169909,169910,169912],{"class":107,"line":1206},[105,169911,32436],{"class":164},[105,169913,169914],{"class":115},"(row)\n",[14,169916,169917],{},"使用字典写入：",[96,169919,169921],{"className":30363,"code":169920,"language":30365,"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",[102,169922,169923,169929,169933,169941,169969,169997,170001,170005,170043,170064,170085,170090],{"__ignoreMap":22},[105,169924,169925,169927],{"class":107,"line":108},[105,169926,30377],{"class":111},[105,169928,169704],{"class":115},[105,169930,169931],{"class":107,"line":28},[105,169932,2391],{"emptyLinePlaceholder":32},[105,169934,169935,169937,169939],{"class":107,"line":1171},[105,169936,159701],{"class":115},[105,169938,161],{"class":111},[105,169940,55432],{"class":115},[105,169942,169943,169945,169947,169949,169951,169953,169955,169957,169959,169961,169963,169965,169967],{"class":107,"line":1186},[105,169944,148370],{"class":115},[105,169946,62664],{"class":220},[105,169948,51422],{"class":115},[105,169950,149873],{"class":220},[105,169952,12427],{"class":115},[105,169954,69109],{"class":220},[105,169956,51422],{"class":115},[105,169958,766],{"class":164},[105,169960,12427],{"class":115},[105,169962,151457],{"class":220},[105,169964,51422],{"class":115},[105,169966,1105],{"class":164},[105,169968,4921],{"class":115},[105,169970,169971,169973,169975,169977,169979,169981,169983,169985,169987,169989,169991,169993,169995],{"class":107,"line":1192},[105,169972,148370],{"class":115},[105,169974,62664],{"class":220},[105,169976,51422],{"class":115},[105,169978,150921],{"class":220},[105,169980,12427],{"class":115},[105,169982,69109],{"class":220},[105,169984,51422],{"class":115},[105,169986,741],{"class":164},[105,169988,12427],{"class":115},[105,169990,151457],{"class":220},[105,169992,51422],{"class":115},[105,169994,927],{"class":164},[105,169996,4921],{"class":115},[105,169998,169999],{"class":107,"line":1206},[105,170000,33231],{"class":115},[105,170002,170003],{"class":107,"line":1212},[105,170004,2391],{"emptyLinePlaceholder":32},[105,170006,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031,170033,170035,170037,170039,170041],{"class":107,"line":1303},[105,170008,107818],{"class":111},[105,170010,146776],{"class":164},[105,170012,116],{"class":115},[105,170014,169785],{"class":220},[105,170016,12427],{"class":115},[105,170018,151961],{"class":220},[105,170020,12427],{"class":115},[105,170022,146791],{"class":5208},[105,170024,161],{"class":111},[105,170026,146796],{"class":220},[105,170028,12427],{"class":115},[105,170030,169802],{"class":5208},[105,170032,161],{"class":111},[105,170034,7644],{"class":220},[105,170036,13706],{"class":115},[105,170038,31368],{"class":111},[105,170040,148138],{"class":5208},[105,170042,3730],{"class":115},[105,170044,170045,170048,170050,170052,170054,170056,170058,170060,170062],{"class":107,"line":1309},[105,170046,170047],{"class":115},"    fieldnames ",[105,170049,161],{"class":111},[105,170051,52211],{"class":115},[105,170053,62664],{"class":220},[105,170055,12427],{"class":115},[105,170057,69109],{"class":220},[105,170059,12427],{"class":115},[105,170061,151457],{"class":220},[105,170063,33231],{"class":115},[105,170065,170066,170068,170070,170073,170075,170077,170080,170082],{"class":107,"line":1321},[105,170067,169819],{"class":115},[105,170069,161],{"class":111},[105,170071,170072],{"class":115}," csv.DictWriter(",[105,170074,45339],{"class":5208},[105,170076,12427],{"class":115},[105,170078,170079],{"class":5208},"fieldnames",[105,170081,161],{"class":111},[105,170083,170084],{"class":115},"fieldnames)\n",[105,170086,170087],{"class":107,"line":1603},[105,170088,170089],{"class":115},"    writer.writeheader()\n",[105,170091,170092],{"class":107,"line":1608},[105,170093,169833],{"class":115},[47,170095,170097],{"id":170096},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170099,123277],{},[59,170101,170102,170105,170108],{},[62,170103,170104],{},"读取文本文件。",[62,170106,170107],{},"统计每个单词出现次数。",[62,170109,170110],{},"输出出现次数最多的前 10 个单词。",[14,170112,10027],{},[96,170114,170116],{"className":30363,"code":170115,"language":30365,"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",[102,170117,170118,170128,170132,170145,170161,170165,170175,170184,170188,170200,170220,170229,170233,170251,170255,170285,170289,170305],{"__ignoreMap":22},[105,170119,170120,170122,170124,170126],{"class":107,"line":108},[105,170121,30722],{"class":111},[105,170123,108296],{"class":115},[105,170125,30377],{"class":111},[105,170127,108301],{"class":115},[105,170129,170130],{"class":107,"line":28},[105,170131,2391],{"emptyLinePlaceholder":32},[105,170133,170134,170136,170138,170140,170143],{"class":107,"line":1171},[105,170135,168296],{"class":115},[105,170137,161],{"class":111},[105,170139,108530],{"class":115},[105,170141,170142],{"class":220},"\"article.txt\"",[105,170144,122],{"class":115},[105,170146,170147,170149,170151,170153,170155,170157,170159],{"class":107,"line":1186},[105,170148,168479],{"class":115},[105,170150,161],{"class":111},[105,170152,169356],{"class":115},[105,170154,146791],{"class":5208},[105,170156,161],{"class":111},[105,170158,146796],{"class":220},[105,170160,122],{"class":115},[105,170162,170163],{"class":107,"line":1192},[105,170164,2391],{"emptyLinePlaceholder":32},[105,170166,170167,170170,170172],{"class":107,"line":1206},[105,170168,170169],{"class":115},"words ",[105,170171,161],{"class":111},[105,170173,170174],{"class":115}," content.lower().split()\n",[105,170176,170177,170180,170182],{"class":107,"line":1212},[105,170178,170179],{"class":115},"counter ",[105,170181,161],{"class":111},[105,170183,87853],{"class":115},[105,170185,170186],{"class":107,"line":1303},[105,170187,2391],{"emptyLinePlaceholder":32},[105,170189,170190,170192,170195,170197],{"class":107,"line":1309},[105,170191,3016],{"class":111},[105,170193,170194],{"class":115}," word ",[105,170196,26028],{"class":111},[105,170198,170199],{"class":115}," words:\n",[105,170201,170202,170205,170207,170210,170213,170215,170218],{"class":107,"line":1321},[105,170203,170204],{"class":115},"    word ",[105,170206,161],{"class":111},[105,170208,170209],{"class":115}," word.strip(",[105,170211,170212],{"class":220},"\".,!?;:",[105,170214,156480],{"class":164},[105,170216,170217],{"class":220},"'()[]\"",[105,170219,122],{"class":115},[105,170221,170222,170224,170226],{"class":107,"line":1603},[105,170223,3092],{"class":111},[105,170225,38915],{"class":111},[105,170227,170228],{"class":115}," word:\n",[105,170230,170231],{"class":107,"line":1608},[105,170232,148497],{"class":111},[105,170234,170235,170238,170240,170243,170245,170247,170249],{"class":107,"line":1614},[105,170236,170237],{"class":115},"    counter[word] ",[105,170239,161],{"class":111},[105,170241,170242],{"class":115}," counter.get(word, ",[105,170244,307],{"class":164},[105,170246,13706],{"class":115},[105,170248,597],{"class":111},[105,170250,55684],{"class":164},[105,170252,170253],{"class":107,"line":1619},[105,170254,2391],{"emptyLinePlaceholder":32},[105,170256,170257,170260,170262,170264,170267,170269,170271,170273,170275,170277,170279,170281,170283],{"class":107,"line":1633},[105,170258,170259],{"class":115},"items ",[105,170261,161],{"class":111},[105,170263,163589],{"class":164},[105,170265,170266],{"class":115},"(counter.items(), ",[105,170268,153931],{"class":5208},[105,170270,153934],{"class":111},[105,170272,153937],{"class":115},[105,170274,333],{"class":164},[105,170276,112187],{"class":115},[105,170278,163513],{"class":5208},[105,170280,161],{"class":111},[105,170282,31461],{"class":164},[105,170284,122],{"class":115},[105,170286,170287],{"class":107,"line":1638},[105,170288,2391],{"emptyLinePlaceholder":32},[105,170290,170291,170293,170296,170298,170301,170303],{"class":107,"line":1644},[105,170292,3016],{"class":111},[105,170294,170295],{"class":115}," word, count ",[105,170297,26028],{"class":111},[105,170299,170300],{"class":115}," items[:",[105,170302,562],{"class":164},[105,170304,165740],{"class":115},[105,170306,170307,170309],{"class":107,"line":1665},[105,170308,31284],{"class":164},[105,170310,170311],{"class":115},"(word, count)\n",[47,170313,170315],{"id":170314},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[96,170317,170319],{"className":30363,"code":170318,"language":30365,"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",[102,170320,170321,170327,170337,170341,170353,170357,170361,170369,170379,170385,170389,170419,170429,170433,170437,170445,170475,170499,170503,170507,170515,170544,170549],{"__ignoreMap":22},[105,170322,170323,170325],{"class":107,"line":108},[105,170324,30377],{"class":111},[105,170326,147076],{"class":115},[105,170328,170329,170331,170333,170335],{"class":107,"line":28},[105,170330,30722],{"class":111},[105,170332,108296],{"class":115},[105,170334,30377],{"class":111},[105,170336,108301],{"class":115},[105,170338,170339],{"class":107,"line":1171},[105,170340,2391],{"emptyLinePlaceholder":32},[105,170342,170343,170345,170347,170349,170351],{"class":107,"line":1186},[105,170344,151809],{"class":164},[105,170346,13556],{"class":111},[105,170348,108530],{"class":115},[105,170350,151816],{"class":220},[105,170352,122],{"class":115},[105,170354,170355],{"class":107,"line":1192},[105,170356,2391],{"emptyLinePlaceholder":32},[105,170358,170359],{"class":107,"line":1206},[105,170360,2391],{"emptyLinePlaceholder":32},[105,170362,170363,170365,170367],{"class":107,"line":1212},[105,170364,31932],{"class":111},[105,170366,151833],{"class":1954},[105,170368,31938],{"class":115},[105,170370,170371,170373,170375,170377],{"class":107,"line":1303},[105,170372,3092],{"class":111},[105,170374,38915],{"class":111},[105,170376,151844],{"class":164},[105,170378,151847],{"class":115},[105,170380,170381,170383],{"class":107,"line":1309},[105,170382,14744],{"class":111},[105,170384,51823],{"class":115},[105,170386,170387],{"class":107,"line":1321},[105,170388,2391],{"emptyLinePlaceholder":32},[105,170390,170391,170393,170395,170397,170399,170401,170403,170405,170407,170409,170411,170413,170415,170417],{"class":107,"line":1603},[105,170392,34163],{"class":111},[105,170394,146776],{"class":164},[105,170396,116],{"class":115},[105,170398,151809],{"class":164},[105,170400,12427],{"class":115},[105,170402,146786],{"class":220},[105,170404,12427],{"class":115},[105,170406,146791],{"class":5208},[105,170408,161],{"class":111},[105,170410,146796],{"class":220},[105,170412,13706],{"class":115},[105,170414,31368],{"class":111},[105,170416,148138],{"class":5208},[105,170418,3730],{"class":115},[105,170420,170421,170423,170425,170427],{"class":107,"line":1608},[105,170422,14744],{"class":111},[105,170424,148149],{"class":115},[105,170426,45339],{"class":5208},[105,170428,122],{"class":115},[105,170430,170431],{"class":107,"line":1614},[105,170432,2391],{"emptyLinePlaceholder":32},[105,170434,170435],{"class":107,"line":1619},[105,170436,2391],{"emptyLinePlaceholder":32},[105,170438,170439,170441,170443],{"class":107,"line":1633},[105,170440,31932],{"class":111},[105,170442,151943],{"class":1954},[105,170444,151946],{"class":115},[105,170446,170447,170449,170451,170453,170455,170457,170459,170461,170463,170465,170467,170469,170471,170473],{"class":107,"line":1638},[105,170448,34163],{"class":111},[105,170450,146776],{"class":164},[105,170452,116],{"class":115},[105,170454,151809],{"class":164},[105,170456,12427],{"class":115},[105,170458,151961],{"class":220},[105,170460,12427],{"class":115},[105,170462,146791],{"class":5208},[105,170464,161],{"class":111},[105,170466,146796],{"class":220},[105,170468,13706],{"class":115},[105,170470,31368],{"class":111},[105,170472,148138],{"class":5208},[105,170474,3730],{"class":115},[105,170476,170477,170479,170481,170483,170485,170487,170489,170491,170493,170495,170497],{"class":107,"line":1644},[105,170478,151982],{"class":115},[105,170480,45339],{"class":5208},[105,170482,12427],{"class":115},[105,170484,147122],{"class":5208},[105,170486,161],{"class":111},[105,170488,33972],{"class":164},[105,170490,12427],{"class":115},[105,170492,151997],{"class":5208},[105,170494,161],{"class":111},[105,170496,193],{"class":164},[105,170498,122],{"class":115},[105,170500,170501],{"class":107,"line":1665},[105,170502,2391],{"emptyLinePlaceholder":32},[105,170504,170505],{"class":107,"line":1670},[105,170506,2391],{"emptyLinePlaceholder":32},[105,170508,170509,170511,170513],{"class":107,"line":1684},[105,170510,159701],{"class":115},[105,170512,161],{"class":111},[105,170514,153027],{"class":115},[105,170516,170517,170520,170522,170524,170526,170528,170530,170532,170534,170536,170538,170540,170542],{"class":107,"line":1689},[105,170518,170519],{"class":115},"students.append({",[105,170521,62664],{"class":220},[105,170523,51422],{"class":115},[105,170525,149873],{"class":220},[105,170527,12427],{"class":115},[105,170529,69109],{"class":220},[105,170531,51422],{"class":115},[105,170533,766],{"class":164},[105,170535,12427],{"class":115},[105,170537,151457],{"class":220},[105,170539,51422],{"class":115},[105,170541,1105],{"class":164},[105,170543,165137],{"class":115},[105,170545,170546],{"class":107,"line":1718},[105,170547,170548],{"class":115},"save_students(students)\n",[105,170550,170551,170553,170555,170558],{"class":107,"line":1723},[105,170552,30400],{"class":164},[105,170554,116],{"class":115},[105,170556,170557],{"class":220},"\"保存成功\"",[105,170559,122],{"class":115},[47,170561,170563],{"id":170562},"_814-易错点","8.14 易错点",[59,170565,170566,170570,170576,170581,170588,170595],{},[62,170567,170568,168829],{},[102,170569,911],{},[62,170571,170572,170573,28370],{},"读写中文要指定 ",[102,170574,170575],{},"encoding=\"utf-8\"",[62,170577,170578,170579,28370],{},"打开文件后要关闭，推荐使用 ",[102,170580,107818],{},[62,170582,170583,170584,170587],{},"读取大文件不要直接 ",[102,170585,170586],{},"read()"," 全部内容。",[62,170589,170590,170591,170594],{},"Windows 写 CSV 时建议加 ",[102,170592,170593],{},"newline=\"\"","，避免空行。",[62,170596,170597],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[47,170599,170601],{"id":170600},"_815-本章练习","8.15 本章练习",[59,170603,170604,170611,170616,170619,170622],{},[62,170605,170606,170607,170610],{},"写入一个 ",[102,170608,170609],{},"students.txt","，每行保存一个学生姓名。",[62,170612,104340,170613,170615],{},[102,170614,170609],{}," 并输出所有学生。",[62,170617,170618],{},"把学生列表保存为 JSON 文件。",[62,170620,170621],{},"从 JSON 文件读取学生数据，计算平均分。",[62,170623,170624,170625,170628,170629,170632],{},"写一个日志函数 ",[102,170626,170627],{},"write_log(message)","，每次调用向 ",[102,170630,170631],{},"app.log"," 追加一行。",[5118,170634,170635],{},"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":28,"depth":28,"links":170637},[170638,170639,170643,170644,170650,170651,170652,170653,170654,170655,170656,170657,170658,170659,170660],{"id":168149,"depth":28,"text":168150},{"id":168190,"depth":28,"text":168191,"children":170640},[170641,170642],{"id":168194,"depth":1171,"text":168195},{"id":168228,"depth":1171,"text":168229},{"id":168342,"depth":28,"text":168343},{"id":168435,"depth":28,"text":168436,"children":170645},[170646,170647,170648,170649],{"id":168439,"depth":1171,"text":168440},{"id":168526,"depth":1171,"text":168527},{"id":168596,"depth":1171,"text":168597},{"id":168690,"depth":1171,"text":168691},{"id":168760,"depth":28,"text":168761},{"id":168823,"depth":28,"text":168824},{"id":168984,"depth":28,"text":168985},{"id":169047,"depth":28,"text":169048},{"id":169163,"depth":28,"text":169164},{"id":169373,"depth":28,"text":169374},{"id":169685,"depth":28,"text":169686},{"id":170096,"depth":28,"text":170097},{"id":170314,"depth":28,"text":170315},{"id":170562,"depth":28,"text":170563},{"id":170600,"depth":28,"text":170601},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168141,"description":23369},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170667,"title":170668,"body":170669,"description":23369,"extension":30,"meta":172855,"navigation":32,"path":172856,"seo":172857,"stem":172858,"__hash__":172859},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170670,"toc":172822},[170671,170674,170678,170681,170684,170776,170778,170797,170802,170806,170809,170812,170841,170848,170851,170855,170858,170887,170889,170941,170947,171000,171004,171102,171105,171172,171176,171233,171235,171241,171245,171250,171256,171347,171352,171356,171359,171437,171440,171478,171482,171600,171603,171607,171610,171655,171658,171662,171667,171673,171723,171726,171757,171761,171765,171795,171799,171834,171838,171873,171913,171917,171933,171936,171940,171944,172023,172027,172068,172072,172127,172131,172165,172169,172199,172208,172215,172221,172278,172281,172289,172292,172296,172303,172306,172312,172315,172332,172337,172341,172347,172360,172363,172400,172403,172414,172417,172431,172434,172448,172452,172459,172492,172495,172497,172503,172506,172510,172512,172518,172523,172696,172700,172763,172767,172791,172795,172819],[10,170672,170668],{"id":170673},"_9-异常模块与包",[47,170675,170677],{"id":170676},"_91-什么是异常","9.1 什么是异常",[14,170679,170680],{},"异常是程序运行过程中出现的错误。",[14,170682,170683],{},"常见异常：",[253,170685,170686,170695],{},[256,170687,170688],{},[259,170689,170690,170693],{},[262,170691,170692],{},"异常",[262,170694,25854],{},[300,170696,170697,170707,170717,170726,170736,170746,170756,170766],{},[259,170698,170699,170704],{},[305,170700,170701],{},[102,170702,170703],{},"NameError",[305,170705,170706],{},"使用了未定义变量",[259,170708,170709,170714],{},[305,170710,170711],{},[102,170712,170713],{},"TypeError",[305,170715,170716],{},"类型不匹配",[259,170718,170719,170723],{},[305,170720,170721],{},[102,170722,154819],{},[305,170724,170725],{},"值不合法",[259,170727,170728,170733],{},[305,170729,170730],{},[102,170731,170732],{},"IndexError",[305,170734,170735],{},"列表索引越界",[259,170737,170738,170743],{},[305,170739,170740],{},[102,170741,170742],{},"KeyError",[305,170744,170745],{},"字典 key 不存在",[259,170747,170748,170753],{},[305,170749,170750],{},[102,170751,170752],{},"FileNotFoundError",[305,170754,170755],{},"文件不存在",[259,170757,170758,170763],{},[305,170759,170760],{},[102,170761,170762],{},"ZeroDivisionError",[305,170764,170765],{},"除数为 0",[259,170767,170768,170773],{},[305,170769,170770],{},[102,170771,170772],{},"ImportError",[305,170774,170775],{},"导入失败",[14,170777,15127],{},[96,170779,170781],{"className":30363,"code":170780,"language":30365,"meta":22,"style":22},"num = int(\"abc\")\n",[102,170782,170783],{"__ignoreMap":22},[105,170784,170785,170787,170789,170791,170793,170795],{"class":107,"line":108},[105,170786,155772],{"class":115},[105,170788,161],{"class":111},[105,170790,2373],{"class":164},[105,170792,116],{"class":115},[105,170794,155865],{"class":220},[105,170796,122],{"class":115},[14,170798,170799,170800,28370],{},"会触发 ",[102,170801,154819],{},[47,170803,170805],{"id":170804},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170807,170808],{},"如果不处理异常，程序会直接终止。",[14,170810,170811],{},"例如用户输入年龄：",[96,170813,170815],{"className":30363,"code":170814,"language":30365,"meta":22,"style":22},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[102,170816,170817,170835],{"__ignoreMap":22},[105,170818,170819,170821,170823,170825,170827,170829,170831,170833],{"class":107,"line":108},[105,170820,146531],{"class":115},[105,170822,161],{"class":111},[105,170824,2373],{"class":164},[105,170826,116],{"class":115},[105,170828,53806],{"class":164},[105,170830,116],{"class":115},[105,170832,152379],{"class":220},[105,170834,30482],{"class":115},[105,170836,170837,170839],{"class":107,"line":28},[105,170838,30400],{"class":164},[105,170840,155746],{"class":115},[14,170842,170843,170844,170847],{},"用户输入 ",[102,170845,170846],{},"abc","，程序就会报错退出。",[14,170849,170850],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[47,170852,170854],{"id":170853},"_93-try-except","9.3 try except",[14,170856,170857],{},"基础语法：",[96,170859,170861],{"className":30363,"code":170860,"language":30365,"meta":22,"style":22},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[102,170862,170863,170870,170875,170882],{"__ignoreMap":22},[105,170864,170865,170868],{"class":107,"line":108},[105,170866,170867],{"class":111},"try",[105,170869,3730],{"class":115},[105,170871,170872],{"class":107,"line":28},[105,170873,170874],{"class":115},"    可能出错的代码\n",[105,170876,170877,170880],{"class":107,"line":1171},[105,170878,170879],{"class":111},"except",[105,170881,3730],{"class":115},[105,170883,170884],{"class":107,"line":1186},[105,170885,170886],{"class":115},"    出错后的处理代码\n",[14,170888,15127],{},[96,170890,170892],{"className":30363,"code":170891,"language":30365,"meta":22,"style":22},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[102,170893,170894,170900,170918,170924,170930],{"__ignoreMap":22},[105,170895,170896,170898],{"class":107,"line":108},[105,170897,170867],{"class":111},[105,170899,3730],{"class":115},[105,170901,170902,170904,170906,170908,170910,170912,170914,170916],{"class":107,"line":28},[105,170903,152371],{"class":115},[105,170905,161],{"class":111},[105,170907,2373],{"class":164},[105,170909,116],{"class":115},[105,170911,53806],{"class":164},[105,170913,116],{"class":115},[105,170915,152379],{"class":220},[105,170917,30482],{"class":115},[105,170919,170920,170922],{"class":107,"line":1171},[105,170921,31284],{"class":164},[105,170923,155746],{"class":115},[105,170925,170926,170928],{"class":107,"line":1186},[105,170927,170879],{"class":111},[105,170929,3730],{"class":115},[105,170931,170932,170934,170936,170939],{"class":107,"line":1192},[105,170933,31284],{"class":164},[105,170935,116],{"class":115},[105,170937,170938],{"class":220},"\"年龄必须是数字\"",[105,170940,122],{"class":115},[14,170942,170943,170944,170946],{},"不建议裸写 ",[102,170945,170879],{},"，最好指定异常类型。",[96,170948,170950],{"className":30363,"code":170949,"language":30365,"meta":22,"style":22},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[102,170951,170952,170958,170976,170982,170990],{"__ignoreMap":22},[105,170953,170954,170956],{"class":107,"line":108},[105,170955,170867],{"class":111},[105,170957,3730],{"class":115},[105,170959,170960,170962,170964,170966,170968,170970,170972,170974],{"class":107,"line":28},[105,170961,152371],{"class":115},[105,170963,161],{"class":111},[105,170965,2373],{"class":164},[105,170967,116],{"class":115},[105,170969,53806],{"class":164},[105,170971,116],{"class":115},[105,170973,152379],{"class":220},[105,170975,30482],{"class":115},[105,170977,170978,170980],{"class":107,"line":1171},[105,170979,31284],{"class":164},[105,170981,155746],{"class":115},[105,170983,170984,170986,170988],{"class":107,"line":1186},[105,170985,170879],{"class":111},[105,170987,152211],{"class":164},[105,170989,3730],{"class":115},[105,170991,170992,170994,170996,170998],{"class":107,"line":1192},[105,170993,31284],{"class":164},[105,170995,116],{"class":115},[105,170997,170938],{"class":220},[105,170999,122],{"class":115},[47,171001,171003],{"id":171002},"_94-捕获多个异常","9.4 捕获多个异常",[96,171005,171007],{"className":30363,"code":171006,"language":30365,"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",[102,171008,171009,171015,171036,171056,171063,171071,171082,171091],{"__ignoreMap":22},[105,171010,171011,171013],{"class":107,"line":108},[105,171012,170867],{"class":111},[105,171014,3730],{"class":115},[105,171016,171017,171020,171022,171024,171026,171028,171030,171032,171034],{"class":107,"line":28},[105,171018,171019],{"class":115},"    nums ",[105,171021,161],{"class":111},[105,171023,52211],{"class":115},[105,171025,333],{"class":164},[105,171027,12427],{"class":115},[105,171029,193],{"class":164},[105,171031,12427],{"class":115},[105,171033,187],{"class":164},[105,171035,33231],{"class":115},[105,171037,171038,171041,171043,171045,171047,171049,171051,171054],{"class":107,"line":1171},[105,171039,171040],{"class":115},"    index ",[105,171042,161],{"class":111},[105,171044,2373],{"class":164},[105,171046,116],{"class":115},[105,171048,53806],{"class":164},[105,171050,116],{"class":115},[105,171052,171053],{"class":220},"\"请输入索引:\"",[105,171055,30482],{"class":115},[105,171057,171058,171060],{"class":107,"line":1186},[105,171059,31284],{"class":164},[105,171061,171062],{"class":115},"(nums[index])\n",[105,171064,171065,171067,171069],{"class":107,"line":1192},[105,171066,170879],{"class":111},[105,171068,152211],{"class":164},[105,171070,3730],{"class":115},[105,171072,171073,171075,171077,171080],{"class":107,"line":1206},[105,171074,31284],{"class":164},[105,171076,116],{"class":115},[105,171078,171079],{"class":220},"\"索引必须是整数\"",[105,171081,122],{"class":115},[105,171083,171084,171086,171089],{"class":107,"line":1212},[105,171085,170879],{"class":111},[105,171087,171088],{"class":164}," IndexError",[105,171090,3730],{"class":115},[105,171092,171093,171095,171097,171100],{"class":107,"line":1303},[105,171094,31284],{"class":164},[105,171096,116],{"class":115},[105,171098,171099],{"class":220},"\"索引越界\"",[105,171101,122],{"class":115},[14,171103,171104],{},"多个异常使用相同处理逻辑：",[96,171106,171108],{"className":30363,"code":171107,"language":30365,"meta":22,"style":22},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[102,171109,171110,171116,171134,171147,171161],{"__ignoreMap":22},[105,171111,171112,171114],{"class":107,"line":108},[105,171113,170867],{"class":111},[105,171115,3730],{"class":115},[105,171117,171118,171120,171122,171124,171126,171128,171130,171132],{"class":107,"line":28},[105,171119,45578],{"class":115},[105,171121,161],{"class":111},[105,171123,2373],{"class":164},[105,171125,116],{"class":115},[105,171127,53806],{"class":164},[105,171129,116],{"class":115},[105,171131,155781],{"class":220},[105,171133,30482],{"class":115},[105,171135,171136,171138,171140,171142,171144],{"class":107,"line":1171},[105,171137,31284],{"class":164},[105,171139,116],{"class":115},[105,171141,562],{"class":164},[105,171143,156031],{"class":111},[105,171145,171146],{"class":115}," num)\n",[105,171148,171149,171151,171153,171155,171157,171159],{"class":107,"line":1186},[105,171150,170879],{"class":111},[105,171152,1649],{"class":115},[105,171154,154819],{"class":164},[105,171156,12427],{"class":115},[105,171158,170762],{"class":164},[105,171160,30771],{"class":115},[105,171162,171163,171165,171167,171170],{"class":107,"line":1192},[105,171164,31284],{"class":164},[105,171166,116],{"class":115},[105,171168,171169],{"class":220},"\"输入不合法\"",[105,171171,122],{"class":115},[47,171173,171175],{"id":171174},"_95-获取异常信息","9.5 获取异常信息",[96,171177,171179],{"className":30363,"code":171178,"language":30365,"meta":22,"style":22},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[102,171180,171181,171187,171201,171212],{"__ignoreMap":22},[105,171182,171183,171185],{"class":107,"line":108},[105,171184,170867],{"class":111},[105,171186,3730],{"class":115},[105,171188,171189,171191,171193,171195,171197,171199],{"class":107,"line":28},[105,171190,45578],{"class":115},[105,171192,161],{"class":111},[105,171194,2373],{"class":164},[105,171196,116],{"class":115},[105,171198,155865],{"class":220},[105,171200,122],{"class":115},[105,171202,171203,171205,171207,171209],{"class":107,"line":1171},[105,171204,170879],{"class":111},[105,171206,152211],{"class":164},[105,171208,64589],{"class":111},[105,171210,171211],{"class":115}," e:\n",[105,171213,171214,171216,171218,171220,171223,171225,171227,171229,171231],{"class":107,"line":1186},[105,171215,31284],{"class":164},[105,171217,116],{"class":115},[105,171219,168],{"class":111},[105,171221,171222],{"class":220},"\"出错了:",[105,171224,1012],{"class":164},[105,171226,190],{"class":115},[105,171228,1062],{"class":164},[105,171230,367],{"class":220},[105,171232,122],{"class":115},[14,171234,146442],{},[96,171236,171239],{"className":171237,"code":171238,"language":5179,"meta":22},[5177],"出错了:invalid literal for int() with base 10: 'abc'\n",[102,171240,171238],{"__ignoreMap":22},[47,171242,171244],{"id":171243},"_96-else和finally","9.6 else和finally",[14,171246,171247,171249],{},[102,171248,1692],{},"：没有异常时执行。",[14,171251,171252,171255],{},[102,171253,171254],{},"finally","：无论是否异常都会执行。",[96,171257,171259],{"className":30363,"code":171258,"language":30365,"meta":22,"style":22},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[102,171260,171261,171267,171285,171293,171303,171309,171330,171336],{"__ignoreMap":22},[105,171262,171263,171265],{"class":107,"line":108},[105,171264,170867],{"class":111},[105,171266,3730],{"class":115},[105,171268,171269,171271,171273,171275,171277,171279,171281,171283],{"class":107,"line":28},[105,171270,45578],{"class":115},[105,171272,161],{"class":111},[105,171274,2373],{"class":164},[105,171276,116],{"class":115},[105,171278,53806],{"class":164},[105,171280,116],{"class":115},[105,171282,155781],{"class":220},[105,171284,30482],{"class":115},[105,171286,171287,171289,171291],{"class":107,"line":1171},[105,171288,170879],{"class":111},[105,171290,152211],{"class":164},[105,171292,3730],{"class":115},[105,171294,171295,171297,171299,171301],{"class":107,"line":1186},[105,171296,31284],{"class":164},[105,171298,116],{"class":115},[105,171300,153199],{"class":220},[105,171302,122],{"class":115},[105,171304,171305,171307],{"class":107,"line":1192},[105,171306,1692],{"class":111},[105,171308,3730],{"class":115},[105,171310,171311,171313,171315,171317,171320,171322,171324,171326,171328],{"class":107,"line":1206},[105,171312,31284],{"class":164},[105,171314,116],{"class":115},[105,171316,168],{"class":111},[105,171318,171319],{"class":220},"\"输入正确:",[105,171321,1012],{"class":164},[105,171323,1656],{"class":115},[105,171325,1062],{"class":164},[105,171327,367],{"class":220},[105,171329,122],{"class":115},[105,171331,171332,171334],{"class":107,"line":1212},[105,171333,171254],{"class":111},[105,171335,3730],{"class":115},[105,171337,171338,171340,171342,171345],{"class":107,"line":1303},[105,171339,31284],{"class":164},[105,171341,116],{"class":115},[105,171343,171344],{"class":220},"\"程序结束\"",[105,171346,122],{"class":115},[14,171348,171349,171351],{},[102,171350,171254],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[47,171353,171355],{"id":171354},"_97-抛出异常","9.7 抛出异常",[14,171357,171358],{},"程序可以主动抛出异常。",[96,171360,171362],{"className":30363,"code":171361,"language":30365,"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",[102,171363,171364,171373,171385,171398,171418,171422,171426],{"__ignoreMap":22},[105,171365,171366,171368,171371],{"class":107,"line":108},[105,171367,31932],{"class":111},[105,171369,171370],{"class":1954}," set_age",[105,171372,161400],{"class":115},[105,171374,171375,171377,171379,171381,171383],{"class":107,"line":28},[105,171376,3092],{"class":111},[105,171378,15699],{"class":115},[105,171380,1026],{"class":111},[105,171382,4084],{"class":164},[105,171384,3730],{"class":115},[105,171386,171387,171389,171391,171393,171396],{"class":107,"line":1171},[105,171388,103417],{"class":111},[105,171390,152211],{"class":164},[105,171392,116],{"class":115},[105,171394,171395],{"class":220},"\"年龄不能为负数\"",[105,171397,122],{"class":115},[105,171399,171400,171402,171404,171406,171408,171410,171412,171414,171416],{"class":107,"line":1186},[105,171401,31284],{"class":164},[105,171403,116],{"class":115},[105,171405,168],{"class":111},[105,171407,161968],{"class":220},[105,171409,1012],{"class":164},[105,171411,70206],{"class":115},[105,171413,1062],{"class":164},[105,171415,367],{"class":220},[105,171417,122],{"class":115},[105,171419,171420],{"class":107,"line":1192},[105,171421,2391],{"emptyLinePlaceholder":32},[105,171423,171424],{"class":107,"line":1206},[105,171425,2391],{"emptyLinePlaceholder":32},[105,171427,171428,171431,171433,171435],{"class":107,"line":1212},[105,171429,171430],{"class":115},"set_age(",[105,171432,648],{"class":111},[105,171434,333],{"class":164},[105,171436,122],{"class":115},[14,171438,171439],{},"调用者可以捕获：",[96,171441,171443],{"className":30363,"code":171442,"language":30365,"meta":22,"style":22},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[102,171444,171445,171451,171462,171472],{"__ignoreMap":22},[105,171446,171447,171449],{"class":107,"line":108},[105,171448,170867],{"class":111},[105,171450,3730],{"class":115},[105,171452,171453,171456,171458,171460],{"class":107,"line":28},[105,171454,171455],{"class":115},"    set_age(",[105,171457,648],{"class":111},[105,171459,333],{"class":164},[105,171461,122],{"class":115},[105,171463,171464,171466,171468,171470],{"class":107,"line":1171},[105,171465,170879],{"class":111},[105,171467,152211],{"class":164},[105,171469,64589],{"class":111},[105,171471,171211],{"class":115},[105,171473,171474,171476],{"class":107,"line":1186},[105,171475,31284],{"class":164},[105,171477,66984],{"class":115},[47,171479,171481],{"id":171480},"_98-自定义异常","9.8 自定义异常",[96,171483,171485],{"className":30363,"code":171484,"language":30365,"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",[102,171486,171487,171501,171505,171509,171513,171521,171531,171542,171552,171556,171560,171566,171583,171594],{"__ignoreMap":22},[105,171488,171489,171491,171494,171496,171499],{"class":107,"line":108},[105,171490,14686],{"class":111},[105,171492,171493],{"class":1954}," BalanceNotEnoughError",[105,171495,116],{"class":115},[105,171497,171498],{"class":164},"Exception",[105,171500,30771],{"class":115},[105,171502,171503],{"class":107,"line":28},[105,171504,149522],{"class":111},[105,171506,171507],{"class":107,"line":1171},[105,171508,2391],{"emptyLinePlaceholder":32},[105,171510,171511],{"class":107,"line":1186},[105,171512,2391],{"emptyLinePlaceholder":32},[105,171514,171515,171517,171519],{"class":107,"line":1192},[105,171516,31932],{"class":111},[105,171518,150171],{"class":1954},[105,171520,162797],{"class":115},[105,171522,171523,171525,171527,171529],{"class":107,"line":1206},[105,171524,3092],{"class":111},[105,171526,150127],{"class":115},[105,171528,1076],{"class":111},[105,171530,162574],{"class":115},[105,171532,171533,171535,171538,171540],{"class":107,"line":1212},[105,171534,103417],{"class":111},[105,171536,171537],{"class":115}," BalanceNotEnoughError(",[105,171539,150222],{"class":220},[105,171541,122],{"class":115},[105,171543,171544,171546,171548,171550],{"class":107,"line":1303},[105,171545,4081],{"class":111},[105,171547,162804],{"class":115},[105,171549,648],{"class":111},[105,171551,150160],{"class":115},[105,171553,171554],{"class":107,"line":1309},[105,171555,2391],{"emptyLinePlaceholder":32},[105,171557,171558],{"class":107,"line":1321},[105,171559,2391],{"emptyLinePlaceholder":32},[105,171561,171562,171564],{"class":107,"line":1603},[105,171563,170867],{"class":111},[105,171565,3730],{"class":115},[105,171567,171568,171570,171572,171575,171577,171579,171581],{"class":107,"line":1608},[105,171569,162475],{"class":115},[105,171571,161],{"class":111},[105,171573,171574],{"class":115}," withdraw(",[105,171576,427],{"class":164},[105,171578,12427],{"class":115},[105,171580,1713],{"class":164},[105,171582,122],{"class":115},[105,171584,171585,171587,171590,171592],{"class":107,"line":1614},[105,171586,170879],{"class":111},[105,171588,171589],{"class":115}," BalanceNotEnoughError ",[105,171591,31368],{"class":111},[105,171593,171211],{"class":115},[105,171595,171596,171598],{"class":107,"line":1619},[105,171597,31284],{"class":164},[105,171599,66984],{"class":115},[14,171601,171602],{},"入门阶段大多数情况使用内置异常即可。",[47,171604,171606],{"id":171605},"_99-traceback","9.9 traceback",[14,171608,171609],{},"调试时可以输出完整异常堆栈。",[96,171611,171613],{"className":30363,"code":171612,"language":30365,"meta":22,"style":22},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[102,171614,171615,171622,171626,171632,171642,171650],{"__ignoreMap":22},[105,171616,171617,171619],{"class":107,"line":108},[105,171618,30377],{"class":111},[105,171620,171621],{"class":115}," traceback\n",[105,171623,171624],{"class":107,"line":28},[105,171625,2391],{"emptyLinePlaceholder":32},[105,171627,171628,171630],{"class":107,"line":1171},[105,171629,170867],{"class":111},[105,171631,3730],{"class":115},[105,171633,171634,171636,171638,171640],{"class":107,"line":1186},[105,171635,1976],{"class":164},[105,171637,116],{"class":115},[105,171639,155865],{"class":220},[105,171641,122],{"class":115},[105,171643,171644,171646,171648],{"class":107,"line":1192},[105,171645,170879],{"class":111},[105,171647,152211],{"class":164},[105,171649,3730],{"class":115},[105,171651,171652],{"class":107,"line":1206},[105,171653,171654],{"class":115},"    traceback.print_exc()\n",[14,171656,171657],{},"日志系统中常把异常堆栈记录到文件。",[47,171659,171661],{"id":171660},"_910-什么是模块","9.10 什么是模块",[14,171663,171664,171665,125968],{},"模块就是一个 ",[102,171666,146337],{},[14,171668,171669,171670,24603],{},"例如创建 ",[102,171671,171672],{},"my_math.py",[96,171674,171676],{"className":30363,"code":171675,"language":30365,"meta":22,"style":22},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[102,171677,171678,171686,171696,171700,171704,171713],{"__ignoreMap":22},[105,171679,171680,171682,171684],{"class":107,"line":108},[105,171681,31932],{"class":111},[105,171683,5201],{"class":1954},[105,171685,151078],{"class":115},[105,171687,171688,171690,171692,171694],{"class":107,"line":28},[105,171689,4081],{"class":111},[105,171691,10861],{"class":115},[105,171693,597],{"class":111},[105,171695,151089],{"class":115},[105,171697,171698],{"class":107,"line":1171},[105,171699,2391],{"emptyLinePlaceholder":32},[105,171701,171702],{"class":107,"line":1186},[105,171703,2391],{"emptyLinePlaceholder":32},[105,171705,171706,171708,171711],{"class":107,"line":1192},[105,171707,31932],{"class":111},[105,171709,171710],{"class":1954}," sub",[105,171712,151078],{"class":115},[105,171714,171715,171717,171719,171721],{"class":107,"line":1206},[105,171716,4081],{"class":111},[105,171718,10861],{"class":115},[105,171720,648],{"class":111},[105,171722,151089],{"class":115},[14,171724,171725],{},"在另一个文件中导入：",[96,171727,171729],{"className":30363,"code":171728,"language":30365,"meta":22,"style":22},"import my_math\n\nprint(my_math.add(1, 2))\n",[102,171730,171731,171738,171742],{"__ignoreMap":22},[105,171732,171733,171735],{"class":107,"line":108},[105,171734,30377],{"class":111},[105,171736,171737],{"class":115}," my_math\n",[105,171739,171740],{"class":107,"line":28},[105,171741,2391],{"emptyLinePlaceholder":32},[105,171743,171744,171746,171749,171751,171753,171755],{"class":107,"line":1171},[105,171745,30400],{"class":164},[105,171747,171748],{"class":115},"(my_math.add(",[105,171750,333],{"class":164},[105,171752,12427],{"class":115},[105,171754,193],{"class":164},[105,171756,30482],{"class":115},[47,171758,171760],{"id":171759},"_911-import导入","9.11 import导入",[76,171762,171764],{"id":171763},"_9111-导入模块","9.11.1 导入模块",[96,171766,171768],{"className":30363,"code":171767,"language":30365,"meta":22,"style":22},"import random\n\nprint(random.randint(1, 10))\n",[102,171769,171770,171776,171780],{"__ignoreMap":22},[105,171771,171772,171774],{"class":107,"line":108},[105,171773,30377],{"class":111},[105,171775,45313],{"class":115},[105,171777,171778],{"class":107,"line":28},[105,171779,2391],{"emptyLinePlaceholder":32},[105,171781,171782,171784,171787,171789,171791,171793],{"class":107,"line":1171},[105,171783,30400],{"class":164},[105,171785,171786],{"class":115},"(random.randint(",[105,171788,333],{"class":164},[105,171790,12427],{"class":115},[105,171792,562],{"class":164},[105,171794,30482],{"class":115},[76,171796,171798],{"id":171797},"_9112-导入指定内容","9.11.2 导入指定内容",[96,171800,171802],{"className":30363,"code":171801,"language":30365,"meta":22,"style":22},"from random import randint\n\nprint(randint(1, 10))\n",[102,171803,171804,171815,171819],{"__ignoreMap":22},[105,171805,171806,171808,171810,171812],{"class":107,"line":108},[105,171807,30722],{"class":111},[105,171809,57781],{"class":115},[105,171811,30377],{"class":111},[105,171813,171814],{"class":115}," randint\n",[105,171816,171817],{"class":107,"line":28},[105,171818,2391],{"emptyLinePlaceholder":32},[105,171820,171821,171823,171826,171828,171830,171832],{"class":107,"line":1171},[105,171822,30400],{"class":164},[105,171824,171825],{"class":115},"(randint(",[105,171827,333],{"class":164},[105,171829,12427],{"class":115},[105,171831,562],{"class":164},[105,171833,30482],{"class":115},[76,171835,171837],{"id":171836},"_9113-起别名","9.11.3 起别名",[96,171839,171841],{"className":30363,"code":171840,"language":30365,"meta":22,"style":22},"import random as rd\n\nprint(rd.randint(1, 10))\n",[102,171842,171843,171854,171858],{"__ignoreMap":22},[105,171844,171845,171847,171849,171851],{"class":107,"line":108},[105,171846,30377],{"class":111},[105,171848,57781],{"class":115},[105,171850,31368],{"class":111},[105,171852,171853],{"class":115}," rd\n",[105,171855,171856],{"class":107,"line":28},[105,171857,2391],{"emptyLinePlaceholder":32},[105,171859,171860,171862,171865,171867,171869,171871],{"class":107,"line":1171},[105,171861,30400],{"class":164},[105,171863,171864],{"class":115},"(rd.randint(",[105,171866,333],{"class":164},[105,171868,12427],{"class":115},[105,171870,562],{"class":164},[105,171872,30482],{"class":115},[96,171874,171876],{"className":30363,"code":171875,"language":30365,"meta":22,"style":22},"from random import randint as rint\n\nprint(rint(1, 10))\n",[102,171877,171878,171894,171898],{"__ignoreMap":22},[105,171879,171880,171882,171884,171886,171889,171891],{"class":107,"line":108},[105,171881,30722],{"class":111},[105,171883,57781],{"class":115},[105,171885,30377],{"class":111},[105,171887,171888],{"class":115}," randint ",[105,171890,31368],{"class":111},[105,171892,171893],{"class":115}," rint\n",[105,171895,171896],{"class":107,"line":28},[105,171897,2391],{"emptyLinePlaceholder":32},[105,171899,171900,171902,171905,171907,171909,171911],{"class":107,"line":1171},[105,171901,30400],{"class":164},[105,171903,171904],{"class":115},"(rint(",[105,171906,333],{"class":164},[105,171908,12427],{"class":115},[105,171910,562],{"class":164},[105,171912,30482],{"class":115},[76,171914,171916],{"id":171915},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[96,171918,171920],{"className":30363,"code":171919,"language":30365,"meta":22,"style":22},"from random import *\n",[102,171921,171922],{"__ignoreMap":22},[105,171923,171924,171926,171928,171930],{"class":107,"line":108},[105,171925,30722],{"class":111},[105,171927,57781],{"class":115},[105,171929,30377],{"class":111},[105,171931,171932],{"class":111}," *\n",[14,171934,171935],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[47,171937,171939],{"id":171938},"_912-常用内置模块","9.12 常用内置模块",[76,171941,171943],{"id":171942},"_9121-random","9.12.1 random",[96,171945,171947],{"className":30363,"code":171946,"language":30365,"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",[102,171948,171949,171955,171959,171973,171992],{"__ignoreMap":22},[105,171950,171951,171953],{"class":107,"line":108},[105,171952,30377],{"class":111},[105,171954,45313],{"class":115},[105,171956,171957],{"class":107,"line":28},[105,171958,2391],{"emptyLinePlaceholder":32},[105,171960,171961,171963,171965,171967,171969,171971],{"class":107,"line":1171},[105,171962,30400],{"class":164},[105,171964,171786],{"class":115},[105,171966,333],{"class":164},[105,171968,12427],{"class":115},[105,171970,562],{"class":164},[105,171972,30482],{"class":115},[105,171974,171975,171977,171980,171982,171984,171986,171988,171990],{"class":107,"line":1186},[105,171976,30400],{"class":164},[105,171978,171979],{"class":115},"(random.choice([",[105,171981,149873],{"class":220},[105,171983,12427],{"class":115},[105,171985,150921],{"class":220},[105,171987,12427],{"class":115},[105,171989,159716],{"class":220},[105,171991,33128],{"class":115},[105,171993,171994,171996,171999,172001,172003,172005,172007,172009,172011,172013,172015,172017,172019,172021],{"class":107,"line":1192},[105,171995,30400],{"class":164},[105,171997,171998],{"class":115},"(random.sample([",[105,172000,333],{"class":164},[105,172002,12427],{"class":115},[105,172004,193],{"class":164},[105,172006,12427],{"class":115},[105,172008,187],{"class":164},[105,172010,12427],{"class":115},[105,172012,409],{"class":164},[105,172014,12427],{"class":115},[105,172016,435],{"class":164},[105,172018,112187],{"class":115},[105,172020,193],{"class":164},[105,172022,30482],{"class":115},[76,172024,172026],{"id":172025},"_9122-time","9.12.2 time",[96,172028,172030],{"className":30363,"code":172029,"language":30365,"meta":22,"style":22},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[102,172031,172032,172038,172042,172049,172057],{"__ignoreMap":22},[105,172033,172034,172036],{"class":107,"line":108},[105,172035,30377],{"class":111},[105,172037,31814],{"class":115},[105,172039,172040],{"class":107,"line":28},[105,172041,2391],{"emptyLinePlaceholder":32},[105,172043,172044,172046],{"class":107,"line":1171},[105,172045,30400],{"class":164},[105,172047,172048],{"class":115},"(time.time())\n",[105,172050,172051,172053,172055],{"class":107,"line":1186},[105,172052,95056],{"class":115},[105,172054,333],{"class":164},[105,172056,122],{"class":115},[105,172058,172059,172061,172063,172066],{"class":107,"line":1192},[105,172060,30400],{"class":164},[105,172062,116],{"class":115},[105,172064,172065],{"class":220},"\"1秒后执行\"",[105,172067,122],{"class":115},[76,172069,172071],{"id":172070},"_9123-datetime","9.12.3 datetime",[96,172073,172075],{"className":30363,"code":172074,"language":30365,"meta":22,"style":22},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[102,172076,172077,172089,172093,172103,172110],{"__ignoreMap":22},[105,172078,172079,172081,172084,172086],{"class":107,"line":108},[105,172080,30722],{"class":111},[105,172082,172083],{"class":115}," datetime ",[105,172085,30377],{"class":111},[105,172087,172088],{"class":115}," datetime\n",[105,172090,172091],{"class":107,"line":28},[105,172092,2391],{"emptyLinePlaceholder":32},[105,172094,172095,172098,172100],{"class":107,"line":1171},[105,172096,172097],{"class":115},"now ",[105,172099,161],{"class":111},[105,172101,172102],{"class":115}," datetime.now()\n",[105,172104,172105,172107],{"class":107,"line":1186},[105,172106,30400],{"class":164},[105,172108,172109],{"class":115},"(now)\n",[105,172111,172112,172114,172117,172120,172122,172125],{"class":107,"line":1192},[105,172113,30400],{"class":164},[105,172115,172116],{"class":115},"(now.strftime(",[105,172118,172119],{"class":220},"\"%Y-%m-",[105,172121,156676],{"class":164},[105,172123,172124],{"class":220}," %H:%M:%S\"",[105,172126,30482],{"class":115},[76,172128,172130],{"id":172129},"_9124-os","9.12.4 os",[96,172132,172134],{"className":30363,"code":172133,"language":30365,"meta":22,"style":22},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[102,172135,172136,172142,172146,172153],{"__ignoreMap":22},[105,172137,172138,172140],{"class":107,"line":108},[105,172139,30377],{"class":111},[105,172141,45290],{"class":115},[105,172143,172144],{"class":107,"line":28},[105,172145,2391],{"emptyLinePlaceholder":32},[105,172147,172148,172150],{"class":107,"line":1171},[105,172149,30400],{"class":164},[105,172151,172152],{"class":115},"(os.getcwd())\n",[105,172154,172155,172157,172160,172163],{"class":107,"line":1186},[105,172156,30400],{"class":164},[105,172158,172159],{"class":115},"(os.listdir(",[105,172161,172162],{"class":220},"\".\"",[105,172164,30482],{"class":115},[76,172166,172168],{"id":172167},"_9125-sys","9.12.5 sys",[96,172170,172172],{"className":30363,"code":172171,"language":30365,"meta":22,"style":22},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[102,172173,172174,172181,172185,172192],{"__ignoreMap":22},[105,172175,172176,172178],{"class":107,"line":108},[105,172177,30377],{"class":111},[105,172179,172180],{"class":115}," sys\n",[105,172182,172183],{"class":107,"line":28},[105,172184,2391],{"emptyLinePlaceholder":32},[105,172186,172187,172189],{"class":107,"line":1171},[105,172188,30400],{"class":164},[105,172190,172191],{"class":115},"(sys.version)\n",[105,172193,172194,172196],{"class":107,"line":1186},[105,172195,30400],{"class":164},[105,172197,172198],{"class":115},"(sys.path)\n",[47,172200,172202,172203,172205,172206,367],{"id":172201},"_913-if-name-main","9.13 if ",[265,172204,79795],{}," == \"",[265,172207,102043],{},[14,172209,172210,172211,172214],{},"模块被直接运行和被导入时，",[102,172212,172213],{},"__name__"," 的值不同。",[14,172216,172217,172218,24603],{},"创建 ",[102,172219,172220],{},"my_module.py",[96,172222,172224],{"className":30363,"code":172223,"language":30365,"meta":22,"style":22},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[102,172225,172226,172234,172244,172248,172252,172264],{"__ignoreMap":22},[105,172227,172228,172230,172232],{"class":107,"line":108},[105,172229,31932],{"class":111},[105,172231,5201],{"class":1954},[105,172233,151078],{"class":115},[105,172235,172236,172238,172240,172242],{"class":107,"line":28},[105,172237,4081],{"class":111},[105,172239,10861],{"class":115},[105,172241,597],{"class":111},[105,172243,151089],{"class":115},[105,172245,172246],{"class":107,"line":1171},[105,172247,2391],{"emptyLinePlaceholder":32},[105,172249,172250],{"class":107,"line":1186},[105,172251,2391],{"emptyLinePlaceholder":32},[105,172253,172254,172256,172258,172260,172262],{"class":107,"line":1192},[105,172255,1522],{"class":111},[105,172257,31205],{"class":164},[105,172259,101544],{"class":111},[105,172261,101547],{"class":220},[105,172263,3730],{"class":115},[105,172265,172266,172268,172270,172272,172274,172276],{"class":107,"line":1206},[105,172267,31284],{"class":164},[105,172269,166585],{"class":115},[105,172271,333],{"class":164},[105,172273,12427],{"class":115},[105,172275,193],{"class":164},[105,172277,30482],{"class":115},[14,172279,172280],{},"作用：",[59,172282,172283,172286],{},[62,172284,172285],{},"直接运行该文件时，执行测试代码。",[62,172287,172288],{},"被其他文件导入时，不执行测试代码。",[14,172290,172291],{},"这是写模块时很常用的习惯。",[47,172293,172295],{"id":172294},"_914-包","9.14 包",[14,172297,172298,172299,172302],{},"包是包含 ",[102,172300,172301],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172304,172305],{},"目录结构：",[96,172307,172310],{"className":172308,"code":172309,"language":5179,"meta":22},[5177],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[102,172311,172309],{"__ignoreMap":22},[14,172313,172314],{},"导入：",[96,172316,172318],{"className":30363,"code":172317,"language":30365,"meta":22,"style":22},"from utils.file_utils import read_file\n",[102,172319,172320],{"__ignoreMap":22},[105,172321,172322,172324,172327,172329],{"class":107,"line":108},[105,172323,30722],{"class":111},[105,172325,172326],{"class":115}," utils.file_utils ",[105,172328,30377],{"class":111},[105,172330,172331],{"class":115}," read_file\n",[14,172333,172334,172336],{},[102,172335,172301],{}," 可以为空，也可以写包初始化逻辑。",[47,172338,172340],{"id":172339},"_915-第三方包","9.15 第三方包",[14,172342,172343,172344,172346],{},"第三方包通过 ",[102,172345,23824],{}," 安装。",[96,172348,172350],{"className":23815,"code":172349,"language":23817,"meta":22,"style":22},"pip install requests\n",[102,172351,172352],{"__ignoreMap":22},[105,172353,172354,172356,172358],{"class":107,"line":108},[105,172355,23824],{"class":1954},[105,172357,23827],{"class":220},[105,172359,146083],{"class":220},[14,172361,172362],{},"使用：",[96,172364,172366],{"className":30363,"code":172365,"language":30365,"meta":22,"style":22},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[102,172367,172368,172374,172378,172393],{"__ignoreMap":22},[105,172369,172370,172372],{"class":107,"line":108},[105,172371,30377],{"class":111},[105,172373,146083],{"class":115},[105,172375,172376],{"class":107,"line":28},[105,172377,2391],{"emptyLinePlaceholder":32},[105,172379,172380,172383,172385,172388,172391],{"class":107,"line":1171},[105,172381,172382],{"class":115},"response ",[105,172384,161],{"class":111},[105,172386,172387],{"class":115}," requests.get(",[105,172389,172390],{"class":220},"\"https:\u002F\u002Fwww.example.com\"",[105,172392,122],{"class":115},[105,172394,172395,172397],{"class":107,"line":1186},[105,172396,30400],{"class":164},[105,172398,172399],{"class":115},"(response.status_code)\n",[14,172401,172402],{},"查看已安装包：",[96,172404,172406],{"className":23815,"code":172405,"language":23817,"meta":22,"style":22},"pip list\n",[102,172407,172408],{"__ignoreMap":22},[105,172409,172410,172412],{"class":107,"line":108},[105,172411,23824],{"class":1954},[105,172413,118940],{"class":220},[14,172415,172416],{},"导出项目依赖：",[96,172418,172419],{"className":23815,"code":146278,"language":23817,"meta":22,"style":22},[102,172420,172421],{"__ignoreMap":22},[105,172422,172423,172425,172427,172429],{"class":107,"line":108},[105,172424,23824],{"class":1954},[105,172426,146287],{"class":220},[105,172428,26207],{"class":111},[105,172430,146292],{"class":220},[14,172432,172433],{},"安装项目依赖：",[96,172435,172436],{"className":23815,"code":146298,"language":23817,"meta":22,"style":22},[102,172437,172438],{"__ignoreMap":22},[105,172439,172440,172442,172444,172446],{"class":107,"line":108},[105,172441,23824],{"class":1954},[105,172443,23827],{"class":220},[105,172445,119624],{"class":164},[105,172447,146292],{"class":220},[47,172449,172451],{"id":172450},"_916-模块搜索路径","9.16 模块搜索路径",[14,172453,172454,172455,172458],{},"Python 导入模块时会在 ",[102,172456,172457],{},"sys.path"," 中查找。",[96,172460,172462],{"className":30363,"code":172461,"language":30365,"meta":22,"style":22},"import sys\n\nfor path in sys.path:\n    print(path)\n",[102,172463,172464,172470,172474,172486],{"__ignoreMap":22},[105,172465,172466,172468],{"class":107,"line":108},[105,172467,30377],{"class":111},[105,172469,172180],{"class":115},[105,172471,172472],{"class":107,"line":28},[105,172473,2391],{"emptyLinePlaceholder":32},[105,172475,172476,172478,172481,172483],{"class":107,"line":1171},[105,172477,3016],{"class":111},[105,172479,172480],{"class":115}," path ",[105,172482,26028],{"class":111},[105,172484,172485],{"class":115}," sys.path:\n",[105,172487,172488,172490],{"class":107,"line":1186},[105,172489,31284],{"class":164},[105,172491,169214],{"class":115},[14,172493,172494],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172496,157608],{},[96,172498,172501],{"className":172499,"code":172500,"language":5179,"meta":22},[5177],"random.py\njson.py\ntime.py\n",[102,172502,172500],{"__ignoreMap":22},[14,172504,172505],{},"这些文件名可能导致导入异常。",[47,172507,172509],{"id":172508},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172511,172305],{},[96,172513,172516],{"className":172514,"code":172515,"language":5179,"meta":22},[5177],"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",[102,172517,172515],{"__ignoreMap":22},[14,172519,172520,24603],{},[102,172521,172522],{},"utils\u002Ffile_utils.py",[96,172524,172526],{"className":30363,"code":172525,"language":30365,"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",[102,172527,172528,172534,172544,172548,172552,172562,172572,172580,172586,172590,172617,172627,172631,172635,172645,172671],{"__ignoreMap":22},[105,172529,172530,172532],{"class":107,"line":108},[105,172531,30377],{"class":111},[105,172533,147076],{"class":115},[105,172535,172536,172538,172540,172542],{"class":107,"line":28},[105,172537,30722],{"class":111},[105,172539,108296],{"class":115},[105,172541,30377],{"class":111},[105,172543,108301],{"class":115},[105,172545,172546],{"class":107,"line":1171},[105,172547,2391],{"emptyLinePlaceholder":32},[105,172549,172550],{"class":107,"line":1186},[105,172551,2391],{"emptyLinePlaceholder":32},[105,172553,172554,172556,172559],{"class":107,"line":1192},[105,172555,31932],{"class":111},[105,172557,172558],{"class":1954}," read_json",[105,172560,172561],{"class":115},"(path):\n",[105,172563,172564,172567,172569],{"class":107,"line":1206},[105,172565,172566],{"class":115},"    path ",[105,172568,161],{"class":111},[105,172570,172571],{"class":115}," Path(path)\n",[105,172573,172574,172576,172578],{"class":107,"line":1212},[105,172575,3092],{"class":111},[105,172577,38915],{"class":111},[105,172579,169295],{"class":115},[105,172581,172582,172584],{"class":107,"line":1303},[105,172583,14744],{"class":111},[105,172585,51823],{"class":115},[105,172587,172588],{"class":107,"line":1309},[105,172589,2391],{"emptyLinePlaceholder":32},[105,172591,172592,172594,172596,172599,172601,172603,172605,172607,172609,172611,172613,172615],{"class":107,"line":1321},[105,172593,34163],{"class":111},[105,172595,146776],{"class":164},[105,172597,172598],{"class":115},"(path, ",[105,172600,146786],{"class":220},[105,172602,12427],{"class":115},[105,172604,146791],{"class":5208},[105,172606,161],{"class":111},[105,172608,146796],{"class":220},[105,172610,13706],{"class":115},[105,172612,31368],{"class":111},[105,172614,148138],{"class":5208},[105,172616,3730],{"class":115},[105,172618,172619,172621,172623,172625],{"class":107,"line":1603},[105,172620,14744],{"class":111},[105,172622,148149],{"class":115},[105,172624,45339],{"class":5208},[105,172626,122],{"class":115},[105,172628,172629],{"class":107,"line":1608},[105,172630,2391],{"emptyLinePlaceholder":32},[105,172632,172633],{"class":107,"line":1614},[105,172634,2391],{"emptyLinePlaceholder":32},[105,172636,172637,172639,172642],{"class":107,"line":1619},[105,172638,31932],{"class":111},[105,172640,172641],{"class":1954}," write_json",[105,172643,172644],{"class":115},"(path, data):\n",[105,172646,172647,172649,172651,172653,172655,172657,172659,172661,172663,172665,172667,172669],{"class":107,"line":1633},[105,172648,34163],{"class":111},[105,172650,146776],{"class":164},[105,172652,172598],{"class":115},[105,172654,151961],{"class":220},[105,172656,12427],{"class":115},[105,172658,146791],{"class":5208},[105,172660,161],{"class":111},[105,172662,146796],{"class":220},[105,172664,13706],{"class":115},[105,172666,31368],{"class":111},[105,172668,148138],{"class":5208},[105,172670,3730],{"class":115},[105,172672,172673,172676,172678,172680,172682,172684,172686,172688,172690,172692,172694],{"class":107,"line":1638},[105,172674,172675],{"class":115},"        json.dump(data, ",[105,172677,45339],{"class":5208},[105,172679,12427],{"class":115},[105,172681,147122],{"class":5208},[105,172683,161],{"class":111},[105,172685,33972],{"class":164},[105,172687,12427],{"class":115},[105,172689,151997],{"class":5208},[105,172691,161],{"class":111},[105,172693,193],{"class":164},[105,172695,122],{"class":115},[14,172697,172698,24603],{},[102,172699,154592],{},[96,172701,172703],{"className":30363,"code":172702,"language":30365,"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",[102,172704,172705,172716,172720,172733,172753],{"__ignoreMap":22},[105,172706,172707,172709,172711,172713],{"class":107,"line":108},[105,172708,30722],{"class":111},[105,172710,172326],{"class":115},[105,172712,30377],{"class":111},[105,172714,172715],{"class":115}," read_json, write_json\n",[105,172717,172718],{"class":107,"line":28},[105,172719,2391],{"emptyLinePlaceholder":32},[105,172721,172722,172724,172726,172729,172731],{"class":107,"line":1171},[105,172723,159701],{"class":115},[105,172725,161],{"class":111},[105,172727,172728],{"class":115}," read_json(",[105,172730,151816],{"class":220},[105,172732,122],{"class":115},[105,172734,172735,172737,172739,172741,172743,172745,172747,172749,172751],{"class":107,"line":1186},[105,172736,170519],{"class":115},[105,172738,62664],{"class":220},[105,172740,51422],{"class":115},[105,172742,149873],{"class":220},[105,172744,12427],{"class":115},[105,172746,151457],{"class":220},[105,172748,51422],{"class":115},[105,172750,1105],{"class":164},[105,172752,165137],{"class":115},[105,172754,172755,172758,172760],{"class":107,"line":1192},[105,172756,172757],{"class":115},"write_json(",[105,172759,151816],{"class":220},[105,172761,172762],{"class":115},", students)\n",[47,172764,172766],{"id":172765},"_918-易错点","9.18 易错点",[59,172768,172769,172772,172777,172782,172785,172788],{},[62,172770,172771],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[62,172773,172774,172775,28370],{},"能指定异常类型就不要裸写 ",[102,172776,170879],{},[62,172778,172779,172781],{},[102,172780,171254],{}," 无论是否出错都会执行。",[62,172783,172784],{},"模块文件名不要和标准库重名。",[62,172786,172787],{},"导入自己写的模块时，要注意运行目录。",[62,172789,172790],{},"第三方包要安装到当前解释器或虚拟环境中。",[47,172792,172794],{"id":172793},"_919-本章练习","9.19 本章练习",[59,172796,172797,172800,172803,172809,172816],{},[62,172798,172799],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[62,172801,172802],{},"写函数读取文件，如果文件不存在则返回空字符串。",[62,172804,172217,172805,172808],{},[102,172806,172807],{},"math_utils.py","，实现加减乘除函数并导入使用。",[62,172810,172811,172812,172815],{},"创建一个 ",[102,172813,172814],{},"utils"," 包，把 JSON 读写函数放进去。",[62,172817,172818],{},"写一个程序，捕获除零异常和输入格式异常。",[5118,172820,172821],{},"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":28,"depth":28,"links":172823},[172824,172825,172826,172827,172828,172829,172830,172831,172832,172833,172834,172840,172847,172849,172850,172851,172852,172853,172854],{"id":170676,"depth":28,"text":170677},{"id":170804,"depth":28,"text":170805},{"id":170853,"depth":28,"text":170854},{"id":171002,"depth":28,"text":171003},{"id":171174,"depth":28,"text":171175},{"id":171243,"depth":28,"text":171244},{"id":171354,"depth":28,"text":171355},{"id":171480,"depth":28,"text":171481},{"id":171605,"depth":28,"text":171606},{"id":171660,"depth":28,"text":171661},{"id":171759,"depth":28,"text":171760,"children":172835},[172836,172837,172838,172839],{"id":171763,"depth":1171,"text":171764},{"id":171797,"depth":1171,"text":171798},{"id":171836,"depth":1171,"text":171837},{"id":171915,"depth":1171,"text":171916},{"id":171938,"depth":28,"text":171939,"children":172841},[172842,172843,172844,172845,172846],{"id":171942,"depth":1171,"text":171943},{"id":172025,"depth":1171,"text":172026},{"id":172070,"depth":1171,"text":172071},{"id":172129,"depth":1171,"text":172130},{"id":172167,"depth":1171,"text":172168},{"id":172201,"depth":28,"text":172848},"9.13 if name == \"main\"",{"id":172294,"depth":28,"text":172295},{"id":172339,"depth":28,"text":172340},{"id":172450,"depth":28,"text":172451},{"id":172508,"depth":28,"text":172509},{"id":172765,"depth":28,"text":172766},{"id":172793,"depth":28,"text":172794},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170668,"description":23369},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172861,"title":172862,"body":172863,"description":173026,"extension":30,"meta":173027,"navigation":32,"path":173028,"seo":173029,"stem":173030,"__hash__":173031},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172864,"toc":173021},[172865,172868,172871,172874,172885,172887,172961,172964,172967,172970,172973,172976,172979,172982,172985,172988,172991],[10,172866,172862],{"id":172867},"python教程",[14,172869,172870],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172872,172873],{},"建议学习环境：",[59,172875,172876,172879,172882],{},[62,172877,172878],{},"Python 版本：Python 3.10 及以上。",[62,172880,172881],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[62,172883,172884],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[47,172886,117063],{"id":117063},[59,172888,172889,172895,172901,172907,172913,172919,172925,172931,172937,172943,172949,172955],{},[62,172890,172891],{},[354,172892,172894],{"href":172893},".\u002Fch1-Python","Python环境与第一个程序",[62,172896,172897],{},[354,172898,172900],{"href":172899},".\u002Fch2","基础语法、变量与字符串",[62,172902,172903],{},[354,172904,172906],{"href":172905},".\u002Fch3","判断语句",[62,172908,172909],{},[354,172910,172912],{"href":172911},".\u002Fch4","循环语句",[62,172914,172915],{},[354,172916,172918],{"href":172917},".\u002Fch5","函数基础",[62,172920,172921],{},[354,172922,172924],{"href":172923},".\u002Fch6","数据容器",[62,172926,172927],{},[354,172928,172930],{"href":172929},".\u002Fch7","函数进阶",[62,172932,172933],{},[354,172934,172936],{"href":172935},".\u002Fch8","文件操作",[62,172938,172939],{},[354,172940,172942],{"href":172941},".\u002Fch9","异常、模块与包",[62,172944,172945],{},[354,172946,172948],{"href":172947},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[62,172950,172951],{},[354,172952,172954],{"href":172953},".\u002Fch11","面向对象基础",[62,172956,172957],{},[354,172958,172960],{"href":172959},".\u002Fch12","综合案例与复习路线",[47,172962,172963],{"id":172963},"学习路线",[14,172965,172966],{},"第一阶段：能运行程序。",[14,172968,172969],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,172971,172972],{},"第二阶段：能组织数据。",[14,172974,172975],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,172977,172978],{},"第三阶段：能封装逻辑。",[14,172980,172981],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,172983,172984],{},"第四阶段：能做小项目。",[14,172986,172987],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[47,172989,172990],{"id":172990},"参考资料",[59,172992,172993,173000,173007,173014],{},[62,172994,172995,172996],{},"黑马程序员 Python 入门教程推荐：",[354,172997,172998],{"href":172998,"rel":172999},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23858],[62,173001,173002,173003],{},"Python 官方中文教程：",[354,173004,173005],{"href":173005,"rel":173006},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23858],[62,173008,173009,173010],{},"Python 标准库文档：",[354,173011,173012],{"href":173012,"rel":173013},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23858],[62,173015,173016,173017],{},"pyecharts 文档：",[354,173018,173019],{"href":173019,"rel":173020},"https:\u002F\u002Fpyecharts.org\u002F",[23858],{"title":22,"searchDepth":28,"depth":28,"links":173022},[173023,173024,173025],{"id":117063,"depth":28,"text":117063},{"id":172963,"depth":28,"text":172963},{"id":172990,"depth":28,"text":172990},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23371},"\u002Fwiki\u002F2024-10-10-python",{"title":172862,"description":173026},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331400243]